2014-06-13 09:33:16

by Kinglong Mee

[permalink] [raw]
Subject: [PATCH] NFSD: fix bug for readdir of pseudofs

Commit 561f0ed498ca (nfsd4: allow large readdirs) introduces a bug
about readdir the root of pseudofs.

Call xdr_truncate_encode() revert encoded name when skipping.

Signed-off-by: Kinglong Mee <[email protected]>
---
fs/nfsd/nfs4xdr.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 53ca43c..30913c8 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2687,6 +2687,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
nfserr = nfserr_toosmall;
goto fail;
case nfserr_noent:
+ xdr_truncate_encode(xdr, start_offset);
goto skip_entry;
default:
/*
--
1.9.3



2014-06-17 20:57:40

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH] NFSD: fix bug for readdir of pseudofs

On Fri, Jun 13, 2014 at 05:32:42PM +0800, Kinglong Mee wrote:
> Commit 561f0ed498ca (nfsd4: allow large readdirs) introduces a bug
> about readdir the root of pseudofs.
>
> Call xdr_truncate_encode() revert encoded name when skipping.

Thanks for the fix! Applying for 3.16.

--b.

>
> Signed-off-by: Kinglong Mee <[email protected]>
> ---
> fs/nfsd/nfs4xdr.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 53ca43c..30913c8 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -2687,6 +2687,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
> nfserr = nfserr_toosmall;
> goto fail;
> case nfserr_noent:
> + xdr_truncate_encode(xdr, start_offset);
> goto skip_entry;
> default:
> /*
> --
> 1.9.3
>