From: Josef Bacik Date: Fri, 24 Jan 2020 14:32:30 +0000 (-0500) Subject: btrfs: hold a ref on the root in __btrfs_run_defrag_inode X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=02162a0265eb56742442ef42c58db8739ddd9b94;p=linux.git 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 Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 1bc7665f8ff0c..27237bbaad654 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;