diff options
author | pr.jung <pr.jung@samsung.com> | 2017-02-17 20:57:12 +0900 |
---|---|---|
committer | Jung <pr.jung@samsung.com> | 2017-02-17 03:58:16 -0800 |
commit | 004cee046c7cb8810e98da074c15dd187e234caa (patch) | |
tree | fe9ca31ce3032668020ce354fb9a99efcc576ecc | |
parent | fd45a2200ef3979bcaaeb2c13e750eff2f0bc2c8 (diff) | |
download | deviced-004cee046c7cb8810e98da074c15dd187e234caa.tar.gz deviced-004cee046c7cb8810e98da074c15dd187e234caa.tar.bz2 deviced-004cee046c7cb8810e98da074c15dd187e234caa.zip |
block: Check uevent is already handled on block_init_from_udev_enumeratesubmit/tizen_3.0/20170221.035828accepted/tizen/3.0/wearable/20170223.040354accepted/tizen/3.0/tv/20170223.040337accepted/tizen/3.0/mobile/20170223.040306accepted/tizen/3.0/ivi/20170223.040402accepted/tizen/3.0/common/20170223.121150
Change-Id: I1cec40da92f0a6cebcf97833fb1ac7ee920f46d0
Signed-off-by: pr.jung <pr.jung@samsung.com>
-rw-r--r-- | src/block/block.c | 72 |
1 files changed, 53 insertions, 19 deletions
diff --git a/src/block/block.c b/src/block/block.c index 7d16d7c8..ccdfdb2e 100644 --- a/src/block/block.c +++ b/src/block/block.c @@ -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))) |