Re: [PATCH 07/17] NFSD: replace __get_free_page() with kmalloc() in nfsd_buffered_readdir()

Jeff Layton <[email protected]> Sat, 23 May 2026 14:45:01 -0400
Newsgroups org.kernel.vger.linux-nilfs,dev.linux.lists.ocfs2-devel,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kvack.linux-mm
Message-ID <[email protected]>
On Sat, 2026-05-23 at 20:54 +0300, Mike Rapoport (Microsoft) wrote:
> nfsd_buffered_readdir() allocates a staging buffer with __get_free_page()=
.
>=20
> kmalloc() is a better API for such use and it also provides better
> scalability and more debugging possibilities.
>=20
> Replace use of __get_free_page() with kmalloc().
>=20
> Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
> ---
>  fs/nfsd/vfs.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>=20
> diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
> index eafdf7b7890f..c99e54b23cd9 100644
> --- a/fs/nfsd/vfs.c
> +++ b/fs/nfsd/vfs.c
> @@ -2407,7 +2407,7 @@ static __be32 nfsd_buffered_readdir(struct file *fi=
le, struct svc_fh *fhp,
>  	loff_t offset;
>  	struct readdir_data buf =3D {
>  		.ctx.actor =3D nfsd_buffered_filldir,
> -		.dirent =3D (void *)__get_free_page(GFP_KERNEL)
> +		.dirent =3D kmalloc(PAGE_SIZE, GFP_KERNEL)
>  	};
> =20
>  	if (!buf.dirent)
> @@ -2458,7 +2458,7 @@ static __be32 nfsd_buffered_readdir(struct file *fi=
le, struct svc_fh *fhp,
>  		offset =3D vfs_llseek(file, 0, SEEK_CUR);
>  	}
> =20
> -	free_page((unsigned long)(buf.dirent));
> +	kfree((buf.dirent));

nit: Don't need double parenthesis here

> =20
>  	if (host_err)
>  		return nfserrno(host_err);

The rest seems ok though.

Acked-by: Jeff Layton <[email protected]>