btrfs: join DEV_STATS ioctls to one
Commit c11d2c236c
(Btrfs: add ioctl to get and reset the device
stats) introduced two ioctls doing almost the same thing distinguished
by just the ioctl number which encodes "do reset after read". I have
suggested
http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg16604.html
to implement it via the ioctl args. This hasn't happen, and I think we
should use a more clean way to pass flags and should not waste ioctl
numbers.
CC: Stefan Behrens <sbehrens@giantdisaster.de>
Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
committed by
Chris Mason
parent
a43a211133
commit
b27f7c0c15
@@ -3065,19 +3065,21 @@ static long btrfs_ioctl_scrub_progress(struct btrfs_root *root,
|
||||
}
|
||||
|
||||
static long btrfs_ioctl_get_dev_stats(struct btrfs_root *root,
|
||||
void __user *arg, int reset_after_read)
|
||||
void __user *arg)
|
||||
{
|
||||
struct btrfs_ioctl_get_dev_stats *sa;
|
||||
int ret;
|
||||
|
||||
if (reset_after_read && !capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
sa = memdup_user(arg, sizeof(*sa));
|
||||
if (IS_ERR(sa))
|
||||
return PTR_ERR(sa);
|
||||
|
||||
ret = btrfs_get_dev_stats(root, sa, reset_after_read);
|
||||
if ((sa->flags & BTRFS_DEV_STATS_RESET) && !capable(CAP_SYS_ADMIN)) {
|
||||
kfree(sa);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
ret = btrfs_get_dev_stats(root, sa);
|
||||
|
||||
if (copy_to_user(arg, sa, sizeof(*sa)))
|
||||
ret = -EFAULT;
|
||||
@@ -3475,9 +3477,7 @@ long btrfs_ioctl(struct file *file, unsigned int
|
||||
case BTRFS_IOC_BALANCE_PROGRESS:
|
||||
return btrfs_ioctl_balance_progress(root, argp);
|
||||
case BTRFS_IOC_GET_DEV_STATS:
|
||||
return btrfs_ioctl_get_dev_stats(root, argp, 0);
|
||||
case BTRFS_IOC_GET_AND_RESET_DEV_STATS:
|
||||
return btrfs_ioctl_get_dev_stats(root, argp, 1);
|
||||
return btrfs_ioctl_get_dev_stats(root, argp);
|
||||
}
|
||||
|
||||
return -ENOTTY;
|
||||
|
Reference in New Issue
Block a user