Trond Myklebust wrote: > On Wed, 2008-08-13 at 11:03 -0400, J. Bruce Fields wrote: >> On Wed, Aug 13, 2008 at 10:31:54AM +0300, Benny Halevy wrote: >>> On Aug. 12, 2008, 22:04 +0300, "J. Bruce Fields" <bfields@xxxxxxxxxxxx> wrote: >>>> On Tue, Aug 12, 2008 at 08:46:18PM +0300, Benny Halevy wrote: >>>>> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> >>>>> --- >>>>> fs/nfsd/nfs4xdr.c | 99 +++++++++++++++++++++++++++++----------------------- >>>>> 1 files changed, 55 insertions(+), 44 deletions(-) >>>>> >>>>> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c >>>>> index 47ac498..9570b1b 100644 >>>>> --- a/fs/nfsd/nfs4xdr.c >>>>> +++ b/fs/nfsd/nfs4xdr.c >>>>> static __be32 >>>>> @@ -929,9 +939,10 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) >>>>> int len; >>>>> DECODE_HEAD; >>>>> >>>>> - READ_BUF(sizeof(stateid_opaque_t) + 20); >>>>> - READ32(write->wr_stateid.si_generation); >>>>> - COPYMEM(&write->wr_stateid.si_opaque, sizeof(stateid_opaque_t)); >>>>> + status = nfsd4_decode_stateid(argp, &write->wr_stateid); >>>>> + if (status) >>>>> + return status; >>>>> + READ_BUF(16); >>>> How did that 20 become a 16? >>> It was sizeof(stateid_opaque_t) + 20 == sizeof(stateid_t) - 4 + 20 == >>> sizeof(stateid_t) + 16. >> Whoops! Even now I still fall into the stateid_opaque_t/stateid_t trap! > > Which is a good reason for ditching the entire confusing typedef, and > replacing it with a packed structure instead: > > struct stateid { > __be32 generation; > char opaque[12]; > } __attribute__((packed)); > > Trond > Please use the "__packed" Kernel macro for better compilers support. And Yes I would suggest using "__packed" where ever a struct is defined for on-the-wire. Even just for indication to fellow programmers that this is going on the wire as is. Boaz -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html