22
22
#include <linux/time.h>
23
23
#include <linux/workqueue.h>
24
24
#include <linux/delay.h>
25
- #include <scsi/scsi_device.h>
26
25
#include <scsi/scsi_dh.h>
27
26
#include <linux/atomic.h>
28
27
#include <linux/blk-mq.h>
@@ -805,15 +804,14 @@ static int parse_path_selector(struct dm_arg_set *as, struct priority_group *pg,
805
804
return 0 ;
806
805
}
807
806
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 )
809
809
{
810
810
struct request_queue * q = bdev_get_queue (bdev );
811
- const char * attached_handler_name ;
812
811
int r ;
813
812
814
813
if (test_bit (MPATHF_RETAIN_ATTACHED_HW_HANDLER , & m -> flags )) {
815
814
retain :
816
- attached_handler_name = scsi_dh_attached_handler_name (q , GFP_KERNEL );
817
815
if (attached_handler_name ) {
818
816
/*
819
817
* 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
867
865
int r ;
868
866
struct pgpath * p ;
869
867
struct multipath * m = ti -> private ;
870
- struct scsi_device * sdev ;
868
+ struct request_queue * q ;
869
+ const char * attached_handler_name ;
871
870
872
871
/* we need at least a path arg */
873
872
if (as -> argc < 1 ) {
@@ -886,11 +885,11 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
886
885
goto bad ;
887
886
}
888
887
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 ) {
892
891
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 );
894
893
if (r ) {
895
894
dm_put_device (ti , p -> path .dev );
896
895
goto bad ;
0 commit comments