NFSv4: Charge NFSv4 open state trackers to kmemcg
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 29 Jan 2022 18:42:01 +0000 (13:42 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 25 Feb 2022 23:50:12 +0000 (18:50 -0500)
Allow kmemcg to limit the number of NFSv4 delegation, lock and open
state trackers.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/delegation.c
fs/nfs/nfs4state.c

index 7c9eb67..5c97cad 100644 (file)
@@ -439,7 +439,7 @@ int nfs_inode_set_delegation(struct inode *inode, const struct cred *cred,
        struct nfs_delegation *freeme = NULL;
        int status = 0;
 
-       delegation = kmalloc(sizeof(*delegation), GFP_NOFS);
+       delegation = kmalloc(sizeof(*delegation), GFP_KERNEL_ACCOUNT);
        if (delegation == NULL)
                return -ENOMEM;
        nfs4_stateid_copy(&delegation->stateid, stateid);
index 0f48186..87cb864 100644 (file)
@@ -667,7 +667,7 @@ nfs4_alloc_open_state(void)
 {
        struct nfs4_state *state;
 
-       state = kzalloc(sizeof(*state), GFP_NOFS);
+       state = kzalloc(sizeof(*state), GFP_KERNEL_ACCOUNT);
        if (!state)
                return NULL;
        refcount_set(&state->count, 1);
@@ -870,14 +870,15 @@ static struct nfs4_lock_state *nfs4_alloc_lock_state(struct nfs4_state *state, f
        struct nfs4_lock_state *lsp;
        struct nfs_server *server = state->owner->so_server;
 
-       lsp = kzalloc(sizeof(*lsp), GFP_NOFS);
+       lsp = kzalloc(sizeof(*lsp), GFP_KERNEL_ACCOUNT);
        if (lsp == NULL)
                return NULL;
        nfs4_init_seqid_counter(&lsp->ls_seqid);
        refcount_set(&lsp->ls_count, 1);
        lsp->ls_state = state;
        lsp->ls_owner = fl_owner;
-       lsp->ls_seqid.owner_id = ida_simple_get(&server->lockowner_id, 0, 0, GFP_NOFS);
+       lsp->ls_seqid.owner_id = ida_simple_get(&server->lockowner_id,
+                                               0, 0, GFP_KERNEL_ACCOUNT);
        if (lsp->ls_seqid.owner_id < 0)
                goto out_free;
        INIT_LIST_HEAD(&lsp->ls_locks);