@@ -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)
*/
@@ -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;
@@ -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
@@ -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 */