Re: [PATCH 7/7] nfsd: nfs4xdr decode_stateid helper function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 13, 2008 at 01:59:09PM -0400, 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));

So without the ((packed)), all arrays get aligned to 8-byte boundaries
on 64-bit machines?  (What do I need to read to catch up here?)

Anyway, yes, I'd rather get rid of stateid_opaque_t.

--b.
--
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

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux