diff options
Diffstat (limited to 'fs/btrfs/ioctl.c')
| -rw-r--r-- | fs/btrfs/ioctl.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 7c07fe26b7c..ffb48d6c543 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -373,6 +373,10 @@ static noinline int create_subvol(struct btrfs_root *root,  	inode_item->nbytes = cpu_to_le64(root->leafsize);  	inode_item->mode = cpu_to_le32(S_IFDIR | 0755); +	root_item.flags = 0; +	root_item.byte_limit = 0; +	inode_item->flags = cpu_to_le64(BTRFS_INODE_ROOT_ITEM_INIT); +  	btrfs_set_root_bytenr(&root_item, leaf->start);  	btrfs_set_root_generation(&root_item, trans->transid);  	btrfs_set_root_level(&root_item, 0); @@ -2283,7 +2287,7 @@ long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)  	struct btrfs_ioctl_space_info space;  	struct btrfs_ioctl_space_info *dest;  	struct btrfs_ioctl_space_info *dest_orig; -	struct btrfs_ioctl_space_info *user_dest; +	struct btrfs_ioctl_space_info __user *user_dest;  	struct btrfs_space_info *info;  	u64 types[] = {BTRFS_BLOCK_GROUP_DATA,  		       BTRFS_BLOCK_GROUP_SYSTEM, @@ -2436,8 +2440,10 @@ static noinline long btrfs_ioctl_start_sync(struct file *file, void __user *argp  		return PTR_ERR(trans);  	transid = trans->transid;  	ret = btrfs_commit_transaction_async(trans, root, 0); -	if (ret) +	if (ret) { +		btrfs_end_transaction(trans, root);  		return ret; +	}  	if (argp)  		if (copy_to_user(argp, &transid, sizeof(transid))) | 
