OSDN Git Service

btrfs: hold a root ref in btrfs_get_dentry
authorJosef Bacik <josef@toxicpanda.com>
Fri, 24 Jan 2020 14:32:29 +0000 (09:32 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:27 +0000 (17:01 +0100)
Looking up the inode we need to search the root, make sure we hold a
reference on that root while we're doing the lookup.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/export.c

index 08cd8c4..eba6c6d 100644 (file)
@@ -82,12 +82,17 @@ static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
                err = PTR_ERR(root);
                goto fail;
        }
+       if (!btrfs_grab_fs_root(root)) {
+               err = -ENOENT;
+               goto fail;
+       }
 
        key.objectid = objectid;
        key.type = BTRFS_INODE_ITEM_KEY;
        key.offset = 0;
 
        inode = btrfs_iget(sb, &key, root);
+       btrfs_put_fs_root(root);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto fail;