]> www.infradead.org Git - users/hch/nvmetcli.git/commitdiff
nvmet: remove broken automatic portid assignment
authorChristoph Hellwig <hch@lst.de>
Thu, 26 May 2016 12:58:29 +0000 (14:58 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 26 May 2016 12:58:29 +0000 (14:58 +0200)
Signed-off-by: Christoph Hellwig <hch@lst.de>
nvmet/nvme.py
nvmet/test_nvmet.py
nvmetcli

index f8b1ee97527ec591165ad03b6835f357de2f2f2e..f7b4162e7704bf71bcfe313fd603a226c434cf36 100644 (file)
@@ -267,7 +267,7 @@ class Root(CFSNode):
         self._check_self()
 
         for d in os.listdir("%s/ports/" % self._path):
-            yield Port(self, d, 'lookup')
+            yield Port(d, 'lookup')
 
     ports = property(_list_ports,
                 doc="Get the list of Ports.")
@@ -600,25 +600,12 @@ class Port(CFSNode):
     def __repr__(self):
         return "<Port %d>" % self.portid
 
-    def __init__(self, root, portid=None, mode='any'):
+    def __init__(self, portid, mode='any'):
         super(Port, self).__init__()
 
-        if portid is None:
-            portids = [p.portid for p in root.ports]
-            for index in xrange(0, 1 << 16):
-                if index not in portids:
-                    portid = index
-                    break
-            if portid is None:
-                raise CFSError("All Port IDs 0-%d in use" % 1 << 16)
-        else:
-            portid = int(portid)
-            if portid < 0 or portid > self.MAX_PORTID:
-                raise CFSError("Port ID must be 0 to %d" % self.MAX_PORTID)
-
         self.attr_groups = ['addr']
-        self._portid = portid
-        self._path = "%s/ports/%d" % (self.configfs_dir, portid)
+        self._portid = int(portid)
+        self._path = "%s/ports/%d" % (self.configfs_dir, self._portid)
         self._create_in_cfs(mode)
 
     def _get_portid(self):
@@ -684,7 +671,7 @@ class Port(CFSNode):
             return
 
         try:
-            port = Port(root, n['portid'])
+            port = Port(n['portid'])
         except CFSError as e:
             err_func("Could not create Port object: %s" % e)
             return
index 445050cc4fe6f84bfffacbbc577956602c1fd5de..5caa5464170ca556e90d1a32835544983af12aed 100644 (file)
@@ -155,39 +155,29 @@ class TestNvmet(unittest.TestCase):
             self.assertTrue(False, 'Found Port after clear')
 
         # create mode
-        p1 = nvme.Port(root, portid=0, mode='create')
+        p1 = nvme.Port(portid=0, mode='create')
         self.assertIsNotNone(p1)
         self.assertEqual(len(list(root.ports)), 1)
 
         # any mode, should create
-        p2 = nvme.Port(root, portid=1, mode='any')
+        p2 = nvme.Port(portid=1, mode='any')
         self.assertIsNotNone(p2)
         self.assertEqual(len(list(root.ports)), 2)
 
-        # automatic portid
-        p3 = nvme.Port(root, mode='create')
-        self.assertIsNotNone(p3)
-        self.assertNotEqual(p3, p1)
-        self.assertNotEqual(p3, p2)
-        self.assertEqual(len(list(root.ports)), 3)
-
         # duplicate
         self.assertRaises(nvme.CFSError, nvme.Port,
-                          root, portid=0, mode='create')
-        self.assertEqual(len(list(root.ports)), 3)
+                          portid=0, mode='create')
+        self.assertEqual(len(list(root.ports)), 2)
 
         # lookup using any, should not create
-        p = nvme.Port(root, portid=0, mode='any')
+        p = nvme.Port(portid=0, mode='any')
         self.assertEqual(p1, p)
-        self.assertEqual(len(list(root.ports)), 3)
+        self.assertEqual(len(list(root.ports)), 2)
 
         # lookup only
-        p = nvme.Port(root, portid=1, mode='lookup')
+        p = nvme.Port(portid=1, mode='lookup')
         self.assertEqual(p2, p)
-        self.assertEqual(len(list(root.ports)), 3)
-
-        # lookup without portid
-        self.assertRaises(nvme.CFSError, nvme.Port, root, mode='lookup')
+        self.assertEqual(len(list(root.ports)), 2)
 
         # and delete them all
         for p in root.ports:
@@ -199,7 +189,7 @@ class TestNvmet(unittest.TestCase):
         root.clear_existing()
 
         s = nvme.Subsystem(nqn='testnqn', mode='create')
-        p = nvme.Port(root, portid=0, mode='create')
+        p = nvme.Port(portid=0, mode='create')
 
         # subsystem doesn't exists, should fail
         self.assertRaises(nvme.CFSError, p.add_subsystem, 'invalidnqn')
@@ -288,7 +278,7 @@ class TestNvmet(unittest.TestCase):
         root.clear_existing()
 
         # create port
-        p = nvme.Port(root, mode='create')
+        p = nvme.Port(portid=1, mode='create')
         self.assertEqual(len(list(p.referrals)), 0)
 
         # create mode
@@ -411,7 +401,7 @@ class TestNvmet(unittest.TestCase):
                           nqn=discover_nqn, mode='create')
 
         self.assertRaises(nvme.CFSError, nvme.Port,
-                          root=root, portid=1 << 17, mode='create')
+                          portid=1 << 17, mode='create')
 
     def test_save_restore(self):
         root = nvme.Root()
@@ -431,7 +421,7 @@ class TestNvmet(unittest.TestCase):
 
         nguid = n.get_attr('device', 'nguid')
 
-        p = nvme.Port(root, portid=66, mode='create')
+        p = nvme.Port(portid=66, mode='create')
         p.set_attr('addr', 'trtype', 'loop')
         p.set_attr('addr', 'adrfam', 'ipv4')
         p.set_attr('addr', 'traddr', '192.168.0.1')
@@ -456,7 +446,7 @@ class TestNvmet(unittest.TestCase):
         s = nvme.Subsystem(nqn='testnqn', mode='lookup')
         s2 = nvme.Subsystem(nqn='testnqn2', mode='lookup')
         n = nvme.Namespace(s, nsid=42, mode='lookup')
-        p = nvme.Port(root, portid=66, mode='lookup')
+        p = nvme.Port(portid=66, mode='lookup')
 
         self.assertEqual(s.get_attr('attr', 'allow_any_host'), "0")
         self.assertEqual(s2.get_attr('attr', 'allow_any_host'), "1")
index 58c8d27ba35a4ccdf9869aa142874a478a1cf1f2..9764d84a77fda19f7d01a24fc62c4f4a0b1b2359 100755 (executable)
--- a/nvmetcli
+++ b/nvmetcli
@@ -310,16 +310,15 @@ class UIPortsNode(UINode):
         for port in self.parent.cfnode.ports:
             UIPortNode(self, port)
 
-    def ui_command_create(self, portid):
+    def ui_command_create(self, portid=None):
         '''
-        Creates a new NVMe port. If I{port} is ommited, then the new Port
-        will use the next available portid.
+        Creates a new NVMe port with portid I{portid}.
 
         SEE ALSO
         ========
         B{delete}
         '''
-        port = nvme.Port(self.parent.parent.cfnode, portid, mode='create')
+        port = nvme.Port(portid, mode='create')
         UIPortNode(self, port)
 
     def ui_command_delete(self, portid):
@@ -331,7 +330,7 @@ class UIPortsNode(UINode):
         ========
         B{create}
         '''
-        port = nvme.Port(self.parent.parent.cfnode, portid, mode='lookup')
+        port = nvme.Port(portid, mode='lookup')
         port.delete()
         self.refresh()