[Devel] [PATCH RHEL8 COMMIT] ms/silence nfscache allocation warnings with kvzalloc
Konstantin Khorenko
khorenko at virtuozzo.com
Thu May 6 00:59:13 MSK 2021
The commit is pushed to "branch-rh8-4.18.0-240.1.1.vz8.5.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh8-4.18.0-240.1.1.vz8.5.26
------>
commit af19368f1d81bb937800aca32a2a02d768537b6e
Author: Rik van Riel <riel at surriel.com>
Date: Thu May 6 00:59:13 2021 +0300
ms/silence nfscache allocation warnings with kvzalloc
Currently nfsd_reply_cache_init attempts hash table allocation through
kmalloc, and manually falls back to vzalloc if that fails. This makes
the code a little larger than needed, and creates a significant amount
of serial console spam if you have enough systems.
Switching to kvzalloc gets rid of the allocation warnings, and makes
the code a little cleaner too as a side effect.
Freeing of nn->drc_hashtbl is already done using kvfree currently.
Signed-off-by: Rik van Riel <riel at surriel.com>
Signed-off-by: J. Bruce Fields <bfields at redhat.com>
eshatokhin@:
This patch from mainline kernel (commit 8c38b705b4f4) addresses the same
issue as the commit fb1f6c63b271 "nfsd: use kvzalloc() to allocate memory
for drc_hashtbl" in VZ7, prepared by Oleg Babin in the scope of
https://jira.sw.ru/browse/PSBM-84234. That patch did not make it into
the mainline kernel for some reason, so I picked the fix from mainline
instead.
>From the description of commit fb1f6c63b271 in VZ7:
=============
The original code uses vzalloc() directly as a fallback path if
the allocation with kcalloc() failed. But in this case a warning
about memory allocation failure will be generated even in case
when the fallback path succeeds. Also kcalloc() can involve retries
and OOM killer which is undesireable.
kvzalloc() handles all these aspects properly.
[...]
The size of drc_hashtbl depends on totalram_pages and totalhigh_pages
mm variables and limited to 96k which means 5th memory order.
Use kvzalloc() for drc_hashtbl allocation to fallback to vmalloc()
in case of high order page is not available at the moment.
=============
Done in the scope of https://jira.sw.ru/browse/PSBM-127830.
Cherry-picked from ms commit ("8c38b705b4f4 silence nfscache allocation warnings
with kvzalloc").
Signed-off-by: Evgenii Shatokhin <eshatokhin at virtuozzo.com>
---
fs/nfsd/nfscache.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
index f3595fcead23..3bacc9f82f57 100644
--- a/fs/nfsd/nfscache.c
+++ b/fs/nfsd/nfscache.c
@@ -173,14 +173,10 @@ int nfsd_reply_cache_init(struct nfsd_net *nn)
if (status)
goto out_nomem;
- nn->drc_hashtbl = kcalloc(hashsize,
- sizeof(*nn->drc_hashtbl), GFP_KERNEL);
- if (!nn->drc_hashtbl) {
- nn->drc_hashtbl = vzalloc(array_size(hashsize,
- sizeof(*nn->drc_hashtbl)));
- if (!nn->drc_hashtbl)
- goto out_shrinker;
- }
+ nn->drc_hashtbl = kvzalloc(array_size(hashsize,
+ sizeof(*nn->drc_hashtbl)), GFP_KERNEL);
+ if (!nn->drc_hashtbl)
+ goto out_shrinker;
for (i = 0; i < hashsize; i++) {
INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head);
More information about the Devel
mailing list