Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
lio-utils
lio-utils-retry-enabling-fileio-target.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File lio-utils-retry-enabling-fileio-target.patch of Package lio-utils
From: Lee Duncan Date: Thu Nov 19 14:15:22 PST 2015 Subject: retrying enabling FILEIO target Reference: bsc#940636 When trying to enable a newly create target in sysfs, if we are too fast, the target might not yet be fully set, since the time between creating the target (with a mkdir in sysfs) and the time when the target is fully set up is indetermanent. This patch enables 3 retries, at one second each, when trying to enable a target. --- tcm-py/tcm_fileio.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) --- a/tcm-py/tcm_fileio.py +++ b/tcm-py/tcm_fileio.py @@ -3,10 +3,37 @@ import os import subprocess as sub import string, re +import time from optparse import OptionParser tcm_root = "/sys/kernel/config/target/core" +def write_with_retries(attr_value, attr_path, newline=True, retries=5): + """ + Write an attribute value to an attribute path, followed by an + optional newline, with retries if needed. Return boolean + success or failure. + """ + success = False + while 1: + try: + with open(attr_path, 'w') as attr_file: + if newline: + print >>attr_file, attr_value + else: + print >>attr_file, attr_value, + success=True + break + except Exception, e: +# print "DEBUG: write failed", e + retries = retries - 1 + if not retries: + break + time.sleep(1) +# print "DEBUG: write '%s' to '%s': success=%s, retries left=%d" % \ +# (attr_value, attr_path, success, retries) + return success + def createvirtdev(path, params): # print "Calling fileio createvirtdev: path " + path @@ -40,13 +67,12 @@ def createvirtdev(path, params): print "FILEIO: createvirtdev failed for control_opt with " + params[0] return -1 - enable_opt = "echo 1 > " + cfs_path + "enable" -# print "Calling enable_opt " + enable_opt - ret = os.system(enable_opt) - if ret: + if not write_with_retries("1", cfs_path + "enable"): print "FILEIO: createvirtdev failed for enable_opt with " + params[0] return -1 + return 0 + def fd_freevirtdev(): pass
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor