Thread (41 messages) 41 messages, 10 authors, 2011-06-01

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help