scsi sysfs design, ch driver
I am trying to map programmatically from an sg device to whatever [if it has a corresponding upper level device]. The code is looking at this directory:
/sys/devices/pseudo_0/adapter0/host1/target1:0:0/1:0:0:0
and is confronted with these choices:
bus iocounterbits power scsi_changer:sch0 timeout delete iodone_cnt queue_depth scsi_device:1:0:0:0 type device_blocked ioerr_cnt queue_type scsi_generic:sg0 vendor driver iorequest_cnt rescan scsi_level generic model rev state
Now if it was a block device (sd or sr) there would be a "block" symlink to follow; if it was a tape device there would be a "tape" symlink to follow. However as can be seen it is a medium changer, so why not a "changer" symlink? The "scsi_changer:sch0" symlink has a useless appendage IMO. The directory needs to be scanned to find it, and when followed, if my code is interested, then there are several ways to determine that its sysfs name is sch0.
So my question is why was "scsi_generic:sg0" form introduced, especially the ":sg0" part? It may help visually but it is a nuisance programmatically.
Doug Gilbert
Quoted 3 lines · Douglas Gilbert
So my question is why was "scsi_generic:sg0" form introduced, especially the ":sg0" part? It may help visually but it is a nuisance programmatically.
It was for the benefit of serial devices (and others) which may have several classes.
# ls /sys/bus/pci/devices/0000\:00\:04.0 bus device local_cpus subsystem_device tty:ttyS1 class driver modalias subsystem_vendor tty:ttyS2 config irq resource tty:ttyS0 vendor
Without the :ttyS*, we'd have three links all called 'tty'.