Skip to contentSkip to conversation

Query: SCSI Device node creation when UFS is loaded as a module

DISCUSSION [email protected] 3 participants 4 messages Oct 23, 2019 – Oct 24, 2019 SCSI

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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/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 ...

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 into sd.c but 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

#2 lore raw
In reply to [email protected]
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.c but 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
#3 lore raw
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/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.

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.c but 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