Re: dmesg flooded with "Very big device. Trying to use READ CAPACITY(16)"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I did some more test
This log is specific from the function sd_read_capacitysd_revalidate_disk
>From what I can see, it seems that it is called only when probing
newly attached devices
A quick look in the code I see that it is called by  sd_revalidate_disk
This function is registered by fops for the scsi device or called
directly by sd_probe (via sd_probe_async)
So, assuming that there is no disconnection ad USB level (and it is
not since I don't get any log of it), the question is: how can trigger
a probe or call the sd_revalidate_disk?
Can it be the filesystem?
Bye

2018-03-08 11:10 GMT+01:00 Menion <menion@xxxxxxxxx>:
> Anyhow, I checked something that I should have checked since the beginning.
> I have stopped smartd and I still get this log, so it is something
> else doing it, but does anyone have an idea how understand what
> subsystem is calling again and again the read_capacity_10?
>
> 2018-03-08 10:16 GMT+01:00 Menion <menion@xxxxxxxxx>:
>> Hi
>> I have tried it, but it does not work:
>>
>> [   39.230095] sd 0:0:0:0: [sda] Very big device. Trying to use READ
>> CAPACITY(16).
>> [   39.338032] sd 0:0:0:1: [sdb] Very big device. Trying to use READ
>> CAPACITY(16).
>> [   39.618268] sd 0:0:0:2: [sdc] Very big device. Trying to use READ
>> CAPACITY(16).
>> [   39.762801] sd 0:0:0:3: [sdd] Very big device. Trying to use READ
>> CAPACITY(16).
>> [   39.901059] sd 0:0:0:4: [sde] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  348.134002] sd 0:0:0:0: [sda] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  348.231327] sd 0:0:0:1: [sdb] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  348.353151] sd 0:0:0:2: [sdc] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  348.549558] sd 0:0:0:3: [sdd] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  348.722858] sd 0:0:0:4: [sde] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  657.963478] sd 0:0:0:0: [sda] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  658.090253] sd 0:0:0:1: [sdb] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  658.291130] sd 0:0:0:2: [sdc] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  658.524039] sd 0:0:0:3: [sdd] Very big device. Trying to use READ
>> CAPACITY(16).
>> [  658.840440] sd 0:0:0:4: [sde] Very big device. Trying to use READ
>> CAPACITY(16).
>>
>> smartd details (before I had the ver 6.5 of 2016)
>>
>> menion@Menionubuntu:/lib/firmware/brcm$ smartd --version
>> smartd 6.7 (build date Mar  8 2018)
>> [x86_64-linux-4.15.5-041505-generic] (local build)
>> Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
>>
>> smartd comes with ABSOLUTELY NO WARRANTY. This is free
>> software, and you are welcome to redistribute it under
>> the terms of the GNU General Public License; either
>> version 2, or (at your option) any later version.
>> See http://www.gnu.org for further details.
>>
>> smartmontools release 6.7 dated 2017-11-05 at 15:20:58 UTC
>> smartmontools SVN rev is unknown
>> smartmontools build host: x86_64-pc-linux-gnu
>> smartmontools build with: C++98, GCC 5.4.0 20160609
>> smartmontools configure arguments: '--prefix=/usr'
>> '--build=x86_64-linux-gnu' '--host=x86_64-linux-gnu'
>> '--sysconfdir=/etc' '--mandir=/usr/share/man'
>> '--with-initscriptdir=no' '--docdir=/usr/share/doc/smartmontools'
>> '--with-savestates=/var/lib/smartmontools/smartd.'
>> '--with-attributelog=/var/lib/smartmontools/attrlog.'
>> '--with-exampledir=/usr/share/doc/smartmontools/examples/'
>> '--with-drivedbdir=/var/lib/smartmontools/drivedb'
>> '--with-systemdsystemunitdir=/lib/systemd/system'
>> '--with-smartdscriptdir=/usr/share/smartmontools'
>> '--with-smartdplugindir=/etc/smartmontools/smartd_warning.d'
>> '--with-systemdenvfile=/etc/default/smartmontools' '--with-selinux'
>> 'build_alias=x86_64-linux-gnu' 'host_alias=x86_64-linux-gnu'
>> 'CXXFLAGS=-g -O2 -fPIC -fstack-protector-strong -Wformat
>> -Werror=format-security -fsigned-char -Wall -O2'
>> 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIC -Wl,-z,relro -Wl,-z,now'
>> 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CFLAGS=-g -O2 -fPIC
>> -fstack-protector-strong -Wformat -Werror=format-security
>> -fsigned-char -Wall -O2'
>>
>> to make sure that I picked and compiled the correct code I have
>> checked the new set_rcap16_first method and it is here:
>>
>> menion@Menionubuntu:~/smartmontools$ cat scsicmds.cpp |grep set_rcap
>>                 device->set_rcap16_first();
>> menion@Menionubuntu:~/smartmontools$
>>
>> I have dome doubts about your code:
>>
>> if (avoid_rcap16) {
>>     res = scsiReadCapacity10(device, &last_lba, &lb_size);
>>     if (res) {
>>         if (scsi_debugmode)
>>             pout("%s: READ CAPACITY(10) failed, res=%d\n", __func__, res);
>>         try_16 = true;
>>     } else { /* rcap10 succeeded */
>>         if (0xffffffff == last_lba) {
>>             /* so number of blocks needs > 32 bits to represent */
>>             try_16 = true;
>>             device->set_rcap16_first();
>>         } else {
>>             ret_val = last_lba + 1;
>>             if (srrp) {
>>                 memset(srrp, 0, sizeof(*srrp));
>>                 srrp->num_lblocks = ret_val;
>>                 srrp->lb_size = lb_size;
>>             }
>>         }
>>     }
>> }
>>
>> from the scsi kernel code I see that also read_capacity_10 return
>> capacity in 64bit variable
>>
>> sector_size = read_capacity_10(sdkp, sdp, buffer);
>> if (sector_size == -EOVERFLOW)
>>   goto got_data;
>> if (sector_size < 0)
>>   return;
>> if ((sizeof(sdkp->capacity) > 4) &&
>>    (sdkp->capacity > 0xffffffffULL)) {
>>
>> so is this if statement correct?
>>
>>     } else { /* rcap10 succeeded */
>>         if (0xffffffff == last_lba) {
>>
>> I means, the last_lba is read from the responde of read_capacity_10 in
>> scsiReadCapacity10 via this conversion:
>>
>>     if (last_lbap)
>>         *last_lbap = get_unaligned_be32(resp + 0);
>>
>> so are you sure that if the device return more than about 4TB the
>> value of this variable will be 0xFFFFFFFFUL?
>> Yes, I can make some test myself but today I have so little time to
>> experiment, so I have reported it to you I am sure that you will sort
>> out quickly if this is the problem or not
>> Bye
>>
>>
>> 2018-03-07 18:14 GMT+01:00 Douglas Gilbert <dgilbert@xxxxxxxxxxxx>:
>>> On 2018-03-07 09:02 AM, Menion wrote:
>>>>
>>>> 2018-03-07 14:51 GMT+01:00 Steffen Maier <maier@xxxxxxxxxxxxxxxxxx>:
>>>>>
>>>>>
>>>>> On 03/07/2018 09:24 AM, Menion wrote:
>>>>>>
>>>>>>
>>>>> ...
>>>>>
>>>>> but from then on, you only get it roughly once every 300 seconds, i.e. 5
>>>>> minutes
>>>>>
>>>>> that's where I suspect user space as trigger, unless there is a kernel
>>>>> feature I'm not aware of doing such sdev rescans
>>>>>
>>>>> preventing this would be a workaround
>>>>>
>>>>
>>>> Is it possible that it is smartd? It is the only daemon that could do
>>>> some low level access to the device (bypassing the filesystem)
>>>
>>>
>>> If you wait about 5 hours from the time of this post then go to the
>>> smartmontools mirror at:
>>>   https://github.com/mirror/smartmontools
>>>
>>> To check it is the revision (svn rev >= 4718) you need for this fix, look
>>> at the top of the ChangeLog file and look for today's date (20180307).
>>> Assuming it is there, clone it then try to build smartmontools
>>> ( './autogen.sh ; ./configure ; make install') and try the new smartd ***.
>>> You should get one warning per 8 TB device (for each run of smartd) and no
>>> more.
>>>
>>> Currently smartmontools only has a quirks database (and it is large)
>>> for ATA devices, not real or pseudo SCSI device, nor NVMe devices (yet).
>>> Hopefully this fix will be sufficient.
>>>
>>> If it does not work, please send me the details.
>>>
>>> Doug Gilbert
>>>
>>>
>>> *** without a --prefix=/usr/sbin or similar option to .configure I think
>>>     that smartd will be placed in /usr/local/sbin which may be different
>>>     from where your distro places it. Your PATH will determine which one
>>>     is used.
>>>
>>>>
>>>>>
>>>>>>                  /*
>>>>>>                   * Many devices do not respond properly to
>>>>>> READ_CAPACITY_16.
>>>>>>                   * Tell the SCSI layer to try READ_CAPACITY_10 first.
>>>>>>                   * However some USB 3.0 drive enclosures return
>>>>>> capacity
>>>>>>                   * modulo 2TB. Those must use READ_CAPACITY_16
>>>>>>                   */
>>>>>>                  if (!(us->fflags & US_FL_NEEDS_CAP16))
>>>>>>                          sdev->try_rc_10_first = 1;
>>>>>
>>>>>
>>>>>
>>>>> if that's the cause, maybe an entry in drivers/usb/storage/unusual_devs.h
>>>>> would help, but that's really just guessing as I'm not familiar with USB
>>>>>
>>>>
>>>> It seems that the bridge does have an entry in unusual_devs.h:
>>>>
>>>> /* Reported by Michael Büsch <m@xxxxxxx> */
>>>> UNUSUAL_DEV( 0x152d, 0x0567, 0x0114, 0x0116,
>>>> "JMicron",
>>>> "USB to ATA/ATAPI Bridge",
>>>> USB_SC_DEVICE, USB_PR_DEVICE, NULL,
>>>> US_FL_BROKEN_FUA ),
>>>>
>>>> VID:PID is 0x152d 0x0567, not sure what are the other two numbers, so
>>>> I went back and used another enclosure with same USB to SATA bridge.
>>>> The strange thing is that this other enclosure goes in UAS mode while
>>>> the one for which I am reporting the issue goes in usb-storage mode
>>>> because it gets somehow the quirks 0x50000000
>>>> Unfortunately I cannot move these 5 HDDs in the other enclosure. So do
>>>> you think that it shall be reported to linux-usb maybe?
>>>>
>>>




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux