diff options
author | Chris Mason <clm@fb.com> | 2015-01-22 02:45:25 +0100 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-01-22 02:45:25 +0100 |
commit | d3541834884f042aaaab1d6c0610cdc3488028e4 (patch) | |
tree | d6f8f0ac6c98b1f996dfcaae5df0ba33a6fa5251 /fs/btrfs/ctree.c | |
parent | Btrfs: track dirty block groups on their own list (diff) | |
parent | btrfs: expand btrfs_find_item if found_key is NULL (diff) | |
download | linux-d3541834884f042aaaab1d6c0610cdc3488028e4.tar.xz linux-d3541834884f042aaaab1d6c0610cdc3488028e4.zip |
Merge branch 'fix/find-item-path-leak' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux into for-linus
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 97a98fc07cfc..f64471e95e33 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -2617,32 +2617,24 @@ static int key_search(struct extent_buffer *b, struct btrfs_key *key, return 0; } -int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *found_path, +int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path, u64 iobjectid, u64 ioff, u8 key_type, struct btrfs_key *found_key) { int ret; struct btrfs_key key; struct extent_buffer *eb; - struct btrfs_path *path; + + ASSERT(path); + ASSERT(found_key); key.type = key_type; key.objectid = iobjectid; key.offset = ioff; - if (found_path == NULL) { - path = btrfs_alloc_path(); - if (!path) - return -ENOMEM; - } else - path = found_path; - ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); - if ((ret < 0) || (found_key == NULL)) { - if (path != found_path) - btrfs_free_path(path); + if (ret < 0) return ret; - } eb = path->nodes[0]; if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { |