-
-int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
- struct btrfs_root *root,
- struct btrfs_path *path,
- struct btrfs_dir_item *di)
-{
-
- struct extent_buffer *leaf;
- u32 sub_item_len;
- u32 item_len;
- int ret = 0;
-
- leaf = path->nodes[0];
- sub_item_len = sizeof(*di) + btrfs_dir_name_len(leaf, di) +
- btrfs_dir_data_len(leaf, di);
- item_len = btrfs_item_size_nr(leaf, path->slots[0]);
- if (sub_item_len == item_len) {
- ret = btrfs_del_item(trans, root, path);
- } else {
- /* MARKER */
- unsigned long ptr = (unsigned long)di;
- unsigned long start;
-
- start = btrfs_item_ptr_offset(leaf, path->slots[0]);
- memmove_extent_buffer(leaf, ptr, ptr + sub_item_len,
- item_len - (ptr + sub_item_len - start));
- ret = btrfs_truncate_item(trans, root, path,
- item_len - sub_item_len, 1);
- }
- return ret;
-}