Skip to content

Commit cbcedef

Browse files
committed
udiskslinuxmdraid: Add uevent triggers
Trigger uevents sync on the raid devices and their members when available. This appears to fix some random test failures.
1 parent b524c51 commit cbcedef

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

src/udiskslinuxmdraid.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,7 @@ udisks_linux_mdraid_stop (UDisksMDRaid *_mdraid,
747747
UDisksLinuxDevice *raid_device = NULL;
748748
UDisksBaseJob *job = NULL;
749749
const gchar *device_file = NULL;
750+
const gchar *sysfs_path;
750751
GError *local_error = NULL;
751752
gboolean ret = FALSE;
752753

@@ -802,6 +803,7 @@ udisks_linux_mdraid_stop (UDisksMDRaid *_mdraid,
802803
}
803804

804805
device_file = g_udev_device_get_device_file (raid_device->udev_device);
806+
sysfs_path = g_udev_device_get_sysfs_path (raid_device->udev_device);
805807

806808
job = udisks_daemon_launch_simple_job (daemon,
807809
UDISKS_OBJECT (object),
@@ -825,6 +827,8 @@ udisks_linux_mdraid_stop (UDisksMDRaid *_mdraid,
825827
goto out;
826828
}
827829

830+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
831+
828832
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), TRUE, NULL);
829833
ret = TRUE;
830834

@@ -930,6 +934,7 @@ handle_remove_device (UDisksMDRaid *_mdraid,
930934
UDisksLinuxDevice *raid_device = NULL;
931935
const gchar *device_file = NULL;
932936
const gchar *member_device_file = NULL;
937+
const gchar *sysfs_path;
933938
GError *error = NULL;
934939
UDisksObject *member_device_object = NULL;
935940
UDisksBlock *member_device = NULL;
@@ -1018,6 +1023,7 @@ handle_remove_device (UDisksMDRaid *_mdraid,
10181023
}
10191024

10201025
device_file = g_udev_device_get_device_file (raid_device->udev_device);
1026+
sysfs_path = g_udev_device_get_sysfs_path (raid_device->udev_device);
10211027

10221028
member_device_file = udisks_block_get_device (member_device);
10231029

@@ -1062,6 +1068,11 @@ handle_remove_device (UDisksMDRaid *_mdraid,
10621068
}
10631069
}
10641070

1071+
udisks_linux_block_object_trigger_uevent_sync (UDISKS_LINUX_BLOCK_OBJECT (member_device_object),
1072+
UDISKS_DEFAULT_WAIT_TIMEOUT);
1073+
1074+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
1075+
10651076
udisks_mdraid_complete_remove_device (_mdraid, invocation);
10661077

10671078
out:
@@ -1092,6 +1103,7 @@ handle_add_device (UDisksMDRaid *_mdraid,
10921103
UDisksLinuxDevice *raid_device = NULL;
10931104
const gchar *device_file = NULL;
10941105
const gchar *new_member_device_file = NULL;
1106+
const gchar *sysfs_path;
10951107
GError *error = NULL;
10961108
UDisksObject *new_member_device_object = NULL;
10971109
UDisksBlock *new_member_device = NULL;
@@ -1168,6 +1180,8 @@ handle_add_device (UDisksMDRaid *_mdraid,
11681180
}
11691181

11701182
device_file = g_udev_device_get_device_file (raid_device->udev_device);
1183+
sysfs_path = g_udev_device_get_sysfs_path (raid_device->udev_device);
1184+
11711185
new_member_device_file = udisks_block_get_device (new_member_device);
11721186

11731187
job = udisks_daemon_launch_simple_job (daemon,
@@ -1192,6 +1206,11 @@ handle_add_device (UDisksMDRaid *_mdraid,
11921206
goto out;
11931207
}
11941208

1209+
udisks_linux_block_object_trigger_uevent_sync (UDISKS_LINUX_BLOCK_OBJECT (new_member_device_object),
1210+
UDISKS_DEFAULT_WAIT_TIMEOUT);
1211+
1212+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
1213+
11951214
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), TRUE, NULL);
11961215
udisks_mdraid_complete_add_device (_mdraid, invocation);
11971216

@@ -1221,6 +1240,7 @@ handle_set_bitmap_location (UDisksMDRaid *_mdraid,
12211240
uid_t caller_uid;
12221241
UDisksLinuxDevice *raid_device = NULL;
12231242
const gchar *device_file = NULL;
1243+
const gchar *sysfs_path;
12241244
GError *error = NULL;
12251245
UDisksBaseJob *job = NULL;
12261246

@@ -1286,6 +1306,7 @@ handle_set_bitmap_location (UDisksMDRaid *_mdraid,
12861306
}
12871307

12881308
device_file = g_udev_device_get_device_file (raid_device->udev_device);
1309+
sysfs_path = g_udev_device_get_sysfs_path (raid_device->udev_device);
12891310

12901311
job = udisks_daemon_launch_simple_job (daemon,
12911312
UDISKS_OBJECT (object),
@@ -1309,6 +1330,8 @@ handle_set_bitmap_location (UDisksMDRaid *_mdraid,
13091330
goto out;
13101331
}
13111332

1333+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
1334+
13121335
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), TRUE, NULL);
13131336
udisks_mdraid_complete_add_device (_mdraid, invocation);
13141337
udisks_linux_mdraid_update (mdraid, object);
@@ -1338,6 +1361,7 @@ handle_request_sync_action (UDisksMDRaid *_mdraid,
13381361
UDisksLinuxDevice *raid_device = NULL;
13391362
GError *error = NULL;
13401363
const gchar *device_file = NULL;
1364+
const gchar *sysfs_path;
13411365
UDisksBaseJob *job = NULL;
13421366
gboolean opt_no_inhibit = FALSE;
13431367

@@ -1407,6 +1431,7 @@ handle_request_sync_action (UDisksMDRaid *_mdraid,
14071431
}
14081432

14091433
device_file = g_udev_device_get_device_file (raid_device->udev_device);
1434+
sysfs_path = g_udev_device_get_sysfs_path (raid_device->udev_device);
14101435

14111436
job = udisks_daemon_launch_simple_job (daemon,
14121437
UDISKS_OBJECT (object),
@@ -1430,6 +1455,8 @@ handle_request_sync_action (UDisksMDRaid *_mdraid,
14301455
goto out;
14311456
}
14321457

1458+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
1459+
14331460
udisks_simple_job_complete (UDISKS_SIMPLE_JOB (job), TRUE, NULL);
14341461
udisks_mdraid_complete_request_sync_action (_mdraid, invocation);
14351462

@@ -1455,6 +1482,7 @@ handle_delete (UDisksMDRaid *mdraid,
14551482
GList *member_devices = NULL;
14561483
GList *l;
14571484
UDisksLinuxDevice *raid_device = NULL;
1485+
const gchar *sysfs_path;
14581486
GError *error = NULL;
14591487

14601488
g_variant_lookup (options, "tear-down", "b", &teardown_flag);
@@ -1565,12 +1593,20 @@ handle_delete (UDisksMDRaid *mdraid,
15651593
UDisksLinuxDevice *member_device = UDISKS_LINUX_DEVICE (l->data);
15661594
const gchar *device = g_udev_device_get_device_file (member_device->udev_device);
15671595

1596+
sysfs_path = g_udev_device_get_sysfs_path (member_device->udev_device);
15681597
if (!bd_md_destroy (device, &error))
15691598
{
15701599
g_prefix_error (&error, "Error wiping device '%s': ", device);
15711600
g_dbus_method_invocation_take_error (invocation, error);
15721601
goto out;
15731602
}
1603+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
1604+
}
1605+
1606+
if (raid_device)
1607+
{
1608+
sysfs_path = g_udev_device_get_sysfs_path (raid_device->udev_device);
1609+
udisks_daemon_util_trigger_uevent_sync (daemon, NULL, sysfs_path, UDISKS_DEFAULT_WAIT_TIMEOUT);
15741610
}
15751611

15761612
udisks_mdraid_complete_delete (mdraid, invocation);

0 commit comments

Comments
 (0)