target: Allow READ_CAPACITY opcode in ALUA Standby access state [Linux 3.15]

This Linux kernel change "target: Allow READ_CAPACITY opcode in ALUA Standby access state" is included in the Linux 3.15 release. This change is authored by Nicholas Bellinger <nab [at]> on Thu Jun 5 23:37:00 2014 -0700. The commit for this change in Linux stable tree is e7810c2 (patch).

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 <[email protected]>
Reported-by: Philip Gaw <[email protected]>
Cc: Chris Boot <[email protected]>
Cc: Philip Gaw <[email protected]>
Cc: Hannes Reinecke <[email protected]>
Cc: [email protected]
Signed-off-by: Nicholas Bellinger <[email protected]>

There are 9 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/target/target_core_alua.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
index fcbe612..63512cc 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(
    case REPORT_LUNS:
        return 0;
+       switch (cdb[1] & 0x1f) {
+       case SAI_READ_CAPACITY_16:
+           return 0;
+       default:
+           set_ascq(cmd, ASCQ_04H_ALUA_TG_PT_STANDBY);
+           return 1;
+       }
        switch (cdb[1] & 0x1f) {
        case MI_REPORT_TARGET_PGS:

Leave a Reply

Your email address will not be published. Required fields are marked *