Query: SCSI Device node creation when UFS is loaded as a module
Hi
I'm loading the ufs-qcom driver as a module but am not seeing the /dev/sda* device nodes. Looks like it's not being created.
I find the sda nodes in other paths being enumerated though:
/ # find /sys -name sda/sys/kernel/debug/block/sda/sys/class/block/sda /sys/devices/platform/<...>/<xxx>.ufshc/host0/target0:0:0/0:0:0:0/block/sda /sys/block/sda
All Luns are detected and I see sda is detected and prints for all the Luns as below -:
sd 0:0:0:0: [sda] .... ....-byte logical blocks:
... so on ...
But if I link it statically instead of a module, it works fine. All device nodes are created.
I'm trying to figure out where/how in SCSI does it create these device nodes - /dev/sd<a/b/c/d> ? I've looked into sd.c but I couldn't figure out the exact place yet.
Any pointers please?
TIA
-asd
Quoted 20 lines
Hi
I'm loading the ufs-qcom driver as a module but am not seeing the/dev/sda*device nodes.
Looks like it's not being created.I find the sda nodes in other paths being enumerated though:
/ # find /sys -name sda
/sys/kernel/debug/block/sda/sys/class/block/sda/sys/devices/platform/<...>/<xxx>.ufshc/host0/target0:0:0/0:0:0:0/block/sda/sys/block/sdaAll Luns are detected and I see sda is detected and prints for all the Luns as below -:
sd 0:0:0:0: [sda] .... ....-byte logical blocks:... so on ...
Quoted 8 lines
But if I link it statically instead of a module, it works fine. All device nodes are created.
I'm trying to figure out where/how in SCSI does it create these device nodes - /dev/sd<a/b/c/d> ?
I've looked intosd.cbut I couldn't figure out the exact place yet.Any pointers please?
I guess it's most probably in scsi_sysfs_add_devices, part of the async scan:
ufshcd_async_scan-> ufshcd_probe_hba-> scsi_scan_host->__scsi_scan_target-> scsi_probe_and_add_lun...
Thanks,
Avri
Quoted 12 lines · On 10/24/19 1:51 AM, [email protected] wrote:
Hi
I'm loading the ufs-qcom driver as a module but am not seeing the/dev/sda*device nodes. Looks like it's not being created.I find the sda nodes in other paths being enumerated though:
/ # find /sys -name sda
/sys/kernel/debug/block/sda/sys/class/block/sda/sys/devices/platform/<...>/<xxx>.ufshc/host0/target0:0:0/0:0:0:0/block/sda/sys/block/sda
Quoted 8 lines
All Luns are detected and I see sda is detected and prints for all the Luns as below -:
sd 0:0:0:0: [sda] .... ....-byte logical blocks:... so on ...
But if I link it statically instead of a module, it works fine. All device nodes are created.
I'm trying to figure out where/how in SCSI does it create these device nodes - /dev/sd<a/b/c/d> ?
That's from (systemd-)udevd user space based on uevents from the kernel.
Quoted 1 line
I've looked into
sd.cbut I couldn't figure out the exact place yet.
Yeah, based on the SCSI device probe and add lun, the high level driver sd would emit udev events for block devices.
Signature · 11 lines
Mit freundlichen Gruessen / Kind regards Steffen Maier Linux on IBM Z Development https://www.ibm.com/privacy/us/en/ IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Matthias Hartmann Geschaeftsfuehrung: Dirk Wittkopp Sitz der Gesellschaft: Boeblingen Registergericht: Amtsgericht Stuttgart, HRB 243294
Quoted 20 lines · Steffen Maier
Quoted 19 lines · On 10/24/19 1:51 AM, [email protected] wrote:
Hi
I'm loading the ufs-qcom driver as a module but am not seeing the/dev/sda*device nodes. Looks like it's not being created.I find the sda nodes in other paths being enumerated though:
/ # find /sys -name sda
/sys/kernel/debug/block/sda/sys/class/block/sda/sys/devices/platform/<...>/<xxx>.ufshc/host0/target0:0:0/0:0:0:0/block/sda/sys/block/sdaAll Luns are detected and I see sda is detected and prints for all the Luns as below -:
sd 0:0:0:0: [sda] .... ....-byte logical blocks:... so on ...
But if I link it statically instead of a module, it works fine. All device nodes are created.
Quoted 8 lines
Quoted 1 line
I'm trying to figure out where/how in SCSI does it create these device nodes - /dev/sd<a/b/c/d> ?
That's from (systemd-)udevd user space based on uevents from the kernel.
Quoted 1 line
I've looked into
sd.cbut I couldn't figure out the exact place yet.Yeah, based on the SCSI device probe and add lun, the high level driver sd would emit udev events for block devices.
Thanks Steffen and Avri.
I understood that sd.c creates the devices based on scsi_device and establishes a relation between scsi_device (sdp) and scsi_disk (sdkp). But I couldn't figure out why it creates the device fine when the ufs-qcom is linked statically, but is unable to create the devices when inserted as a module.
Does it follow a different method to create the device nodes when statically linked and needs (systemd-)udevd to handle the events during dynamic insertion?
Thanks
asd