Change in vdsm[master]: udev: Race fix- load and trigger dev rule(#891300)
vvolansk at redhat.com
vvolansk at redhat.com
Tue Jan 8 13:08:40 UTC 2013
Hello Lee Yarwood,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/10758
to review the following change.
Change subject: udev: Race fix- load and trigger dev rule(#891300)
......................................................................
udev: Race fix- load and trigger dev rule(#891300)
The rule file is generated, yet not synch-loaded in memory, so a VM with
a with a direct lun fails to start.
This patch inroduces two additional udev functions:
1. udevReloadRules() in supervdsmServer.py .
This should be called before uderTrigger().
2. udevSettle() in supervdsmServer.py .
This should be called after usedTrigger().
is written but not sync loaded in memory.
These functions are now called before and after (in correspondance)
udevTrigger() in appropriateDevice() (hsm.py).
Also added a check in appropriateDevice() to make sure the mapping is
indeed there.
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=891300
Change-Id: If3b2008a3d9df2dcaf54190721c2dd9764338627
Signed-off-by: Lee Yarwood <lyarwood at redhat.com>
Signed-off-by: Vered Volansky <vvolansk at redhat.com>
---
M vdsm/storage/hsm.py
M vdsm/supervdsmServer.py
2 files changed, 24 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/58/10758/1
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 5584315..d7d44eb 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -2924,7 +2924,15 @@
Warning: Internal use only.
"""
supervdsm.getProxy().appropriateDevice(guid, thiefId)
+ supervdsm.getProxy().udevReloadRules(guid)
supervdsm.getProxy().udevTrigger(guid)
+ supervdsm.getProxy().udevSettle(guid)
+ try:
+ devPath = '/dev/mapper/%s' % guid
+ fileUtils.validateQemuReadable(devPath)
+ except OSError:
+ self.log.error("Failed to appropriate device permission")
+ raise
@public
def inappropriateDevices(self, thiefId):
diff --git a/vdsm/supervdsmServer.py b/vdsm/supervdsmServer.py
index 486471c..ad73fa4 100755
--- a/vdsm/supervdsmServer.py
+++ b/vdsm/supervdsmServer.py
@@ -226,6 +226,14 @@
return configNetwork.setSafeNetworkConfig()
@logDecorator
+ def udevReloadRules(self, guid):
+ cmd = [EXT_UDEVADM, 'control', '--reload-rules']
+ rc, out, err = misc.execCmd(cmd, sudo=False)
+ if rc:
+ raise OSError(errno.EINVAL, "Could not reload-rules for device \
+ %s, out %s\nerr %s" % (guid, out, err))
+
+ @logDecorator
def udevTrigger(self, guid):
cmd = [EXT_UDEVADM, 'trigger', '--verbose', '--action', 'change',
'--property-match=DM_NAME=%s' % guid]
@@ -235,6 +243,14 @@
%s, out %s\nerr %s" % (guid, out, err))
@logDecorator
+ def udevSettle(self, guid):
+ cmd = [EXT_UDEVADM, 'settle']
+ rc, out, err = misc.execCmd(cmd, sudo=False)
+ if rc:
+ raise OSError(errno.EINVAL, "Could not settle for device \
+ %s, out %s\nerr %s" % (guid, out, err))
+
+ @logDecorator
def appropriateDevice(self, guid, thiefId):
ruleFile = _UDEV_RULE_FILE_NAME % (guid, thiefId)
rule = 'SYMLINK=="mapper/%s", OWNER="%s", GROUP="%s"\n' % (guid,
--
To view, visit http://gerrit.ovirt.org/10758
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If3b2008a3d9df2dcaf54190721c2dd9764338627
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Vered Volansky <vvolansk at redhat.com>
Gerrit-Reviewer: Lee Yarwood <lyarwood at redhat.com>
More information about the vdsm-patches
mailing list