[lustre-devel] [PATCH 06/40] lustre: quota: enforce project quota for root

James Simmons <[email protected]>
Newsgroups org.lustre.lists.lustre-devel
Message-ID <[email protected]>
From: Sergey Cheremencev <[email protected]>

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 <[email protected]>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49460
Reviewed-by: Hongchao Zhang <[email protected]>
Reviewed-by: Sebastien Buisson <[email protected]>
Reviewed-by: Oleg Drokin <[email protected]>
Reviewed-by: Andreas Dilger <[email protected]>
Signed-off-by: James Simmons <[email protected]>
---
 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

_______________________________________________
lustre-devel mailing list
[email protected]
http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.