Message ID | 20230503172411.3356-1-fmdefrancesco@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | NFS: Convert kmap_atomic() to kmap_local_folio() | expand |
On Wed, May 3, 2023 at 1:24 PM Fabio M. De Francesco <fmdefrancesco@gmail.com> wrote: > > kmap_atomic() is deprecated in favor of kmap_local_{folio,page}(). > > Therefore, replace kmap_atomic() with kmap_local_folio() in > nfs_readdir_folio_array_append(). > > kmap_atomic() disables page-faults and preemption (the latter only for > !PREEMPT_RT kernels), However, the code within the mapping/un-mapping in > nfs_readdir_folio_array_append() does not depend on the above-mentioned > side effects. > > Therefore, a mere replacement of the old API with the new one is all that > is required (i.e., there is no need to explicitly add any calls to > pagefault_disable() and/or preempt_disable()). > > Tested with (x)fstests in a QEMU/KVM x86_32 VM, 6GB RAM, booting a kernel > with HIGHMEM64GB enabled. Thanks Fabio! Looks like I missed this when I wrote: ec108d3cc766 ("NFS: Convert readdir page array functions to use a folio") I have it applied now. Anna > > Cc: Ira Weiny <ira.weiny@intel.com> > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> > --- > > "./check -nfs -g quick", with or without this patch, always fails the > same 12 tests of 559: generic/053 generic/099 generic/105 generic/193 > generic/294 generic/318 generic/319 generic/444 generic/465 generic/528 > generic/529 generic/531. > > Therefore, I think I can say that this patch does not introduce any > regressions. > > fs/nfs/dir.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c > index 8257de6dba45..8fa8ae49d6cd 100644 > --- a/fs/nfs/dir.c > +++ b/fs/nfs/dir.c > @@ -317,7 +317,7 @@ static int nfs_readdir_folio_array_append(struct folio *folio, > > name = nfs_readdir_copy_name(entry->name, entry->len); > > - array = kmap_atomic(folio_page(folio, 0)); > + array = kmap_local_folio(folio, 0); > if (!name) > goto out; > ret = nfs_readdir_array_can_expand(array); > @@ -340,7 +340,7 @@ static int nfs_readdir_folio_array_append(struct folio *folio, > nfs_readdir_array_set_eof(array); > out: > *cookie = array->last_cookie; > - kunmap_atomic(array); > + kunmap_local(array); > return ret; > } > > -- > 2.40.0 >
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 8257de6dba45..8fa8ae49d6cd 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -317,7 +317,7 @@ static int nfs_readdir_folio_array_append(struct folio *folio, name = nfs_readdir_copy_name(entry->name, entry->len); - array = kmap_atomic(folio_page(folio, 0)); + array = kmap_local_folio(folio, 0); if (!name) goto out; ret = nfs_readdir_array_can_expand(array); @@ -340,7 +340,7 @@ static int nfs_readdir_folio_array_append(struct folio *folio, nfs_readdir_array_set_eof(array); out: *cookie = array->last_cookie; - kunmap_atomic(array); + kunmap_local(array); return ret; }
kmap_atomic() is deprecated in favor of kmap_local_{folio,page}(). Therefore, replace kmap_atomic() with kmap_local_folio() in nfs_readdir_folio_array_append(). kmap_atomic() disables page-faults and preemption (the latter only for !PREEMPT_RT kernels), However, the code within the mapping/un-mapping in nfs_readdir_folio_array_append() does not depend on the above-mentioned side effects. Therefore, a mere replacement of the old API with the new one is all that is required (i.e., there is no need to explicitly add any calls to pagefault_disable() and/or preempt_disable()). Tested with (x)fstests in a QEMU/KVM x86_32 VM, 6GB RAM, booting a kernel with HIGHMEM64GB enabled. Cc: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> --- "./check -nfs -g quick", with or without this patch, always fails the same 12 tests of 559: generic/053 generic/099 generic/105 generic/193 generic/294 generic/318 generic/319 generic/444 generic/465 generic/528 generic/529 generic/531. Therefore, I think I can say that this patch does not introduce any regressions. fs/nfs/dir.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)