Skip to content

Commit 1686498

Browse files
committed
udiskslinuxdriveobject: Update object interfaces on NVMe subsystem uevent
Update block and drive object interfaces on an incoming NVMe subsystem uevent. This allows to properly reflect the state of a NVMe subsystem native multipath where one path disappears and uevents are sent only to a limited number of devices. This allows e.g. to update Drive property references once the primary/active path/controller disappears and another one in the subsystem takes over.
1 parent 396e67b commit 1686498

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

src/tests/dbus-tests/test_nvme.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -928,18 +928,18 @@ def test_fabrics_multipath(self):
928928
# disconnect the first controller and watch the drive object references change
929929
ctrl.Disconnect(self.no_options, dbus_interface=self.iface_prefix + '.NVMe.Fabrics')
930930
namespaces = self._find_block_objects_for_ctrl(ctrl_obj_path)
931-
self.assertEqual(len(namespaces), self.NUM_NS)
932-
namespaces = self._find_block_objects_for_ctrl(ctrl2_obj_path)
933931
self.assertEqual(len(namespaces), 0)
932+
namespaces = self._find_block_objects_for_ctrl(ctrl2_obj_path)
933+
self.assertEqual(len(namespaces), self.NUM_NS)
934934

935935
ctrl2.Disconnect(self.no_options, dbus_interface=self.iface_prefix + '.NVMe.Fabrics')
936936
if self._ipv6_available:
937937
namespaces = self._find_block_objects_for_ctrl(ctrl_obj_path)
938-
self.assertEqual(len(namespaces), self.NUM_NS)
938+
self.assertEqual(len(namespaces), 0)
939939
namespaces = self._find_block_objects_for_ctrl(ctrl2_obj_path)
940940
self.assertEqual(len(namespaces), 0)
941941
namespaces = self._find_block_objects_for_ctrl(ctrl3_obj_path)
942-
self.assertEqual(len(namespaces), 0)
942+
self.assertEqual(len(namespaces), self.NUM_NS)
943943
ctrl3.Disconnect(self.no_options, dbus_interface=self.iface_prefix + '.NVMe.Fabrics')
944944

945945
def test_hostnqn(self):

src/udiskslinuxblockobject.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,4 +1194,8 @@ udisks_linux_block_object_nvme_subsys_uevent (UDisksLinuxBlockObject *object,
11941194
UDisksUeventAction action,
11951195
UDisksLinuxDevice *device)
11961196
{
1197+
if (object->iface_block_device != NULL)
1198+
udisks_linux_block_update (UDISKS_LINUX_BLOCK (object->iface_block_device), object);
1199+
if (object->iface_nvme_namespace != NULL)
1200+
udisks_linux_nvme_namespace_update (UDISKS_LINUX_NVME_NAMESPACE (object->iface_nvme_namespace), object);
11971201
}

src/udiskslinuxdriveobject.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,4 +1374,10 @@ udisks_linux_drive_object_nvme_subsys_uevent (UDisksLinuxDriveObject *object,
13741374
UDisksLinuxDevice *device,
13751375
UDisksLinuxBlockObject **subsystem_blocks)
13761376
{
1377+
if (object->iface_drive != NULL)
1378+
udisks_linux_drive_update (UDISKS_LINUX_DRIVE (object->iface_drive), object);
1379+
if (object->iface_nvme_ctrl != NULL)
1380+
udisks_linux_nvme_controller_update (UDISKS_LINUX_NVME_CONTROLLER (object->iface_nvme_ctrl), object);
1381+
if (object->iface_nvme_fabrics != NULL)
1382+
udisks_linux_nvme_fabrics_update (UDISKS_LINUX_NVME_FABRICS (object->iface_nvme_fabrics), object);
13771383
}

0 commit comments

Comments
 (0)