Article 6G4H3 Modules "uas" or "usb_storage" still in use after USB drive has been unplugged

Modules "uas" or "usb_storage" still in use after USB drive has been unplugged

by
stoorky
from LinuxQuestions.org on (#6G4H3)
TLDR;
(see below, "The whole story", as for the reason this bothers me)
After a fresh start, module uas is used by nothing (0) :
Code:$ lsmod | grep -e ^Module -e ^uas
Module Size Used by
uas 32768 0If then I plug a USB drive, it's used by that drive (1) :
Code:$ lsmod | grep -e ^Module -e ^uas
Module Size Used by
uas 32768 1But after unmounting and unplugging that same USB drive, the uas module is still used by something (still 1), which prevents me of unloading that module, even using --force :
Code:$ lsmod | grep -e ^Module -e ^uas
Module Size Used by
uas 32768 1

$ sudo modprobe --remove --force uas
modprobe: FATAL: Module uas is in use.Why is that ? How can I unload the uas module ?

THE WHOLE STORY
I have a Seagate USB drive. Those USB drives are known for not being able to retrieve SMART data on Linux, due to some compatibility problems with Linux's implementation of the UAS protocol (for more infos, see https://www.smartmontools.org/ticket/971).

The drive works fine though with UAS, it's just the SMART infos that can not be retrieved.
An easy workaround is to disable UAS for that specific drive, and so to fall back to the older USB mass storage protocol. Obviously I don't want to do that on a permanent basis, because UAS is much faster than the previous protocol (see https://en.wikipedia.org/wiki/USB_Attached_SCSI). Given that I only need to check my SMART data once in a while, the solution would be to disable UAS only when I need to retrieve SMART data, which is only once in a while, and to keep using UAS the rest of the time. Doing that should be straightforward :
  • unplug all USB drives
  • unload uas and usb_storage modules
  • load usb_storage with a quirk (ignore that specific Seagate USB drive)
  • plug in that Seagate drive
  • retrieve SMART data
  • unplug the drive
  • unload usb_storage
  • reload usb_storage (without the quirk)
  • plug in the drive again (which will use UAS again), and go on with my life
But, like I mentioned in the first section of this post, once the drive has been plugged in and then unmounted and plugged out, I'm unable to unload the uas module. Note that I checked that --force unload is supported :
Code:$ grep CONFIG_MODULE_FORCE_UNLOAD /boot/config-`uname -r`
CONFIG_MODULE_FORCE_UNLOAD=yThe only workaround I am left with at this point is to reboot my computer, unload the uas module before it has ever been used, and then reload the usb_storage module with the aforementioned quirk. In other words, if I want to check the SMART data of my Seagate drive I need to reboot the computer. It works, but it's cumbersome (and as you can see below, it requires not one but two reboots).
Code:$ sudo modprobe --remove uas
$ lsmod | grep uas
$ lsmod | grep usb_storage

$ sudo modprobe usb-storage quirks=0bc2:ab28:uI then :
  • plug in the drive
  • check SMART data
  • unplug the drive
At this point, to be able to use the drive again with UAS, I try to remove the usb_storage module. But same thing, it refuses to do so, because it's still used by something :
Code:$ sudo modprobe --remove --force usb_storage
modprobe: FATAL: Module usb_storage is in use.

$ lsmod | grep -e ^Module -e ^usb_storage
Module Size Used by
usb_storage 81920 2 uas

$ sudo modprobe --remove uas

$ lsmod | grep -e ^Module -e ^usb_storage
Module Size Used by
usb_storage 81920 1

$ sudo modprobe --remove --force usb_storage
modprobe: FATAL: Module usb_storage is in use.So at this point I need to reboot once more, in order to be able to use my Seagate drive with the UAS module again.

Any idea why those modules (both uas and usb_storage) seem still in use after all USB drives have been unplugged ?

[EDIT]
I am using kernel 5.10, on Debian 11 :
Code:$ cat /etc/debian_version
11.6
$ uname -a
Linux hostname 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux
External Content
Source RSS or Atom Feed
Feed Location https://feeds.feedburner.com/linuxquestions/latest
Feed Title LinuxQuestions.org
Feed Link https://www.linuxquestions.org/questions/
Reply 0 comments