Udev persistent persistent storage rules for /dev/sr* hangs udev

I’ve been experiencing issues on my manjaro desktop and my unraid server where udev will hang and kill /dev/sr0.

[  324.178091] usb 4-1: reset SuperSpeed USB device number 2 using xhci_hcd
[  324.190405] sr 0:0:0:0: [sr0] tag#0 UNKNOWN(0x2003) Result: hostbyte=0x03 driverbyte=DRIVER_OK cmd_age=30s
[  324.190410] sr 0:0:0:0: [sr0] tag#0 CDB: opcode=0x28 28 00 00 00 04 00 00 00 02 00
[  324.190412] blk_update_request: I/O error, dev sr0, sector 4096 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[  354.383938] usb 4-1: reset SuperSpeed USB device number 2 using xhci_hcd
[  473.812944] udevd[1688]: worker [27853] /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb4/4-1/4-1:1.0/host0/target0:0:0/0:0:0:0/block/sr0 timeout; kill it
[  473.812954] udevd[1688]: seq 11256 '/devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb4/4-1/4-1:1.0/host0/target0:0:0/0:0:0:0/block/sr0' killed

While researching the issue I found someone else experiencing this in other distros too. In the persistent storage udev rules on how optical drives are handled, I’ve tweaked the udev rules as recommended in the makemkv forum viewtopic.php?t=25357 (I’m not allowed to post links evidently)

My desktop is back to working as it should and no longer freeze/hangs on the external Bluray drives when inserting random discs. This has also fixed my unraid server, so its a common problem shared across distros.

TLDR:

sr* lines in /lib/udev/rules.d/60-persistent-storage.rules

# probe filesystem metadata of optical drives which have a media inserted
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
  IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}"
# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
  IMPORT{builtin}="blkid --noraid"

becomes

# probe filesystem metadata of optical drives which have a media inserted
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
  GOTO="persistent_storage_end"
# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
  GOTO="persistent_storage_end"

My desktop and server are now able to view/play/rip blurays and dvds again. Evidently the IMPORT lines can cause hanging when certain video discs are placed in the drive. This explains why udevd hangs and begins killing /dev/sr0 when certain discs are inserted.

Then please report that upstream to the systemd team. Thanks.

However… /lib/udev/rules.d/ will be overwritten if systemd gets an update. Better would be copy it /etc/udev/rules.d/ and modify it there.

sudo cp /lib/udev/rules.d/60-persistent-storage.rules /etc/udev/rules.d/
2 Likes

reported upstream and pull request made: