During the drive sanitization, when the sd driver issues TEST UNIT READY (TUR),
drive reports Sense Key: NOT_READY, ASC: 0x4 and ASCQ: 0x1b.
Sd driver issuing START_STOP command to spin up the drive.
This causes a hung and call trace occurred.
sd driver should take note of Sense Key: NOT_READY, ASC: 0x4 and ASCQ: 0x1b and
should not send START_STOP command until that condition clears.
Excerpt of dmesg:
[ 206.998697] sd 6:0:0:0: [sda] tag#1 FAILED Result: hostbyte=DID_OK
driverbyte=DRIVER_SENSE
[ 206.998714] sd 6:0:0:0: [sda] tag#1 Sense Key : Not Ready [current]
[ 206.998720] sd 6:0:0:0: [sda] tag#1 Add. Sense: Logical unit not ready,
sanitize in progress
[ 206.998727] sd 6:0:0:0: [sda] tag#1 CDB: Read(10) 28 00 00 00 00 04 00 00 04
00
[ 206.998732] print_req_error: I/O error, dev sda, sector 4
[ 206.998787] Buffer I/O error on dev sda, logical block 1, async page read
[ 206.999786] sd 6:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_OK
driverbyte=DRIVER_SENSE
[ 206.999799] sd 6:0:0:0: [sda] tag#0 Sense Key : Not Ready [current]
[ 206.999806] sd 6:0:0:0: [sda] tag#0 Add. Sense: Logical unit not ready,
sanitize in progress
[ 206.999812] sd 6:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 04
00
[ 206.999816] print_req_error: I/O error, dev sda, sector 0
[ 207.000127] Buffer I/O error on dev sda, logical block 0, async page read
[ 207.000761] sd 6:0:0:0: [sda] tag#1 FAILED Result: hostbyte=DID_OK
driverbyte=DRIVER_SENSE
[ 207.000775] sd 6:0:0:0: [sda] tag#1 Sense Key : Not Ready [current]
[ 207.000780] sd 6:0:0:0: [sda] tag#1 Add. Sense: Logical unit not ready,
sanitize in progress
[ 207.000786] sd 6:0:0:0: [sda] tag#1 CDB: Read(10) 28 00 00 00 00 04 00 00 04
00
[ 207.000789] print_req_error: I/O error, dev sda, sector 4
[ 207.000835] Buffer I/O error on dev sda, logical block 1, async page read
[ 207.013461] Dev sda: unable to read RDB block 0
[ 207.041607] sda: unable to read partition table
[ 207.051796] sd 6:0:0:0: [sda] Spinning up disk...
[ 208.091576] ..
[ 242.874325] INFO: task systemd-udevd:613 blocked for more than 120 seconds.
[ 242.874391] Tainted: G OE4.16.0-rc1+ #1
[ 242.874445] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this
message.
[ 242.874507] systemd-udevd D0 613478 0x8104
[ 242.874512] Call Trace:
[ 242.874524] ? __schedule+0x297/0x870
[ 242.874532] ? _cond_resched+0x15/0x40
[ 242.874537] schedule+0x28/0x80
[ 242.874542] async_synchronize_cookie_domain+0x96/0x140
[ 242.874547] ? wait_woken+0x80/0x80
[ 242.874553] do_init_module+0xbc/0x201
[ 242.874557] load_module+0x1989/0x1f10
[ 242.874565] ? SYSC_finit_module+0xe9/0x110
[ 242.874569] SYSC_finit_module+0xe9/0x110
[ 242.874577] do_syscall_64+0x71/0x130
[ 242.874584] entry_SYSCALL_64_after_hwframe+0x21/0x86
[ 242.874588] RIP: 0033:0x7fed93532a49
[ 242.874591] RSP: 002b:7fff9467b108 EFLAGS: 0246 ORIG_RAX:
0139
[ 242.874595] RAX: ffda RBX: 55a3462a9380 RCX: 7fed93532a49
[ 242.874597] RDX: RSI: 7fed9321e1c5 RDI: 000f
[ 242.874600] RBP: 7fed9321e1c5 R08: R09:
[ 242.874602] R10: 000f R11: 0246 R12:
[ 242.874604] R13: 55a3462a7510 R14: 0002 R15: 55a3462a9380
[ 243.290259]
...not responding...
[ 307.290719] sd 6:0:0:0: [sda] Attached SCSI disk
Signed-off-by: Mahesh Rajashekhara
---
drivers/scsi/sd.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index a6201e6..9421d98 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -2121,6 +2121,8 @@ sd_spinup_disk(struct scsi_disk *sdkp)
break; /* standby */
if (sshdr.asc == 4 && sshdr.ascq == 0xc)
break; /* unavailable */
+ if (sshdr.asc == 4 && sshdr.ascq == 0x1b)
+ break; /* sanitize in progress */
/*
* Issue command to spin up drive when not ready
*/
--
2.7.4