New patch submitted by Saggi Mizrahi (smizrahi(a)redhat.com)
You can review this change at:
http://gerrit.usersys.redhat.com/757
commit 1bf869ed7ab05bfe53ae6155b88962070d8d8a72
Author: Saggi Mizrahi <smizrahi(a)redhat.com>
Date: Thu Jul 28 13:47:14 2011 +0300
Get dmId from device number instead of looking for it
Change-Id: I2fa0444e370eb65c7251e4b1afaecff93e0cf937
diff --git a/vdsm/storage/devicemapper.py b/vdsm/storage/devicemapper.py
index bf155bc..20b1a2b 100644
--- a/vdsm/storage/devicemapper.py
+++ b/vdsm/storage/devicemapper.py
@@ -18,13 +18,14 @@ def getDmId(deviceMultipathName):
# Link doesn't exists for some reason, might be a weird
# udev configuration. Falling back to slow but sure method
- for nameFile in glob("/sys/block/dm-*/dm/name"):
- try:
- with open(nameFile, "r") as f:
- if f.read().rstrip("\n") == deviceMultipathName:
- return nameFile.split("/")[3]
- except (IOError, OSError):
- pass
+ devStat = os.stat(devlinkPath)
+ dmId = "dm-%d" % os.minor(devStat.st_rdev)
+ try:
+ with open("/sys/block/%s/dm/name" % dmId, "r") as f:
+ if f.read() == deviceMultipathName:
+ return dmId
+ except (IOError, OSError):
+ pass
raise OSError(errno.ENOENT, "Could not find dm device named `%s`" %
deviceMultipathName)