On Tue, 2013-07-23 at 17:59 +0200, Andre Heider wrote: > Trond, > > On Wed, Jul 17, 2013 at 11:59 PM, Trond Myklebust > <Trond.Myklebust@xxxxxxxxxx> wrote: > > The attribute length is already calculated in advance. There is no > > reason why we cannot calculate the bitmap in advance too so that > > we don't have to play pointer games. > > I'm sorry to report that this patch seems to be more than just a cleanup. > > I just tested 3.11-rc2 against my FreeBSD server, and with just patch > 1/2 (as in -rc2) I still get the failure upon `touch`. It fails with > or without Rick's server patch. > > Applying this one on top of -rc2 fixes it. How about the attached instead of the cleanup? -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com
From bd00a23bba91f54ab45e8788a8306733d8ca3062 Mon Sep 17 00:00:00 2001 From: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Date: Tue, 23 Jul 2013 12:53:39 -0400 Subject: [PATCH] NFSv4: Fix brainfart in attribute length calculation The calculation of the attribute length was 4 bytes off. Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> --- fs/nfs/nfs4xdr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index c74d616..3850b01 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -1118,11 +1118,11 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, len, ((char *)p - (char *)q) + 4); BUG(); } - len = (char *)p - (char *)q - (bmval_len << 2); *q++ = htonl(bmval0); *q++ = htonl(bmval1); if (bmval_len == 3) *q++ = htonl(bmval2); + len = (char *)p - (char *)(q + 1); *q = htonl(len); /* out: */ -- 1.8.3.1