mount: call hotplug-call with ACTION=remove before trying to unmount
authorRafał Miłecki <rafal@milecki.pl>
Wed, 21 Feb 2018 12:32:17 +0000 (13:32 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Mon, 26 Feb 2018 05:12:03 +0000 (06:12 +0100)
This increases a chance of successfully unmounting a drive as calling
hotplug.d scripts may result in stopping applications using it.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
mount.c

diff --git a/mount.c b/mount.c
index 3994149..00fe91d 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -774,11 +774,13 @@ static void mount_enum_drives(void)
                }
                if(!check_block(q->dev)||del)
                {
                }
                if(!check_block(q->dev)||del)
                {
-                       int err;
-
-                       err = mount_dev_del(q);
                        if (q->status == STATUS_MOUNTED || q->status == STATUS_EXPIRED) {
                                char dev_link[64];
                        if (q->status == STATUS_MOUNTED || q->status == STATUS_EXPIRED) {
                                char dev_link[64];
+                               int err;
+
+                               system_printf("ACTION=remove DEVICE=%s NAME=%s /sbin/hotplug-call mount", q->dev, q->name);
+
+                               err = mount_dev_del(q);
 
                                snprintf(dev_link, sizeof(dev_link), "%s%s", uci_path, q->name);
                                if (err == -EBUSY) {
 
                                snprintf(dev_link, sizeof(dev_link), "%s%s", uci_path, q->name);
                                if (err == -EBUSY) {
@@ -792,7 +794,6 @@ static void mount_enum_drives(void)
                                        log_printf("unlinking %s\n", dev_link);
                                        unlink(dev_link);
                                }
                                        log_printf("unlinking %s\n", dev_link);
                                        unlink(dev_link);
                                }
-                               system_printf("ACTION=remove DEVICE=%s NAME=%s /sbin/hotplug-call mount", q->dev, q->name);
                        }
 
                        p->prev->next = p->next;
                        }
 
                        p->prev->next = p->next;