blockd: restore device_move semantics
authorDaniel Golle <daniel@makrotopia.org>
Wed, 13 Apr 2022 00:00:31 +0000 (01:00 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Sun, 1 May 2022 15:55:55 +0000 (16:55 +0100)
Before commit 4963db4 block device were only removed and re-added in
case of device_move() returning a non-zero value. Commit 4963db4 then
(supposedly) accidentally inverted that logic and also (probably to
work-around the problems resulting from the now inverted logic) limited
this behavior to autofs mounts, leaving the autofs codepath in a semi-
broken state.
Restore the original semantics as of before commit 4963db4 to fully
restore functionality for autofs mounts.

Fixes: 4963db4 ("blockd: use uloop_process for calling /sbin/hotplug-call mount")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
blockd.c

index 8bb5005a7f3d575ab4e351ba66315720de8b6b64..9572fd0087d5c98d385e2fac492c7a6876970710 100644 (file)
--- a/blockd.c
+++ b/blockd.c
@@ -349,13 +349,11 @@ block_hotplug(struct ubus_context *ctx, struct ubus_object *obj,
 
                vlist_add(&devices, &device->node, device->name);
 
-               if (old && !device_move(old, device)) {
-                       if (device->autofs) {
-                               device_mount_remove(ctx, old);
-                               device_mount_add(ctx, device);
-                       } else {
+               if (old && device_move(old, device)) {
+                       device_mount_remove(ctx, old);
+                       device_mount_add(ctx, device);
+                       if (!device->autofs)
                                block("mount", NULL, NULL, 0, NULL);
-                       }
                } else if (device->autofs) {
                        device_mount_add(ctx, device);
                }