From baaca691196de21339425bdf28a2d71f5209cf15 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig <hch@lst.de> Date: Thu, 26 May 2016 14:58:29 +0200 Subject: [PATCH] nvmet: remove broken automatic portid assignment Signed-off-by: Christoph Hellwig <hch@lst.de> --- nvmet/nvme.py | 23 +++++------------------ nvmet/test_nvmet.py | 36 +++++++++++++----------------------- nvmetcli | 9 ++++----- 3 files changed, 22 insertions(+), 46 deletions(-) diff --git a/nvmet/nvme.py b/nvmet/nvme.py index f8b1ee9..f7b4162 100644 --- a/nvmet/nvme.py +++ b/nvmet/nvme.py @@ -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 diff --git a/nvmet/test_nvmet.py b/nvmet/test_nvmet.py index 445050c..5caa546 100644 --- a/nvmet/test_nvmet.py +++ b/nvmet/test_nvmet.py @@ -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") diff --git a/nvmetcli b/nvmetcli index 58c8d27..9764d84 100755 --- 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() -- GitLab