On Thu, 2012-01-12 at 13:24 -0600, Tom Tucker wrote: > On 1/12/12 1:15 PM, Trond Myklebust wrote: > > On Thu, 2012-01-12 at 11:21 -0500, J. Bruce Fields wrote: > >> On Thu, Jan 12, 2012 at 09:47:22AM +0300, Dan Carpenter wrote: > >>> Sparse complains because arg_ch->rs_length is declared as network > >>> endian but we're treating it as CPU endian. > >> This looks like it would actually change behavior on a little endian > >> architecture, so how did this work before? > >> > >> > From some quick grepping, I see assignments both of the form > >> > >> ...rs_length = ntohl(...) > >> > >> and > >> > >> ...rs_length = htonl(...) > >> > >> but only see one declaration for a field named rs_length. > >> > >> So my best guess would be that the code is ugly but working as is, and > >> needs cleanup by someone who knows how this field was intended to be > >> used. > > It looks to me as if rs_handle and rs_offset are being similarly abused. > > Basically, we need a serious clean up in svc_rdma_marshall.c to separate > > out those variables that are in XDR-encoded form and those that are not. > > > The abuse is taking place because the marshal/unmarshall is being done > in-place and it seemed wasteful at the time to add a chunk of memory to > preserve the aesthetic. A union would 'work', but you still wouldn't > 'know' whether the data was NBO or not by where it was -- which seems like > the intent of the __beXX in the first place. These are not variables that are used in hundreds of different places: why not just do the conversion from big-endian to cpu-endian when you actually need to use them? -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- 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