X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dir-item.c;h=462546c0eaf47cdc2823a2b6ffd40690815c7f11;hb=1c9c5f7fb3f6a2182d230d469b22b3b1329f24d8;hp=e34f69357e80ac5fe2a4baead8c7b2efb1917962;hpb=c6eae415eef826a0e17642d737ec33a099b932cf;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/dir-item.c b/dir-item.c index e34f693..462546c 100644 --- a/dir-item.c +++ b/dir-item.c @@ -135,7 +135,14 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root name, name_len); if (IS_ERR(dir_item)) { ret = PTR_ERR(dir_item); - goto out; + + /* Continue to insert item if existed */ + if (ret == -EEXIST) { + ret = 0; + goto insert; + } else { + goto out; + } } leaf = path->nodes[0]; @@ -149,6 +156,7 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root write_extent_buffer(leaf, name, name_ptr, name_len); btrfs_mark_buffer_dirty(leaf); +insert: /* FIXME, use some real flag for selecting the extra index */ if (root == root->fs_info->tree_root) { ret = 0; @@ -162,6 +170,8 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root name, name_len); if (IS_ERR(dir_item)) { ret2 = PTR_ERR(dir_item); + if (ret2 == -EEXIST) + ret = 0; goto out; } leaf = path->nodes[0];