mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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