2011/9/30 Amit Sahrawat <amit.sahrawat83@xxxxxxxxx>: > Hi James, > > [root@localhost Tools]# sg_inq --page=0x0 /dev/sdb > Only hex output supported. sg_vpd decodes more pages. > VPD INQUIRY, page code=0x00: > [PQual=0 Peripheral device type: disk] > Supported VPD pages: > 0x1f > [root@localhost Tools]# > > > > [root@localhost Tools]# sg_modes --page=0x3f /dev/sdb > SAMSUNG HM501IX peripheral_type: disk [0x0] > Mode parameter header from MODE SENSE(10): > Mode data length=66, medium type=0x00, WP=0, DpoFua=0, longlba=0 > Block descriptor length=0 >>> Read-Write error recovery, page_control: current > 00 01 0a 00 00 00 00 00 00 00 00 00 00 >>> Flexible geometry (obsolete), page_control: current > 00 05 0a ff ff 10 3f 02 00 3f ff 00 00 >>> Caching, page_control: current > 00 08 12 00 00 00 00 00 00 00 00 00 00 01 00 00 00 > 10 00 00 00 00 >>> page_code: 0x1b, page_control: current > 00 1b 0a 00 01 00 00 00 00 00 00 00 00 >>> Unit Attention condition [vendor specific format], page_control: current > 00 00 00 > [root@localhost Tools]# > > > > [root@localhost Tools]# sginfo -A /dev/sdb > INQUIRY response (cmd: 0x12) > ---------------------------- > Device Type 0 > Vendor: SAMSUNG > Product: HM501IX > Revision level: > > No serial number (bad format for supported VPDs) > > Read-Write Error Recovery mode page (0x1) > ----------------------------------------- > AWRE 0 > ARRE 0 > TB 0 > RC 0 > EER 0 > PER 0 > DTE 0 > DCR 0 > Read Retry Count 0 > Correction Span 0 > Head Offset Count 0 > Data Strobe Offset Count 0 > Write Retry Count 0 > Recovery Time Limit (ms) 0 > > mode page: 0x05 [Flexible Disk] > --------------- > 0x02 0xff > 0x03 0xff > 0x04 0x10 > 0x05 0x3f > 0x06 0x02 > 0x07 0x00 > 0x08 0x3f > 0x09 0xff > 0x0a 0x00 > 0x0b 0x00 > > Caching mode page (0x8) > ----------------------- > Initiator Control 0 > ABPF 0 > CAP 0 > DISC 0 > SIZE 0 > Write Cache Enabled 0 > MF 0 > Read Cache Disabled 0 > Demand Read Retention Priority 0 > Demand Write Retention Priority 0 > Disable Pre-fetch Transfer Length 0 > Minimum Pre-fetch 0 > Maximum Pre-fetch 0 > Maximum Pre-fetch Ceiling 0 > FSW 0 > LBCSS 0 > DRA 0 > NV_DIS 1 > Number of Cache Segments 0 > Cache Segment size 0 > Non-Cache Segment size 0 > > mode page: 0x1b > --------------- > 0x02 0x00 > 0x03 0x01 > 0x04 0x00 > 0x05 0x00 > 0x06 0x00 > 0x07 0x00 > 0x08 0x00 > 0x09 0x00 > 0x0a 0x00 > 0x0b 0x00 > > mode page: 0x00 [Vendor (non-page format)] > --------------- > 0x00 0x00 > 0x01 0x00 > > [root@localhost Tools]# > > Comparision for USB HDD and Normal Hard disk connected to system.(For > USB HDD it showing Write Cache - False, for normal Hard disk - Write > Cache - True) > [root@localhost Tools]# sg_modes --page=0x3f /dev/sdb > SAMSUNG HM501IX peripheral_type: disk [0x0] > Mode parameter header from MODE SENSE(10): > Mode data length=66, medium type=0x00, WP=0, DpoFua=0, longlba=0 > Block descriptor length=0 >>> Read-Write error recovery, page_control: current > 00 01 0a 00 00 00 00 00 00 00 00 00 00 >>> Flexible geometry (obsolete), page_control: current > 00 05 0a ff ff 10 3f 02 00 3f ff 00 00 >>> Caching, page_control: current > 00 08 12 00 00 00 00 00 00 00 00 00 00 01 00 00 00 > 10 00 00 00 00 >>> page_code: 0x1b, page_control: current > 00 1b 0a 00 01 00 00 00 00 00 00 00 00 >>> Unit Attention condition [vendor specific format], page_control: current > 00 00 00 > [root@localhost Tools]# sg_modes --page=0x3f /dev/sda > ATA SAMSUNG HD502HJ 1AJ1 peripheral_type: disk [0x0] > Mode parameter header from MODE SENSE(10): > Mode data length=60, medium type=0x00, WP=0, DpoFua=0, longlba=0 > Block descriptor length=8 >> Direct access device block descriptors: > Density code=0x0 > 00 00 00 00 00 00 00 02 00 > >>> Read-Write error recovery, page_control: current > 00 01 0a 80 00 00 00 00 00 00 00 00 00 >>> Caching, page_control: current > 00 08 12 04 00 00 00 00 00 00 00 00 00 00 00 00 00 > 10 00 00 00 00 >>> Control, page_control: current > 00 0a 0a 02 00 00 00 00 00 ff ff 00 1e > [root@localhost Tools]# > > Now, for the USB HDD which do have write cache - sginfo is showing > them to Write Cache Enabled as false. > Why do the result of hdparm identification and sginfo varies- (I know > they have different interface to work with and hdparm takes care of > that by using SG_IO interface from it's code)? hdparm showed me > correct results - that lead me to digging in the kernel code and > checking the performance for USB HDD with Write cache enabled/disabled > - which also showed that QUEUE ordering chosen for USB HDD is not > correct. > I have a large number of USB HDD's - with different vendors, and for > all of them - it is showing Write Cache Enabled as false. > The code works only for the Pen Drives or the USB HDD which do not > have internal cache. > > Also, for journalling filesystem being used on USB HDD - it does > becomes a cause of concern. Filesystem can not prevent important data(ex, jounal data) by wrtite barrier on this issue. write barrier should be also support on USB HDD(usb driver) like ATA driver. > > Please share your opinion, I guess we need a change for mode sensing > in the kernel code for USB HDD. > > Thanks & Regards, > Amit Sahrawat > > > > On Fri, Sep 30, 2011 at 12:01 AM, James Bottomley > <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote: >> On Thu, 2011-09-29 at 13:27 -0500, James Bottomley wrote: >>> On Thu, 2011-09-29 at 14:49 +0530, Amit Sahrawat wrote: >>> > The patch did not work, although it did get pass the earlier condition >>> > which I mentioned- but still Write Cache is not taken into account – >>> > seems mode sensing in sd_read_cache_type() does not send proper >>> > request to the device – or does not read in proper bytes for this(as >>> > per hdparm command analysis): >>> > >>> > Logs After Connecting: >>> > scsi 0:0:0:0: Direct-Access Seagate Portable 0130 PQ: 0 ANSI: 4 >>> > sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) >>> > sd 0:0:0:0: [sda] Write Protect is off >>> > sd 0:0:0:0: [sda] No Caching mode page present >>> >>> This line means that a request for page 0x0 didn't turn up the caching >>> mode page in the list of supported pages. >>> >>> What does >>> >>> sg_inq --page=0x0 /dev/sda >> >> Um, lets try that again, this time with the correct information. What >> we're looking for is the list of mode pages, so >> >> sg_modes --page=0x3f /dev/sda >> >> Should return it. >> >> Thanks, >> >> James >> >> >> > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ��.n��������+%������w��{.n�����{������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f