On Wed, Aug 21, 2024 at 10:22:15AM -0400, Jeff Layton wrote: > Also, as a side note: > > fs/nfsd/nfs4xdr.c: In function ‘nfsd4_encode_fattr4_open_arguments’: > fs/nfsd/nfs4xdr.c:3446:55: error: incompatible type for argument 2 of ‘xdrgen_encode_fattr4_open_arguments’ > 3446 | if (!xdrgen_encode_fattr4_open_arguments(xdr, &nfsd_open_arguments)) > > > OPEN_ARGUMENTS4 is a large structure with 5 different bitmaps in it. We > probably don't want to pass that by value. When the tool is dealing > with a struct, we should have it generate functions that take a pointer > instead (IMO). Meh. xdrgen already generates pass-by-reference encoders for structs. The problem is actually this bit of nfs4_1.x: typedef open_arguments4 fattr4_open_arguments; which generates: bool xdrgen_encode_fattr4_open_arguments(struct xdr_stream *xdr, const fattr4_open_arguments value) { return xdrgen_encode_open_arguments4(xdr, &value); }; So, it's a bug in the way that xdrgen handles /typedefs/ of structs, not in the way that it handles the structs themselves. -- Chuck Lever