Skip to content

Commit fd76af1

Browse files
Merge pull request #1427 from vojtechtrefny/main_iscsi-lun-fix
iSCSI: don't crash when LUN ID >= 256
2 parents 34ab083 + d624085 commit fd76af1

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

blivet/devices/disk.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from gi.repository import GLib
2929

3030
import os
31+
import re
3132
from collections import namedtuple
3233

3334
from .. import errors
@@ -354,8 +355,17 @@ def __init__(self, device, **kwargs):
354355
self.offload = kwargs.pop("offload")
355356
name = kwargs.pop("name")
356357
self.target = kwargs.pop("target")
358+
lun = kwargs.pop("lun")
357359
try:
358-
self.lun = int(kwargs.pop("lun"))
360+
self.lun = int(lun)
361+
except ValueError:
362+
# See systemd udev function format_lun_number()
363+
m = re.fullmatch('0x([0-9a-fA-F]{4})([0-9a-fA-F]{4})00000000', lun)
364+
if m is None:
365+
log.warning("Failed to extract hex from lun '%s'", lun)
366+
self.lun = None
367+
else:
368+
self.lun = int(m.group(1), 16) + (1 << 16) * int(m.group(2), 16)
359369
except TypeError as e:
360370
log.warning("Failed to set lun attribute of iscsi disk: %s", e)
361371
self.lun = None

tests/unit_tests/devices_test/disk_test.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import unittest
22
from unittest.mock import patch
33

4-
from blivet.devices import DiskDevice
4+
from blivet.devices import DiskDevice, iScsiDiskDevice
55
from blivet.devicelibs import disk as disklib
66
from blivet.devicelibs import raid
77
from blivet.size import Size
@@ -47,3 +47,16 @@ def test_disk_raid_properties(self):
4747
self.assertIsNone(test3.raid_level)
4848
self.assertIsNone(test3.raid_stripe_size)
4949
self.assertIsNone(test3.raid_disk_count)
50+
51+
52+
class iScsiDiskDeviceTestCase(unittest.TestCase):
53+
def test_iscsi_lun(self):
54+
kwargs = {"node": "", "ibft": "", "nic": "", "initiator": "",
55+
"offload": False, "name": "", "target": "",
56+
"address": "", "port": "", "iface": "", "id_path": ""}
57+
58+
disk1 = iScsiDiskDevice("test1", lun="1", **kwargs)
59+
self.assertEqual(disk1.lun, 1)
60+
61+
disk2 = iScsiDiskDevice("test1", lun="0x0101000000000000", **kwargs)
62+
self.assertEqual(disk2.lun, 257)

0 commit comments

Comments
 (0)