aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorBart Van Assche <bvanassche@acm.org>2011-07-13 12:19:16 -0400
committerRoland Dreier <roland@purestorage.com>2011-07-13 12:19:16 -0400
commitfd1b6c4a693c9cac59375ffb36ffe5d7c079037c (patch)
treec1d4420f05e737d3e0049c2568ec393ae8c684ad /drivers/infiniband
parent620917de59eeb934b9f8cf35cc2d95c1ac8ed0fc (diff)
IB/srp: Avoid duplicate devices from LUN scan
SCSI scanning of a channel:id:lun triplet in Linux works as follows (function scsi_scan_target() in drivers/scsi/scsi_scan.c): - If lun == SCAN_WILD_CARD, send a REPORT LUNS command to the target and process the result. - If lun != SCAN_WILD_CARD, send an INQUIRY command to the LUN corresponding to the specified channel:id:lun triplet to verify whether the LUN exists. So a SCSI driver must either take the channel and target id values in account in its quecommand() function or it should declare that it only supports one channel and one target id. Currently the ib_srp driver does neither. As a result scanning the SCSI bus via e.g. rescan-scsi-bus.sh causes many duplicate SCSI devices to be created. For each 0:0:L device, several duplicates are created with the same LUN number and with (C:I) != (0:0). Fix this by declaring that the ib_srp driver only supports one channel and one target id. Signed-off-by: Bart Van Assche <bvanassche@acm.org> Cc: <stable@kernel.org> Acked-by: David Dillow <dillowda@ornl.gov> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/ulp/srp/ib_srp.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index ee165fdcb596..7d5109bbd1ad 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -2127,6 +2127,8 @@ static ssize_t srp_create_target(struct device *dev,
2127 return -ENOMEM; 2127 return -ENOMEM;
2128 2128
2129 target_host->transportt = ib_srp_transport_template; 2129 target_host->transportt = ib_srp_transport_template;
2130 target_host->max_channel = 0;
2131 target_host->max_id = 1;
2130 target_host->max_lun = SRP_MAX_LUN; 2132 target_host->max_lun = SRP_MAX_LUN;
2131 target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb; 2133 target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
2132 2134