btrfs-progs: quota: add support for squota
Add a new option --simple to 'btrfs quota enable'. If set, this enables simple quotas instead of full qgroups by using the new ioctl command value. Signed-off-by: Boris Burkov <boris@bur.io> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
4a0e715d78
commit
b3104bfeda
37
cmds/quota.c
37
cmds/quota.c
|
@ -34,17 +34,13 @@ static const char * const quota_cmd_group_usage[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static int quota_ctl(int cmd, int argc, char **argv)
|
||||
static int quota_ctl(int cmd, char *path)
|
||||
{
|
||||
int ret = 0;
|
||||
int fd;
|
||||
char *path = argv[1];
|
||||
struct btrfs_ioctl_quota_ctl_args args;
|
||||
DIR *dirstream = NULL;
|
||||
|
||||
if (check_argc_exact(argc, 2))
|
||||
return -1;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
args.cmd = cmd;
|
||||
|
||||
|
@ -67,17 +63,40 @@ static const char * const cmd_quota_enable_usage[] = {
|
|||
"Any data already present on the filesystem will not count towards",
|
||||
"the space usage numbers. It is recommended to enable quota for a",
|
||||
"filesystem before writing any data to it.",
|
||||
"",
|
||||
"-s|--simple simple qgroups account ownership by extent lifetime rather than backref walks",
|
||||
NULL
|
||||
};
|
||||
|
||||
static int cmd_quota_enable(const struct cmd_struct *cmd, int argc, char **argv)
|
||||
{
|
||||
int ret;
|
||||
int ctl_cmd = BTRFS_QUOTA_CTL_ENABLE;
|
||||
|
||||
clean_args_no_options(cmd, argc, argv);
|
||||
optind = 0;
|
||||
while (1) {
|
||||
static const struct option long_options[] = {
|
||||
{"simple", no_argument, NULL, 's'},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
int c;
|
||||
|
||||
ret = quota_ctl(BTRFS_QUOTA_CTL_ENABLE, argc, argv);
|
||||
c = getopt_long(argc, argv, "s", long_options, NULL);
|
||||
if (c < 0)
|
||||
break;
|
||||
|
||||
switch (c) {
|
||||
case 's':
|
||||
ctl_cmd = BTRFS_QUOTA_CTL_ENABLE_SIMPLE_QUOTA;
|
||||
break;
|
||||
default:
|
||||
usage_unknown_option(cmd, argv);
|
||||
}
|
||||
}
|
||||
if (check_argc_exact(argc - optind, 1))
|
||||
return -1;
|
||||
|
||||
ret = quota_ctl(ctl_cmd, argv[optind]);
|
||||
if (ret < 0)
|
||||
usage(cmd, 1);
|
||||
return ret;
|
||||
|
@ -97,8 +116,10 @@ static int cmd_quota_disable(const struct cmd_struct *cmd,
|
|||
|
||||
clean_args_no_options(cmd, argc, argv);
|
||||
|
||||
ret = quota_ctl(BTRFS_QUOTA_CTL_DISABLE, argc, argv);
|
||||
if (check_argc_exact(argc, 2))
|
||||
return -1;
|
||||
|
||||
ret = quota_ctl(BTRFS_QUOTA_CTL_DISABLE, argv[1]);
|
||||
if (ret < 0)
|
||||
usage(cmd, 1);
|
||||
return ret;
|
||||
|
|
|
@ -787,9 +787,11 @@ struct btrfs_ioctl_get_dev_stats {
|
|||
};
|
||||
_static_assert(sizeof(struct btrfs_ioctl_get_dev_stats) == 1032);
|
||||
|
||||
/* Command values for btrfs_ioctl_quota_ctl_args::cmd. */
|
||||
#define BTRFS_QUOTA_CTL_ENABLE 1
|
||||
#define BTRFS_QUOTA_CTL_DISABLE 2
|
||||
#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3
|
||||
#define BTRFS_QUOTA_CTL_ENABLE_SIMPLE_QUOTA 4
|
||||
struct btrfs_ioctl_quota_ctl_args {
|
||||
__u64 cmd;
|
||||
__u64 status;
|
||||
|
|
Loading…
Reference in New Issue