Re: [RFC PATCH V6 2/2] Btrfs: Add a new ioctl to change the label of a mounted file system
From: Jeff Liu <hidden>
Date: 2012-12-20 08:19:29
On 12/19/2012 10:21 PM, David Sterba wrote:
On Tue, Dec 18, 2012 at 11:06:07AM +0800, Jeff Liu wrote:quoted
+static int btrfs_ioctl_set_fslabel(struct file *file, void __user *arg) +{ + struct btrfs_root *root = BTRFS_I(fdentry(file)->d_inode)->root; + struct btrfs_super_block *super_block = root->fs_info->super_copy; + struct btrfs_trans_handle *trans; + char label[BTRFS_LABEL_SIZE]; + int ret; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + if (copy_from_user(label, arg, sizeof(label))) + return -EFAULT; + + if (strnlen(label, BTRFS_LABEL_SIZE) == BTRFS_LABEL_SIZE) + return -EINVAL; + + ret = mnt_want_write_file(file); + if (ret) + return ret; + + mutex_lock(&root->fs_info->volume_mutex); + trans = btrfs_start_transaction(root, 1); + if (IS_ERR(trans)) { + ret = PTR_ERR(trans); + goto out_unlock; + } + + strcpy(super_block->label, label); + btrfs_end_transaction(trans, root);If this fails, eg. with EIO, it will not be reported back to the user ret = btrfs_end_transaction(trans, root); should fix it.
Thank you, I'll send out a revised version after a little while. -Jeff
quoted
+ +out_unlock: + mutex_unlock(&root->fs_info->volume_mutex); + mnt_drop_write_file(file); + return ret; +}-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html