[lustre-devel] [PATCH 06/40] lustre: quota: enforce project quota for root
James Simmons
jsimmons at infradead.org
Sun Apr 9 05:12:46 PDT 2023
From: Sergey Cheremencev <scherementsev at ddn.com>
Patch adds an option to enforce project quotas for root.
It is disabled by default, to enable set
osd-ldiskfs.*.quota_slave.root_prj_enable to 1
at each target where you need this option.
WC-bug-id: https://jira.whamcloud.com/browse/LU-16415
Lustre-commit: f147655c33ea61450 ("LU-16415 quota: enforce project quota for root")
Signed-off-by: Sergey Cheremencev <scherementsev at ddn.com>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49460
Reviewed-by: Hongchao Zhang <hongchao at whamcloud.com>
Reviewed-by: Sebastien Buisson <sbuisson at ddn.com>
Reviewed-by: Oleg Drokin <green at whamcloud.com>
Reviewed-by: Andreas Dilger <adilger at whamcloud.com>
Signed-off-by: James Simmons <jsimmons at infradead.org>
---
fs/lustre/include/obd.h | 8 ++++----
fs/lustre/osc/osc_cache.c | 2 +-
fs/lustre/osc/osc_quota.c | 1 +
include/uapi/linux/lustre/lustre_idl.h | 2 ++
4 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/fs/lustre/include/obd.h b/fs/lustre/include/obd.h
index a980bf0..54bef2e 100644
--- a/fs/lustre/include/obd.h
+++ b/fs/lustre/include/obd.h
@@ -208,8 +208,10 @@ struct client_obd {
unsigned int cl_checksum:1, /* 0 = disabled, 1 = enabled */
cl_checksum_dump:1, /* same */
cl_ocd_grant_param:1,
- cl_lsom_update:1; /* send LSOM updates */
- /* supported checksum types that are worked out at connect time */
+ cl_lsom_update:1, /* send LSOM updates */
+ cl_root_squash:1, /* if root squash enabled*/
+ /* check prj quota for root */
+ cl_root_prjquota:1;
enum lustre_sec_part cl_sp_me;
enum lustre_sec_part cl_sp_to;
struct sptlrpc_flavor cl_flvr_mgc; /* fixed flavor of mgc->mgs */
@@ -233,8 +235,6 @@ struct client_obd {
struct list_head cl_grant_chain;
time64_t cl_grant_shrink_interval; /* seconds */
- int cl_root_squash; /* if root squash enabled*/
-
/* A chunk is an optimal size used by osc_extent to determine
* the extent size. A chunk is max(PAGE_SIZE, OST block size)
*/
diff --git a/fs/lustre/osc/osc_cache.c b/fs/lustre/osc/osc_cache.c
index b339aef..dddf98f 100644
--- a/fs/lustre/osc/osc_cache.c
+++ b/fs/lustre/osc/osc_cache.c
@@ -2366,7 +2366,7 @@ int osc_queue_async_io(const struct lu_env *env, struct cl_io *io,
* we should bypass quota
*/
if ((!oio->oi_cap_sys_resource ||
- cli->cl_root_squash) &&
+ cli->cl_root_squash || cli->cl_root_prjquota) &&
!io->ci_noquota) {
struct cl_object *obj;
struct cl_attr *attr;
diff --git a/fs/lustre/osc/osc_quota.c b/fs/lustre/osc/osc_quota.c
index 708ad3c..c48a89f3 100644
--- a/fs/lustre/osc/osc_quota.c
+++ b/fs/lustre/osc/osc_quota.c
@@ -120,6 +120,7 @@ int osc_quota_setdq(struct client_obd *cli, u64 xid, const unsigned int qid[],
mutex_lock(&cli->cl_quota_mutex);
cli->cl_root_squash = !!(flags & OBD_FL_ROOT_SQUASH);
+ cli->cl_root_prjquota = !!(flags & OBD_FL_ROOT_PRJQUOTA);
/* still mark the quots is running out for the old request, because it
* could be processed after the new request at OST, the side effect is
* the following request will be processed synchronously, but it will
diff --git a/include/uapi/linux/lustre/lustre_idl.h b/include/uapi/linux/lustre/lustre_idl.h
index 99735fc..b4185a7 100644
--- a/include/uapi/linux/lustre/lustre_idl.h
+++ b/include/uapi/linux/lustre/lustre_idl.h
@@ -961,6 +961,7 @@ enum obdo_flags {
OBD_FL_FLUSH = 0x00200000, /* flush pages on the OST */
OBD_FL_SHORT_IO = 0x00400000, /* short io request */
OBD_FL_ROOT_SQUASH = 0x00800000, /* root squash */
+ OBD_FL_ROOT_PRJQUOTA = 0x01000000, /* check prj quota for root */
/* OBD_FL_LOCAL_MASK = 0xF0000000, was local-only flags until 2.10 */
/*
@@ -1250,6 +1251,7 @@ struct hsm_state_set {
* it to sync quickly
*/
#define OBD_BRW_OVER_PRJQUOTA 0x8000 /* Running out of project quota */
+#define OBD_BRW_ROOT_PRJQUOTA 0x10000 /* check project quota for root */
#define OBD_BRW_RDMA_ONLY 0x20000 /* RPC contains RDMA-only pages*/
#define OBD_BRW_SYS_RESOURCE 0x40000 /* page has CAP_SYS_RESOURCE */
--
1.8.3.1
More information about the lustre-devel
mailing list