| From e7810c2d2c37fa8e58dda74b00790dab60fe6fba Mon Sep 17 00:00:00 2001 |
| From: Nicholas Bellinger <nab@linux-iscsi.org> |
| Date: Thu, 5 Jun 2014 23:37:00 -0700 |
| Subject: target: Allow READ_CAPACITY opcode in ALUA Standby access state |
| |
| From: Nicholas Bellinger <nab@linux-iscsi.org> |
| |
| commit e7810c2d2c37fa8e58dda74b00790dab60fe6fba upstream. |
| |
| 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. |
| |
| (Drop v3.15 specific set_ascq usage - nab) |
| |
| 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> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/target/target_core_alua.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/target/target_core_alua.c |
| +++ b/drivers/target/target_core_alua.c |
| @@ -564,7 +564,16 @@ static inline int core_alua_state_standb |
| case REPORT_LUNS: |
| case RECEIVE_DIAGNOSTIC: |
| case SEND_DIAGNOSTIC: |
| + case READ_CAPACITY: |
| return 0; |
| + case SERVICE_ACTION_IN: |
| + switch (cdb[1] & 0x1f) { |
| + case SAI_READ_CAPACITY_16: |
| + return 0; |
| + default: |
| + *alua_ascq = ASCQ_04H_ALUA_TG_PT_STANDBY; |
| + return 1; |
| + } |
| case MAINTENANCE_IN: |
| switch (cdb[1] & 0x1f) { |
| case MI_REPORT_TARGET_PGS: |