From 3affbd9749792375b50ad50a335e053917ab1d04 Mon Sep 17 00:00:00 2001
From: Omar Sandoval <osandov@fb.com>
Date: Tue, 10 Aug 2021 23:24:38 +0200
Subject: [PATCH] Require --clowntown for quota enable
---
cmds/quota.c | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
diff --git a/cmds/quota.c b/cmds/quota.c
index 246dd277..07380726 100644
--- a/cmds/quota.c
+++ b/cmds/quota.c
@@ -16,6 +16,7 @@
* Boston, MA 021110-1307, USA.
*/
+#include <getopt.h>
#include <sys/ioctl.h>
#include <unistd.h>
@@ -36,11 +37,11 @@ static int quota_ctl(int cmd, int argc, char **argv)
{
int ret = 0;
int fd;
- char *path = argv[1];
+ char *path = argv[optind];
struct btrfs_ioctl_quota_ctl_args args;
DIR *dirstream = NULL;
- if (check_argc_exact(argc, 2))
+ if (check_argc_exact(argc - optind, 1))
return -1;
memset(&args, 0, sizeof(args));
@@ -60,8 +61,11 @@ static int quota_ctl(int cmd, int argc, char **argv)
}
static const char * const cmd_quota_enable_usage[] = {
- "btrfs quota enable <path>",
+ "btrfs quota enable --clowntown <path>",
"Enable subvolume quota support for a filesystem.",
+ "FB-ONLY: Btrfs quotas are not supported at Facebook, so you must use",
+ "the --clowntown flag to enable quotas.",
+ "",
"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.",
@@ -71,10 +75,31 @@ static const char * const cmd_quota_enable_usage[] = {
static int cmd_quota_enable(const struct cmd_struct *cmd, int argc, char **argv)
{
int ret;
+ bool clowntown = false;
- clean_args_no_options(cmd, argc, argv);
+ optind = 0;
+ while (1) {
+ int c;
+ static const struct option long_options[] = {
+ { "clowntown", no_argument, NULL, 'c'},
+ { NULL, 0, NULL, 0 }
+ };
+ c = getopt_long(argc, argv, "", long_options, NULL);
+ if (c < 0)
+ break;
+ switch (c) {
+ case 'c':
+ clowntown = true;
+ break;
+ default:
+ usage(cmd);
+ }
+ }
- ret = quota_ctl(BTRFS_QUOTA_CTL_ENABLE, argc, argv);
+ if (clowntown)
+ ret = quota_ctl(BTRFS_QUOTA_CTL_ENABLE, argc, argv);
+ else
+ ret = -1;
if (ret < 0)
usage(cmd);
--
2.31.1