Btrfs: fix error check of btrfs_lookup_dentry()
Clean up btrfs_lookup_dentry() to never return NULL, but PTR_ERR(-ENOENT) instead. This keeps the return value convention consistent. Callers who use btrfs_lookup_dentry() require a trivial update. create_snapshot() in particular looks like it can also lose a BUG_ON(!inode) which is not really needed - there seems less harm in returning ENOENT to userspace at that point in the stack than there is to crash the machine. Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:

committed by
Chris Mason

parent
7835776635
commit
5662344b3c
@@ -393,6 +393,7 @@ static noinline int create_subvol(struct inode *dir,
|
||||
struct btrfs_root *new_root;
|
||||
struct btrfs_block_rsv block_rsv;
|
||||
struct timespec cur_time = CURRENT_TIME;
|
||||
struct inode *inode;
|
||||
int ret;
|
||||
int err;
|
||||
u64 objectid;
|
||||
@@ -554,8 +555,14 @@ fail:
|
||||
if (err && !ret)
|
||||
ret = err;
|
||||
|
||||
if (!ret)
|
||||
d_instantiate(dentry, btrfs_lookup_dentry(dir, dentry));
|
||||
if (!ret) {
|
||||
inode = btrfs_lookup_dentry(dir, dentry);
|
||||
if (IS_ERR(inode)) {
|
||||
ret = PTR_ERR(inode);
|
||||
goto out;
|
||||
}
|
||||
d_instantiate(dentry, inode);
|
||||
}
|
||||
out:
|
||||
btrfs_subvolume_release_metadata(root, &block_rsv, qgroup_reserved);
|
||||
return ret;
|
||||
@@ -643,7 +650,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
|
||||
ret = PTR_ERR(inode);
|
||||
goto fail;
|
||||
}
|
||||
BUG_ON(!inode);
|
||||
|
||||
d_instantiate(dentry, inode);
|
||||
ret = 0;
|
||||
fail:
|
||||
|
Reference in New Issue
Block a user