Re: Storage device enumeration script
From: Phil Turmel <hidden>
Date: 2011-05-26 18:22:25
Subsystem:
the rest · Maintainer:
Linus Torvalds
On 05/26/2011 02:12 PM, Roman Mamedov wrote: [...]
Now it locks up with 100% CPU load and no output, I waited for a couple of
minutes. On Ctrl-C:
^CTraceback (most recent call last):
File "./lsdrv", line 274, in <module>
probe_block('/sys/block/'+x)
$ ls /sys/block/
etherd!e1.5 etherd!e2.1 md0 md2 sda sdc sde sdg
etherd!e1.6 fd0 md1 md4 sdb sdd sdf
The first two devices are actually down at this moment, maybe that's the
reason? Still I'd expect not 100% CPU load by lsdrv, but 0% CPU and 100%
iowait in this case.Sounds like an infinite loop, or infinite recursion. Could you apply the temporary patch below so I can see how far the probing got?
Output of the old (bash) lsdrv:
Controller device @ pci0000:00/0000:00:06.0 [pata_amd]
IDE interface: nVidia Corporation CK804 IDE (rev f2)
host8: [Empty]
host9: [Empty]
Controller device @ pci0000:00/0000:00:07.0 [sata_nv]
IDE interface: nVidia Corporation CK804 Serial ATA Controller (rev f3)
host6: /dev/sdd ATA Hitachi HDS5C302 {SN: ..............}
host7: /dev/sde ATA WDC WD15EADS-00S {SN: ..............}
Controller device @ pci0000:00/0000:00:08.0 [sata_nv]
IDE interface: nVidia Corporation CK804 Serial ATA Controller (rev f3)
host10: /dev/sdf ATA WDC WD20EADS-00S {SN: ..............}
host11: /dev/sdg ATA WDC WD20EADS-00S {SN: ..............}
Controller device @ pci0000:00/0000:00:0d.0/0000:02:00.0 [ahci]
SATA controller: Marvell Technology Group Ltd. 88SE9123 PCIe SATA 6.0 Gb/s
controller (rev 10) host4: /dev/sdc ATA Hitachi HDS5C302 {SN: ..............}
host5: [Empty]
Controller device @ pci0000:00/0000:00:0e.0/0000:01:00.0 [sata_mv]
SCSI storage controller: Marvell Technology Group Ltd. 88SX7042 PCI-e 4-port
SATA-II (rev 02) host0: [Empty]
host1: [Empty]
host2: /dev/sda ATA ST31000528AS {SN: ..............}
host3: /dev/sdb ATA Hitachi HDS72202 {SN: ..............}The old code never attempted to recurse into the layers of block devices, so it can't have recursion problems. Phil 8<-------------------------
diff --git a/lsdrv b/lsdrv
index d1caaf8..37728c1 100755
--- a/lsdrv
+++ b/lsdrv@@ -145,6 +145,7 @@ def sect2size(sectors): # the struct object w/ filled in details. controllers=dict() def probe_controller(cpathlink): + print "Probing controller %s" % cpathlink cpath = os.path.realpath(cpathlink) if cpath in controllers: return controllers[cpath]
@@ -186,6 +187,7 @@ def probe_controller(cpathlink): # controller. phydevs=dict() def probe_device(devpathlink, nodestr): + print "Probing device %s" % devpathlink devpath = os.path.realpath(devpathlink) if devpath in phydevs: return phydevs[devpath]
@@ -214,6 +216,7 @@ def probe_device(devpathlink, nodestr): blockbyname=dict() blockbynode=dict() def probe_block(blocklink): + print "Probing block %s" % blocklink name=blocklink.rsplit('/', 1)[-1] if name in blockbyname: return