On 12/28/2012 08:03 PM, David Sterba wrote: > On Fri, Dec 28, 2012 at 11:42:40AM +0800, Jeff Liu wrote: >> +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) > > I would expect a message if this happens, similar to the 'get_fslabel' > one, otherwise it's difficult to find out the reason. That's sounds make sense. > >> + 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); > > Do we need to reserve 1 unit here? This does not touch any > non-superblock metadata, modifies superblock in place. This could lead > to an ENOSPC (changing label on a full fs), altghouh it need not happen. Don't need, I can not recalled why I did that before, will fix it.
Thanks, -Jeff > >> + if (IS_ERR(trans)) { >> + ret = PTR_ERR(trans); >> + goto out_unlock; >> + } >> + >> + strcpy(super_block->label, label); >> + ret = btrfs_end_transaction(trans, root); >> + >> +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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html