diff options
Diffstat (limited to 'fs/btrfs/inode.c')
| -rw-r--r-- | fs/btrfs/inode.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 5dbc07a7c220..018c2a6108f2 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6488,7 +6488,7 @@ out_unlock_inode:  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 = d_inode(old_dentry);  	u64 index; @@ -6514,6 +6514,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;  	} @@ -6547,9 +6548,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);  | 
