forked from mirrors/linux
		
	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: 8d47e65948 ("dm mpath: remove unnecessary NVMe branching in favor of scsi_dh checks")
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									c37366742b
								
							
						
					
					
						commit
						e8f74a0f00
					
				
					 1 changed files with 8 additions and 9 deletions
				
			
		|  | @ -22,7 +22,6 @@ | ||||||
| #include <linux/time.h> | #include <linux/time.h> | ||||||
| #include <linux/workqueue.h> | #include <linux/workqueue.h> | ||||||
| #include <linux/delay.h> | #include <linux/delay.h> | ||||||
| #include <scsi/scsi_device.h> |  | ||||||
| #include <scsi/scsi_dh.h> | #include <scsi/scsi_dh.h> | ||||||
| #include <linux/atomic.h> | #include <linux/atomic.h> | ||||||
| #include <linux/blk-mq.h> | #include <linux/blk-mq.h> | ||||||
|  | @ -805,15 +804,14 @@ static int parse_path_selector(struct dm_arg_set *as, struct priority_group *pg, | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int setup_scsi_dh(struct block_device *bdev, struct multipath *m, char **error) | static int setup_scsi_dh(struct block_device *bdev, struct multipath *m, | ||||||
|  | 			 const char *attached_handler_name, char **error) | ||||||
| { | { | ||||||
| 	struct request_queue *q = bdev_get_queue(bdev); | 	struct request_queue *q = bdev_get_queue(bdev); | ||||||
| 	const char *attached_handler_name; |  | ||||||
| 	int r; | 	int r; | ||||||
| 
 | 
 | ||||||
| 	if (test_bit(MPATHF_RETAIN_ATTACHED_HW_HANDLER, &m->flags)) { | 	if (test_bit(MPATHF_RETAIN_ATTACHED_HW_HANDLER, &m->flags)) { | ||||||
| retain: | retain: | ||||||
| 		attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL); |  | ||||||
| 		if (attached_handler_name) { | 		if (attached_handler_name) { | ||||||
| 			/*
 | 			/*
 | ||||||
| 			 * Clear any hw_handler_params associated with a | 			 * 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 | ||||||
| 	int r; | 	int r; | ||||||
| 	struct pgpath *p; | 	struct pgpath *p; | ||||||
| 	struct multipath *m = ti->private; | 	struct multipath *m = ti->private; | ||||||
| 	struct scsi_device *sdev; | 	struct request_queue *q; | ||||||
|  | 	const char *attached_handler_name; | ||||||
| 
 | 
 | ||||||
| 	/* we need at least a path arg */ | 	/* we need at least a path arg */ | ||||||
| 	if (as->argc < 1) { | 	if (as->argc < 1) { | ||||||
|  | @ -886,11 +885,11 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps | ||||||
| 		goto bad; | 		goto bad; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	sdev = scsi_device_from_queue(bdev_get_queue(p->path.dev->bdev)); | 	q = bdev_get_queue(p->path.dev->bdev); | ||||||
| 	if (sdev) { | 	attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL); | ||||||
| 		put_device(&sdev->sdev_gendev); | 	if (attached_handler_name) { | ||||||
| 		INIT_DELAYED_WORK(&p->activate_path, activate_path_work); | 		INIT_DELAYED_WORK(&p->activate_path, activate_path_work); | ||||||
| 		r = setup_scsi_dh(p->path.dev->bdev, m, &ti->error); | 		r = setup_scsi_dh(p->path.dev->bdev, m, attached_handler_name, &ti->error); | ||||||
| 		if (r) { | 		if (r) { | ||||||
| 			dm_put_device(ti, p->path.dev); | 			dm_put_device(ti, p->path.dev); | ||||||
| 			goto bad; | 			goto bad; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Mike Snitzer
						Mike Snitzer