nfs: Replace kmap() with kmap_local_page()
authorFabio M. De Francesco <fmdefrancesco@gmail.com>
Tue, 28 Jun 2022 18:24:26 +0000 (20:24 +0200)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 12 Jul 2022 14:06:18 +0000 (10:06 -0400)
The use of kmap() is being deprecated in favor of kmap_local_page().

With kmap_local_page(), the mapping is per thread, CPU local and not
globally visible. Furthermore, the mapping can be acquired from any context
(including interrupts).

Therefore, use kmap_local_page() in nfs_do_filldir() because this mapping
is per thread, CPU local, and not globally visible.

Suggested-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/dir.c

index d9d277d..7b22302 100644 (file)
@@ -1084,7 +1084,7 @@ static void nfs_do_filldir(struct nfs_readdir_descriptor *desc,
        struct nfs_cache_array *array;
        unsigned int i;
 
-       array = kmap(desc->page);
+       array = kmap_local_page(desc->page);
        for (i = desc->cache_entry_index; i < array->size; i++) {
                struct nfs_cache_array_entry *ent;
 
@@ -1110,7 +1110,7 @@ static void nfs_do_filldir(struct nfs_readdir_descriptor *desc,
        if (array->page_is_eof)
                desc->eof = !desc->eob;
 
-       kunmap(desc->page);
+       kunmap_local(array);
        dfprintk(DIRCACHE, "NFS: nfs_do_filldir() filling ended @ cookie %llu\n",
                        (unsigned long long)desc->dir_cookie);
 }