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/workqueue.h> | ||||
| #include <linux/delay.h> | ||||
| #include <scsi/scsi_device.h> | ||||
| #include <scsi/scsi_dh.h> | ||||
| #include <linux/atomic.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; | ||||
| } | ||||
| 
 | ||||
| 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); | ||||
| 	const char *attached_handler_name; | ||||
| 	int r; | ||||
| 
 | ||||
| 	if (test_bit(MPATHF_RETAIN_ATTACHED_HW_HANDLER, &m->flags)) { | ||||
| retain: | ||||
| 		attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL); | ||||
| 		if (attached_handler_name) { | ||||
| 			/*
 | ||||
| 			 * 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; | ||||
| 	struct pgpath *p; | ||||
| 	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 */ | ||||
| 	if (as->argc < 1) { | ||||
|  | @ -886,11 +885,11 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps | |||
| 		goto bad; | ||||
| 	} | ||||
| 
 | ||||
| 	sdev = scsi_device_from_queue(bdev_get_queue(p->path.dev->bdev)); | ||||
| 	if (sdev) { | ||||
| 		put_device(&sdev->sdev_gendev); | ||||
| 	q = bdev_get_queue(p->path.dev->bdev); | ||||
| 	attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL); | ||||
| 	if (attached_handler_name) { | ||||
| 		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) { | ||||
| 			dm_put_device(ti, p->path.dev); | ||||
| 			goto bad; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Mike Snitzer
						Mike Snitzer