block: Change mount state when mount operation is failed 35/115035/3
authorpr.jung <pr.jung@samsung.com>
Thu, 16 Feb 2017 06:36:43 +0000 (15:36 +0900)
committerJung <pr.jung@samsung.com>
Fri, 17 Feb 2017 08:38:21 +0000 (00:38 -0800)
Change-Id: I0adc236a27538d450f4bc95ec254e1201699796e
Signed-off-by: pr.jung <pr.jung@samsung.com>
src/block/block.c

index ee287e8..7d16d7c 100644 (file)
@@ -925,12 +925,13 @@ static Eina_Bool pipe_cb(void *data, Ecore_Fd_Handler *fdh)
                        pdata.bdev, pdata.result);
 
        if (pdata.op == BLOCK_DEV_MOUNT && pdata.result < 0) {
-               ret = change_mount_point(pdata.bdev, "");
-               if (ret < 0)
-                       goto out;
-
-               /* Modify /run/external-storage/id file */
-               create_file(pdata.bdev->data->id, pdata.bdev->data->mount_point);
+               if (pdata.bdev->data->state == BLOCK_UNMOUNT) {
+                       ret = change_mount_point(pdata.bdev, "");
+                       /* Modify /run/external-storage/id file */
+                       if (ret == 0)
+                               create_file(pdata.bdev->data->id, pdata.bdev->data->mount_point);
+               }
+               goto out;
        }
 
        /* Broadcast to mmc and usb storage module */
@@ -1134,6 +1135,7 @@ static int mount_start(struct block_device *bdev)
        DBusError err;
        struct block_data *data;
        int r;
+       int ret;
        bool ret_val;
 
        assert(bdev);
@@ -1157,8 +1159,8 @@ static int mount_start(struct block_device *bdev)
 
        data->state = BLOCK_MOUNT;
 
-       r = app2ext_migrate_legacy_all();
-       if (r < 0)
+       ret = app2ext_migrate_legacy_all();
+       if (ret < 0)
                _E("app2ext failed");
 
        msg = dbus_method_sync_with_reply(PKGDIR_BUS_NAME, PKGDIR_PATH,
@@ -1171,13 +1173,16 @@ static int mount_start(struct block_device *bdev)
 
        dbus_error_init(&err);
 
-       r = dbus_message_get_args(msg, &err, DBUS_TYPE_BOOLEAN, &ret_val, DBUS_TYPE_INVALID);
-       if (!r) {
+       ret = dbus_message_get_args(msg, &err, DBUS_TYPE_BOOLEAN, &ret_val, DBUS_TYPE_INVALID);
+       if (!ret) {
                _E("no message : [%s:%s]", err.name, err.message);
                dbus_error_free(&err);
        }
 
 out:
+       if (r < 0 && r != -EROFS)
+               data->state = BLOCK_UNMOUNT;
+
        _I("%s result : %s, %d", __func__, data->devnode, r);
 
        if (pipe_trigger(BLOCK_DEV_MOUNT, bdev, r) < 0)
@@ -1232,7 +1237,7 @@ static int mount_block_device(struct block_device *bdev)
 
        r = mount_start(bdev);
        if (r < 0) {
-               _E("Failed to mount (%d)", data->devnode);
+               _E("Failed to mount (%s)", data->devnode);
                return r;
        }
 
@@ -1315,7 +1320,7 @@ static int block_unmount(struct block_device *bdev,
 
                r = mmc_check_and_unmount(data->mount_point);
                if (!r) {
-                       _D("Success to unmount (%d)", data->mount_point);
+                       _D("Success to unmount (%s)", data->mount_point);
                        break;
                }
        }