block: Check uevent is already handled on block_init_from_udev_enumerate 57/115357/2 accepted/tizen/3.0/common/20170223.121150 accepted/tizen/3.0/ivi/20170223.040402 accepted/tizen/3.0/mobile/20170223.040306 accepted/tizen/3.0/tv/20170223.040337 accepted/tizen/3.0/wearable/20170223.040354 submit/tizen_3.0/20170221.035828
authorpr.jung <pr.jung@samsung.com>
Fri, 17 Feb 2017 11:57:12 +0000 (20:57 +0900)
committerJung <pr.jung@samsung.com>
Fri, 17 Feb 2017 11:58:16 +0000 (03:58 -0800)
Change-Id: I1cec40da92f0a6cebcf97833fb1ac7ee920f46d0
Signed-off-by: pr.jung <pr.jung@samsung.com>
src/block/block.c

index 7d16d7c..ccdfdb2 100644 (file)
@@ -920,7 +920,7 @@ static Eina_Bool pipe_cb(void *data, Ecore_Fd_Handler *fdh)
                goto out;
        }
 
-       _D("op : %s, bdev : %p, result : %d",
+       _I("op : %s, bdev : %p, result : %d",
                        get_operation_char(pdata.op, name, sizeof(name)),
                        pdata.bdev, pdata.result);
 
@@ -1159,24 +1159,26 @@ static int mount_start(struct block_device *bdev)
 
        data->state = BLOCK_MOUNT;
 
-       ret = app2ext_migrate_legacy_all();
-       if (ret < 0)
-               _E("app2ext failed");
+       if (data->block_type == BLOCK_MMC_DEV) {
+               ret = app2ext_migrate_legacy_all();
+               if (ret < 0)
+                       _E("app2ext failed");
 
-       msg = dbus_method_sync_with_reply(PKGDIR_BUS_NAME, PKGDIR_PATH,
-                       PKGDIR_INTERFACE, "CreateExternalDirsForAllPkgs",
-                       NULL, NULL);
-       if (!msg) {
-               _D("Fail to create external directory");
-               goto out;
-       }
+               msg = dbus_method_sync_with_reply(PKGDIR_BUS_NAME, PKGDIR_PATH,
+                               PKGDIR_INTERFACE, "CreateExternalDirsForAllPkgs",
+                               NULL, NULL);
+               if (!msg) {
+                       _E("Fail to create external directory");
+                       goto out;
+               }
 
-       dbus_error_init(&err);
+               dbus_error_init(&err);
 
-       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);
+               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:
@@ -1936,7 +1938,7 @@ static int add_operation(struct block_device *bdev,
                return -EINVAL;
 
 
-       _D("Add operation (%s, %s)",
+       _I("Add operation (%s, %s)",
                        get_operation_char(operation, name, sizeof(name)),
                        bdev->data->devnode);
 
@@ -2262,6 +2264,32 @@ static int check_external_storage(const char* devnode)
        return 1;
 }
 
+static int check_already_handled(const char* devnode)
+{
+       struct block_device *bdev;
+       struct block_data *data;
+       dd_list *elem;
+       int i;
+
+       for (i = 0; i < THREAD_MAX; i++) {
+               pthread_mutex_lock(&(th_manager[i].mutex));
+               DD_LIST_FOREACH(th_manager[i].block_dev_list, elem, bdev) {
+                       data = bdev->data;
+                       if (!data)
+                               continue;
+                       if (bdev->removed)
+                               continue;
+                       if (!strncmp(data->devnode, devnode, sizeof(devnode) + 1)) {
+                               pthread_mutex_unlock(&(th_manager[i].mutex));
+                               return -1;
+                       }
+               }
+               pthread_mutex_unlock(&(th_manager[i].mutex));
+       }
+
+       return 0;
+}
+
 static int block_init_from_udev_enumerate(void)
 {
        struct udev *udev;
@@ -2335,7 +2363,13 @@ static int block_init_from_udev_enumerate(void)
                if (r <= 0)
                        continue;
 
-               _D("%s device add", devnode);
+               r = check_already_handled(devnode);
+               if (r < 0) {
+                       _I("%s is already handled", devnode);
+                       continue;
+               }
+
+               _I("%s device add", devnode);
                add_block_device(dev, devnode);
 
                udev_device_unref(dev);
@@ -2471,7 +2505,7 @@ static void uevent_block_handler(struct udev_device *dev)
        if (!action)
                return;
 
-       _D("%s device %s", devnode, action);
+       _I("%s device %s", devnode, action);
        if (!strncmp(action, UDEV_ADD, sizeof(UDEV_ADD)))
                add_block_device(dev, devnode);
        else if (!strncmp(action, UDEV_REMOVE, sizeof(UDEV_REMOVE)))