diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index c3a77faed5d5aa2823126a2d92714bcdec8a1f4d..c8d287fff7bcaee9df2ddae8405ff466a2c72ead 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6092,7 +6092,7 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, static int btrfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) { - struct btrfs_trans_handle *trans; + struct btrfs_trans_handle *trans = NULL; struct btrfs_root *root = BTRFS_I(dir)->root; struct inode *inode = old_dentry->d_inode; u64 index; @@ -6118,6 +6118,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, trans = btrfs_start_transaction(root, 5); if (IS_ERR(trans)) { err = PTR_ERR(trans); + trans = NULL; goto fail; } @@ -6151,9 +6152,10 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, btrfs_log_new_name(trans, inode, NULL, parent); } - btrfs_end_transaction(trans, root); btrfs_balance_delayed_items(root); fail: + if (trans) + btrfs_end_transaction(trans, root); if (drop_inode) { inode_dec_link_count(inode); iput(inode);