block: don't duplicate mounting code in the mount_device()
authorRafał Miłecki <rafal@milecki.pl>
Fri, 30 Nov 2018 13:09:23 +0000 (14:09 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Tue, 4 Dec 2018 08:15:36 +0000 (09:15 +0100)
Once target directory gets specified mounting code is identical for
devices having and not having UCI config entry. Share it.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Reviewed-by: Michael Heimpold <mhei@heimpold.de>
block.c

diff --git a/block.c b/block.c
index 0671aca6d0f8231ba9f790859b513ffd75735929..a35631514ceba3c37c818d60c454874bbbbdbef3 100644 (file)
--- a/block.c
+++ b/block.c
@@ -992,8 +992,11 @@ static void blockd_notify(char *device, struct mount *m, struct probe_info *pr)
 static int mount_device(struct probe_info *pr, int type)
 {
        struct mount *m;
+       char _target[32];
+       char *target;
        char *device;
        char *mp;
+       int err;
 
        if (!pr)
                return -1;
@@ -1024,11 +1027,8 @@ static int mount_device(struct probe_info *pr, int type)
        if (type == TYPE_HOTPLUG)
                blockd_notify(device, m, pr);
 
+       /* Check if device should be mounted & set the target directory */
        if (m) {
-               char _target[32];
-               char *target;
-               int err = 0;
-
                switch (type) {
                case TYPE_HOTPLUG:
                        if (m->autofs)
@@ -1055,39 +1055,30 @@ static int mount_device(struct probe_info *pr, int type)
                        snprintf(_target, sizeof(_target), "/mnt/%s", device);
                        target = _target;
                }
-               mkdir_p(target);
-
-               if (check_fs)
-                       check_filesystem(pr);
-
-               err = handle_mount(pr->dev, target, pr->type, m);
-               if (err)
-                       ULOG_ERR("mounting %s (%s) as %s failed (%d) - %m\n",
-                                pr->dev, pr->type, target, errno);
-               else
-                       handle_swapfiles(true);
-               return err;
+       } else if (anon_mount) {
+               snprintf(_target, sizeof(_target), "/mnt/%s", device);
+               target = _target;
+       } else {
+               /* No reason to mount this device */
+               return 0;
        }
 
-       if (anon_mount) {
-               char target[32];
-               int err = 0;
+       /* Mount the device */
 
-               snprintf(target, sizeof(target), "/mnt/%s", device);
-               mkdir_p(target);
+       if (check_fs)
+               check_filesystem(pr);
 
-               if (check_fs)
-                       check_filesystem(pr);
+       mkdir_p(target);
 
-               err = handle_mount(pr->dev, target, pr->type, NULL);
-               if (err)
-                       ULOG_ERR("mounting %s (%s) as %s failed (%d) - %m\n",
-                                pr->dev, pr->type, target, errno);
-               else
-                       handle_swapfiles(true);
+       err = handle_mount(pr->dev, target, pr->type, m);
+       if (err) {
+               ULOG_ERR("mounting %s (%s) as %s failed (%d) - %m\n",
+                               pr->dev, pr->type, target, errno);
                return err;
        }
 
+       handle_swapfiles(true);
+
        return 0;
 }