From: Josef Bacik Date: Wed, 20 Nov 2019 16:00:25 +0000 (-0800) Subject: btrfs: hold a ref on the root in __btrfs_run_defrag_inode X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a25a86af15ca8da62f707ed43f5ec6e4a115b8ef;p=linux btrfs: hold a ref on the root in __btrfs_run_defrag_inode We are looking up an arbitrary inode, we need to hold a ref on the root while we're doing this. Signed-off-by: Josef Bacik --- diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 8baa1b44d514..f8e16f44a970 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -292,11 +292,16 @@ static int __btrfs_run_defrag_inode(struct btrfs_fs_info *fs_info, ret = PTR_ERR(inode_root); goto cleanup; } + if (!btrfs_grab_fs_root(inode_root)) { + ret = -ENOENT; + goto cleanup; + } key.objectid = defrag->ino; key.type = BTRFS_INODE_ITEM_KEY; key.offset = 0; inode = btrfs_iget(fs_info->sb, &key, inode_root); + btrfs_put_fs_root(inode_root); if (IS_ERR(inode)) { ret = PTR_ERR(inode); goto cleanup;