Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-rtslib-fb for 
openSUSE:Factory checked in at 2022-05-08 21:52:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-rtslib-fb (Old)
 and      /work/SRC/openSUSE:Factory/.python-rtslib-fb.new.1538 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-rtslib-fb"

Sun May  8 21:52:04 2022 rev:30 rq:975466 version:2.1.75

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-rtslib-fb/python-rtslib-fb.changes        
2022-02-09 20:38:26.270266581 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-rtslib-fb.new.1538/python-rtslib-fb.changes  
    2022-05-08 21:52:05.459443384 +0200
@@ -1,0 +2,16 @@
+Fri May 06 16:54:21 UTC 2022 - ldun...@suse.com
+
+- Update to version v2.1.75:
+  * version 2.1.75
+  * rtslib: fix missing ':' after else statement
+  * dbroot: let the user change the dbroot directory freely.
+  * handle target kernel module new attribute cpus_allowed_list
+  * fix "This _Backstore already exists in configFS" exception
+  * Check whether the enable attribute exists before fread
+  * Filter fabric wwns by reading driver name
+  * Add support of efct fabric driver
+  * tcmu: add support for config param data_pages_per_blk
+  * Relax restrictions on TPG Tag range
+  * rtslib: Use O_RDWR for sg devices alone.
+
+-------------------------------------------------------------------

Old:
----
  python-rtslib-fb-v2.1.74.tar.xz

New:
----
  python-rtslib-fb-v2.1.75.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-rtslib-fb.spec ++++++
--- /var/tmp/diff_new_pack.4V5dBp/_old  2022-05-08 21:52:06.087444174 +0200
+++ /var/tmp/diff_new_pack.4V5dBp/_new  2022-05-08 21:52:06.095444184 +0200
@@ -25,7 +25,7 @@
 %define dbdir %{_sysconfdir}/target
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-rtslib-fb
-Version:        2.1.74
+Version:        2.1.75
 Release:        0%{?dist}
 Summary:        API for Linux kernel SCSI target (aka LIO)
 License:        Apache-2.0
@@ -50,7 +50,7 @@
 BuildRequires:  alts
 %else
 Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
 %endif
 Provides:       python-rtslib = %{version}-%{release}
 Obsoletes:      python-rtslib < %{version}

++++++ _service ++++++
--- /var/tmp/diff_new_pack.4V5dBp/_old  2022-05-08 21:52:06.143444245 +0200
+++ /var/tmp/diff_new_pack.4V5dBp/_new  2022-05-08 21:52:06.147444249 +0200
@@ -7,7 +7,7 @@
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(\d*\.\d*\.)fb(\d*)</param>
     <param name="versionrewrite-replacement">\1\2</param>
-    <param name="revision">v2.1.74</param>
+    <param name="revision">v2.1.75</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.4V5dBp/_old  2022-05-08 21:52:06.167444275 +0200
+++ /var/tmp/diff_new_pack.4V5dBp/_new  2022-05-08 21:52:06.171444280 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
             <param 
name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
-          <param 
name="changesrevision">33b174f313ba4f8aec2e2a159ff337ae7ca42cb8</param></service></servicedata>
+          <param 
name="changesrevision">5469e71cfc47a5a869dae6bc7c1e0b2db7ae4c6a</param></service></servicedata>
 (No newline at EOF)
 

++++++ python-rtslib-fb-v2.1.74.tar.xz -> python-rtslib-fb-v2.1.75.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rtslib-fb-v2.1.74/rtslib/__init__.py 
new/python-rtslib-fb-v2.1.75/rtslib/__init__.py
--- old/python-rtslib-fb-v2.1.74/rtslib/__init__.py     2020-08-24 
10:05:02.000000000 +0200
+++ new/python-rtslib-fb-v2.1.75/rtslib/__init__.py     2022-05-02 
14:16:07.000000000 +0200
@@ -36,7 +36,7 @@
 
 from .alua import ALUATargetPortGroup
 
-__version__ = '2.1.74'
+__version__ = '2.1.75'
 __author__ = "Jerome Martin <j...@risingtidesystems.com>"
 __url__ = 'http://github.com/open-iscsi/rtslib-fb'
 __description__ = 'API for Linux kernel SCSI target (aka LIO)'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rtslib-fb-v2.1.74/rtslib/fabric.py 
new/python-rtslib-fb-v2.1.75/rtslib/fabric.py
--- old/python-rtslib-fb-v2.1.74/rtslib/fabric.py       2020-08-24 
10:05:02.000000000 +0200
+++ new/python-rtslib-fb-v2.1.75/rtslib/fabric.py       2022-05-02 
14:16:07.000000000 +0200
@@ -118,9 +118,15 @@
 from .target import Target
 from .utils import _get_auth_attr, _set_auth_attr
 
-version_attributes = set(["lio_version", "version"])
-discovery_auth_attributes = set(["discovery_auth"])
-target_names_excludes = version_attributes | discovery_auth_attributes
+excludes_list = [
+    # version_attributes
+    "lio_version", "version",
+    # discovery_auth_attributes
+    "discovery_auth",
+    # cpus_allowed_list_attributes
+    "cpus_allowed_list",
+]
+target_names_excludes = set(excludes_list)
 
 
 class _BaseFabricModule(CFSNode):
@@ -144,7 +150,8 @@
         self.name = name
         self.spec_file = "N/A"
         self._path = "%s/%s" % (self.configfs_dir, self.name)
-        self.features = ('discovery_auth', 'acls', 'auth', 'nps', 'tpgts')
+        self.features = ('discovery_auth', 'acls', 'auth', 'nps', 'tpgts',
+            'cpus_allowed_list')
         self.wwn_types = ('free',)
         self.kernel_module = "%s_target_mod" % self.name
 
@@ -220,6 +227,18 @@
             raise RTSLibError("Fabric module %s does not implement "
                               + "the %s feature" % (self.name, feature))
 
+    def _get_cpus_allowed_list(self):
+        self._check_self()
+        self._assert_feature('cpus_allowed_list')
+        path = "%s/cpus_allowed_list" % self.path
+        return fread(path)
+
+    def _set_cpus_allowed_list(self, allowed):
+        self._check_self()
+        self._assert_feature('cpus_allowed_list')
+        path = "%s/cpus_allowed_list" % self.path
+        fwrite(path, allowed)
+
     def clear_discovery_auth_settings(self):
         self._check_self()
         self._assert_feature('discovery_auth')
@@ -267,6 +286,11 @@
         self._assert_feature('discovery_auth')
         _set_auth_attr(self, *args, **kwargs)
 
+    cpus_allowed_list = \
+            property(_get_cpus_allowed_list,
+                     _set_cpus_allowed_list,
+                     doc="Set or get the cpus_allowed_list attribute.")
+
     discovery_enable_auth = \
             property(_get_discovery_enable_auth,
                      _set_discovery_enable_auth,
@@ -375,7 +399,35 @@
     def wwns(self):
         for wwn_file in glob("/sys/class/fc_host/host*/port_name"):
             with ignored(IOError):
-                if not 
fread(os.path.dirname(wwn_file)+"/symbolic_name").startswith("fcoe"):
+                host = os.path.realpath(os.path.dirname(wwn_file))
+                device = host.rsplit('/', 3)[0]
+                driver = os.path.basename(os.path.realpath(device+"/driver"))
+                if driver == "qla2xxx":
+                    yield "naa." + fread(wwn_file)[2:]
+
+
+class EfctFabricModule(_BaseFabricModule):
+    def __init__(self):
+        super(EfctFabricModule, self).__init__('efct')
+        self.features = ("acls",)
+        self.wwn_types = ('naa',)
+        self.kernel_module = "efct"
+
+    def to_fabric_wwn(self, wwn):
+        # strip 'naa.' and add colons
+        return colonize(wwn[4:])
+
+    def from_fabric_wwn(self, wwn):
+        return "naa." + wwn.replace(":", "")
+
+    @property
+    def wwns(self):
+        for wwn_file in glob("/sys/class/fc_host/host*/port_name"):
+            with ignored(IOError):
+                host = os.path.realpath(os.path.dirname(wwn_file))
+                device = host.rsplit('/', 3)[0]
+                driver = os.path.basename(os.path.realpath(device+"/driver"))
+                if driver == "efct":
                     yield "naa." + fread(wwn_file)[2:]
 
 
@@ -419,7 +471,10 @@
     def wwns(self):
         for wwn_file in glob("/sys/class/fc_host/host*/port_name"):
             with ignored(IOError):
-                if 
fread(os.path.dirname(wwn_file)+"/symbolic_name").startswith("fcoe"):
+                host = os.path.realpath(os.path.dirname(wwn_file))
+                device = host.rsplit('/', 3)[0]
+                subsystem = 
os.path.basename(os.path.realpath(device+"/subsystem"))
+                if subsystem == "fcoe":
                     yield "naa." + fread(wwn_file)[2:]
 
 
@@ -465,6 +520,7 @@
     "iscsi": ISCSIFabricModule,
     "loopback": LoopbackFabricModule,
     "qla2xxx": Qla2xxxFabricModule,
+    "efct": EfctFabricModule,
     "sbp": SBPFabricModule,
     "tcm_fc": FCoEFabricModule,
 #    "usb_gadget": USBGadgetFabricModule, # very rare, don't show
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rtslib-fb-v2.1.74/rtslib/root.py 
new/python-rtslib-fb-v2.1.75/rtslib/root.py
--- old/python-rtslib-fb-v2.1.74/rtslib/root.py 2020-08-24 10:05:02.000000000 
+0200
+++ new/python-rtslib-fb-v2.1.75/rtslib/root.py 2022-05-02 14:16:07.000000000 
+0200
@@ -167,20 +167,20 @@
             return
         self._dbroot = fread(dbroot_path)
         if self._dbroot != self._preferred_dbroot:
-            if len(FabricModule.list_registered_drivers()) != 0:
-                # Writing to dbroot_path after drivers have been registered 
will make the kernel emit this error:
-                # db_root: cannot be changed: target drivers registered
-                from warnings import warn
-                warn("Cannot set dbroot to {}. Target drivers have already 
been registered."
-                     .format(self._preferred_dbroot))
-                return
-
             try:
                 fwrite(dbroot_path, self._preferred_dbroot+"\n")
             except:
                 if not os.path.isdir(self._preferred_dbroot):
                     raise RTSLibError("Cannot set dbroot to {}. Please check 
if this directory exists."
                                       .format(self._preferred_dbroot))
+                else:
+                    # Writing to dbroot_path after devices have been 
registered will make the kernel emit this error:
+                    # db_root: cannot be changed: target devices registered
+                    from warnings import warn
+                    warn("Cannot set dbroot to {}. Target devices have already 
been registered."
+                         .format(self._preferred_dbroot))
+                    return
+
             self._dbroot = fread(dbroot_path)
 
     def _get_dbroot(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rtslib-fb-v2.1.74/rtslib/target.py 
new/python-rtslib-fb-v2.1.75/rtslib/target.py
--- old/python-rtslib-fb-v2.1.74/rtslib/target.py       2020-08-24 
10:05:02.000000000 +0200
+++ new/python-rtslib-fb-v2.1.75/rtslib/target.py       2022-05-02 
14:16:07.000000000 +0200
@@ -159,7 +159,7 @@
         @param parent_target: The parent Target object of the TPG.
         @type parent_target: Target
         @param tag: The TPG Tag (TPGT).
-        @type tag: int > 0
+        @type tag: positive int
         @param mode:An optionnal string containing the object creation mode:
             - I{'any'} means the configFS object will be either looked up or
               created.
@@ -181,8 +181,8 @@
                 raise RTSLibError("Cannot find an available TPG Tag")
         else:
             tag = int(tag)
-            if not tag > 0:
-                raise RTSLibError("The TPG Tag must be >0")
+            if tag < 0:
+                raise RTSLibError("The TPG Tag must be >=0")
         self._tag = tag
 
         if isinstance(parent_target, Target):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rtslib-fb-v2.1.74/rtslib/tcm.py 
new/python-rtslib-fb-v2.1.75/rtslib/tcm.py
--- old/python-rtslib-fb-v2.1.74/rtslib/tcm.py  2020-08-24 10:05:02.000000000 
+0200
+++ new/python-rtslib-fb-v2.1.75/rtslib/tcm.py  2022-05-02 14:16:07.000000000 
+0200
@@ -22,6 +22,7 @@
 import stat
 import re
 import glob
+import fcntl
 import resource
 from six.moves import range
 
@@ -32,6 +33,10 @@
 from .utils import is_dev_in_use, get_blockdev_type
 from .utils import get_size_for_blk_dev, get_size_for_disk_name
 
+lock_file = '/var/run/rtslib_backstore.lock'
+if not os.path.exists('/var/run'):
+    os.makedirs('/var/run')
+
 def storage_object_get_alua_support_attr(so):
     '''
     Helper function that can be called by passthrough type of backends.
@@ -282,16 +287,15 @@
         '''
         @return: True if the StorageObject is configured, else returns False
         '''
-
         self._check_self()
         path = "%s/enable" % self.path
-        try:
-            configured = fread(path)
-        except IOError:
+        # If the StorageObject does not have the enable attribute,
+        # then it is always enabled.
+        if os.path.isfile(path):
+            return bool(int(fread(path)))
+        else:
             return True
 
-        return bool(int(configured))
-
     version = property(_get_version,
             doc="Get the version of the StorageObject's backstore")
     name = property(_get_name,
@@ -876,7 +880,11 @@
         val = self.get_attribute('hw_block_size')
         if val != "NULL":
             tuples.append("hw_block_size=%s" % val)
-        # 3. add next ...
+        # 3. data_pages_per_blk
+        val = self._parse_info('DataPagesPerBlk')
+        if val != "NULL":
+            tuples.append("data_pages_per_blk=%s" % val)
+        # 4. add next ...
 
         return ",".join(tuples)
 
@@ -993,6 +1001,8 @@
                                      (self._plugin, name))
             else:
                 # Allocate new index value
+                lkfd = open(lock_file, 'w+')
+                fcntl.flock(lkfd, fcntl.LOCK_EX)
                 indexes = set(bs_cache.values())
                 for index in range(1048576):
                     if index not in indexes:
@@ -1000,7 +1010,9 @@
                         bs_cache[self._lookup_key] = self._index
                         break
                 else:
+                    fcntl.flock(lkfd, fcntl.LOCK_UN)
                     raise RTSLibError("No available backstore index")
+                fcntl.flock(lkfd, fcntl.LOCK_UN)
 
         self._path = "%s/core/%s_%d" % (self.configfs_dir,
                                         dirp,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-rtslib-fb-v2.1.74/rtslib/utils.py 
new/python-rtslib-fb-v2.1.75/rtslib/utils.py
--- old/python-rtslib-fb-v2.1.74/rtslib/utils.py        2020-08-24 
10:05:02.000000000 +0200
+++ new/python-rtslib-fb-v2.1.75/rtslib/utils.py        2022-05-02 
14:16:07.000000000 +0200
@@ -114,7 +114,11 @@
     '''
     path = os.path.realpath(str(path))
     try:
-        file_fd = os.open(path, os.O_EXCL|os.O_NDELAY|os.O_RDWR)
+        device = pyudev.Device.from_device_file(_CONTEXT, path)
+        if device.subsystem == u'scsi_generic':
+            file_fd = os.open(path, os.O_EXCL|os.O_NDELAY|os.O_RDWR)
+        else:
+            file_fd = os.open(path, os.O_EXCL|os.O_NDELAY)
     except OSError:
         return True
     else:

Reply via email to