Bug 106841

Summary: ses: do not output error for simple subenclosure (handle Short Enclosure Status diagnostic page)
Product: IO/Storage Reporter: Tom Yan (tom.ty89)
Component: SCSIAssignee: linux-scsi (linux-scsi)
Status: NEW ---    
Severity: normal CC: grawity, jejb, jejb
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 4.4.1 Subsystem:
Regression: No Bisected commit-id:

Description Tom Yan 2015-10-29 04:26:17 UTC
So I have the following error with a WD My Passport:

[tom@localhost ~]$ journalctl -b -p 3 | grep scsi
Oct 29 11:18:31 localhost kernel: scsi 7:0:0:1: Failed to get diagnostic page 0x8000002
Oct 29 11:18:31 localhost kernel: scsi 7:0:0:1: Failed to bind enclosure -19

Some info of the drive:
[tom@localhost ~]$ sudo sg_ses /dev/sg4
  WD        SES Device        1065
Supported diagnostic pages:
  Supported Diagnostic Pages [sdp] [0x0]
  Short Enclosure Status (SES) [ses] [0x8]
  <unknown> [0x80]
  <unknown> [0x83]
  <unknown> [0x84]
  <unknown> [0x85]
[tom@localhost ~]$ sudo sg_senddiag -P 8 /dev/sg4
Short enclosure status (SES) diagnostic page [0x8] response in hex:
 00     08 00 00 00

According to SES-3 (ses3r10.pdf) Table 10, if diagnostic page 08h is supported, all others pages from 01h to 0fh are prohibited.

However, the kernel (driver/scsi/ses.c) doesn't seem to be aware of this.

FWIW, my drive have a correct SES page (byte 0 should the page code 08h, byte 2-3 should be 0000h, byte 1 is vendor-specific status).
Comment 1 Tom Yan 2015-10-29 04:27:40 UTC
Oops I missed the lsscsi output:
[tom@localhost ~]$ sudo lsscsi -g | grep WD
[7:0:0:0]    disk    WD       My Passport 083A 1065  /dev/sdc   /dev/sg3 
[7:0:0:1]    enclosu WD       SES Device       1065  -          /dev/sg4
Comment 2 Tom Yan 2016-02-27 01:21:39 UTC
This commit did NOT fix anything: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/scsi/ses.c?id=3417c1b5cb1fdc10261dbed42b05cc93166a78fd

Only the error changes from:

scsi 7:0:0:1: Failed to get diagnostic page 0x8000002
scsi 7:0:0:1: Failed to bind enclosure -19

to

scsi 7:0:0:1: Wrong diagnostic page; asked for 1 got 0
scsi 7:0:0:1: Failed to get diagnostic page 0xffffffea
scsi 7:0:0:1: Failed to bind enclosure -19

The ses driver should simply check whether there is an Short Enclosure Status page (i.e. it is a simple subenclosure) FIRST. If that's the case, the device should simply be skipped/bound WITHOUT error.