Skip to content

Commit e8f74a0

Browse files
committed
dm mpath: eliminate need to use scsi_device_from_queue
Instead of scsi_device_from_queue(), use scsi_dh_attached_handler_name() -- whose implementation uses scsi_device_from_queue() to avoid trying to access SCSI-specific resources from non-SCSI devices. Fixes buildbot reported issue when CONFIG_SCSI isn't set: ERROR: "scsi_device_from_queue" [drivers/md/dm-multipath.ko] undefined! Fixes: 8d47e65 ("dm mpath: remove unnecessary NVMe branching in favor of scsi_dh checks") Signed-off-by: Mike Snitzer <snitzer@redhat.com>
1 parent c373667 commit e8f74a0

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

drivers/md/dm-mpath.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include <linux/time.h>
2323
#include <linux/workqueue.h>
2424
#include <linux/delay.h>
25-
#include <scsi/scsi_device.h>
2625
#include <scsi/scsi_dh.h>
2726
#include <linux/atomic.h>
2827
#include <linux/blk-mq.h>
@@ -805,15 +804,14 @@ static int parse_path_selector(struct dm_arg_set *as, struct priority_group *pg,
805804
return 0;
806805
}
807806

808-
static int setup_scsi_dh(struct block_device *bdev, struct multipath *m, char **error)
807+
static int setup_scsi_dh(struct block_device *bdev, struct multipath *m,
808+
const char *attached_handler_name, char **error)
809809
{
810810
struct request_queue *q = bdev_get_queue(bdev);
811-
const char *attached_handler_name;
812811
int r;
813812

814813
if (test_bit(MPATHF_RETAIN_ATTACHED_HW_HANDLER, &m->flags)) {
815814
retain:
816-
attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL);
817815
if (attached_handler_name) {
818816
/*
819817
* Clear any hw_handler_params associated with a
@@ -867,7 +865,8 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
867865
int r;
868866
struct pgpath *p;
869867
struct multipath *m = ti->private;
870-
struct scsi_device *sdev;
868+
struct request_queue *q;
869+
const char *attached_handler_name;
871870

872871
/* we need at least a path arg */
873872
if (as->argc < 1) {
@@ -886,11 +885,11 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
886885
goto bad;
887886
}
888887

889-
sdev = scsi_device_from_queue(bdev_get_queue(p->path.dev->bdev));
890-
if (sdev) {
891-
put_device(&sdev->sdev_gendev);
888+
q = bdev_get_queue(p->path.dev->bdev);
889+
attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL);
890+
if (attached_handler_name) {
892891
INIT_DELAYED_WORK(&p->activate_path, activate_path_work);
893-
r = setup_scsi_dh(p->path.dev->bdev, m, &ti->error);
892+
r = setup_scsi_dh(p->path.dev->bdev, m, attached_handler_name, &ti->error);
894893
if (r) {
895894
dm_put_device(ti, p->path.dev);
896895
goto bad;

0 commit comments

Comments
 (0)