sd: Fixup capacity for standby ports
PATCH 1/1 sd: Fixup capacity for standby ports
If a target port is in ALUA 'standby' state it does not need to respond to a 'READ CAPACITY' command. So fixup the initialization for these cases.
Signed-off-by Hannes Reinecke <[email protected]>
--- drivers/scsi/sd.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/scsi/sd.c +12 -0
@@ -1992,6 +1992,11 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp, sshdr.asc == 0x04 && sshdr.ascq == 0x0A)/* ALUA state transition; always retry */ continue ; +if (sense_valid && + sshdr.sense_key ==NOT_READY && + sshdr.asc ==0x04 && sshdr.ascq ==0x0B ) +/* Target port in standy state */ +return 0 ; } retries--;
@@ -2079,6 +2084,11 @@ static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp, sshdr.asc == 0x04 && sshdr.ascq == 0x0A)/* ALUA state transition; always retry */ continue ; +if (sense_valid && + sshdr.sense_key ==NOT_READY && + sshdr.asc ==0x04 && sshdr.ascq ==0x0B ) +/* Target port in standy state */ +return 0 ; } retries--;
@@ -2193,6 +2203,8 @@ got_data: sector_size =512 ;sd_printk (KERN_NOTICE , sdkp,"Sector size 0 reported, " "assuming 512.\n" ); +if (!sdkp->physical_block_size) + sdkp->physical_block_size = sector_size; } if (sector_size != 512 &&
Signature · 1 line
1.8.5.2