diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2014-06-06 02:37:00 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2014-06-06 04:21:12 -0400 |
commit | e7810c2d2c37fa8e58dda74b00790dab60fe6fba (patch) | |
tree | fe484bce9b8121904c2ae08f0eee246e757caca3 /drivers/target | |
parent | 2363d196686e44c0158929e7cf96c8589a24a81b (diff) |
target: Allow READ_CAPACITY opcode in ALUA Standby access state
This patch allows READ_CAPACITY + SAI_READ_CAPACITY_16 opcode
processing to occur while the associated ALUA group is in Standby
access state.
This is required to avoid host side LUN probe failures during the
initial scan if an ALUA group has already implicitly changed into
Standby access state.
This addresses a bug reported by Chris + Philip using dm-multipath
+ ESX hosts configured with ALUA multipath.
Reported-by: Chris Boot <crb@tiger-computing.co.uk>
Reported-by: Philip Gaw <pgaw@darktech.org.uk>
Cc: Chris Boot <crb@tiger-computing.co.uk>
Cc: Philip Gaw <pgaw@darktech.org.uk>
Cc: Hannes Reinecke <hare@suse.de>
Cc: stable@vger.kernel.org
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/target_core_alua.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c index fcbe6125b73e..63512cc01a1f 100644 --- a/drivers/target/target_core_alua.c +++ b/drivers/target/target_core_alua.c | |||
@@ -576,7 +576,16 @@ static inline int core_alua_state_standby( | |||
576 | case REPORT_LUNS: | 576 | case REPORT_LUNS: |
577 | case RECEIVE_DIAGNOSTIC: | 577 | case RECEIVE_DIAGNOSTIC: |
578 | case SEND_DIAGNOSTIC: | 578 | case SEND_DIAGNOSTIC: |
579 | case READ_CAPACITY: | ||
579 | return 0; | 580 | return 0; |
581 | case SERVICE_ACTION_IN: | ||
582 | switch (cdb[1] & 0x1f) { | ||
583 | case SAI_READ_CAPACITY_16: | ||
584 | return 0; | ||
585 | default: | ||
586 | set_ascq(cmd, ASCQ_04H_ALUA_TG_PT_STANDBY); | ||
587 | return 1; | ||
588 | } | ||
580 | case MAINTENANCE_IN: | 589 | case MAINTENANCE_IN: |
581 | switch (cdb[1] & 0x1f) { | 590 | switch (cdb[1] & 0x1f) { |
582 | case MI_REPORT_TARGET_PGS: | 591 | case MI_REPORT_TARGET_PGS: |