Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

NFSD: Clean up nfsd4_encode_layoutcommit()

Adopt the use of conventional XDR utility functions. Restructure
the encoder to better align with the XDR definition of the result.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

+11 -16
+2 -2
fs/nfsd/nfs4proc.c
··· 2357 2357 mutex_unlock(&ls->ls_mutex); 2358 2358 2359 2359 if (new_size > i_size_read(inode)) { 2360 - lcp->lc_size_chg = 1; 2360 + lcp->lc_size_chg = true; 2361 2361 lcp->lc_newsize = new_size; 2362 2362 } else { 2363 - lcp->lc_size_chg = 0; 2363 + lcp->lc_size_chg = false; 2364 2364 } 2365 2365 2366 2366 nfserr = ops->proc_layoutcommit(inode, lcp);
+8 -13
fs/nfsd/nfs4xdr.c
··· 4914 4914 { 4915 4915 struct nfsd4_layoutcommit *lcp = &u->layoutcommit; 4916 4916 struct xdr_stream *xdr = resp->xdr; 4917 - __be32 *p; 4918 4917 4919 - p = xdr_reserve_space(xdr, 4); 4920 - if (!p) 4921 - return nfserr_resource; 4922 - *p++ = cpu_to_be32(lcp->lc_size_chg); 4923 - if (lcp->lc_size_chg) { 4924 - p = xdr_reserve_space(xdr, 8); 4925 - if (!p) 4926 - return nfserr_resource; 4927 - p = xdr_encode_hyper(p, lcp->lc_newsize); 4928 - } 4929 - 4930 - return 0; 4918 + /* ns_sizechanged */ 4919 + nfserr = nfsd4_encode_bool(xdr, lcp->lc_size_chg); 4920 + if (nfserr != nfs_ok) 4921 + return nfserr; 4922 + if (lcp->lc_size_chg) 4923 + /* ns_size */ 4924 + return nfsd4_encode_length4(xdr, lcp->lc_newsize); 4925 + return nfs_ok; 4931 4926 } 4932 4927 4933 4928 static __be32
+1 -1
fs/nfsd/xdr4.h
··· 618 618 u32 lc_layout_type; /* request */ 619 619 u32 lc_up_len; /* layout length */ 620 620 void *lc_up_layout; /* decoded by callback */ 621 - u32 lc_size_chg; /* boolean for response */ 621 + bool lc_size_chg; /* response */ 622 622 u64 lc_newsize; /* response */ 623 623 }; 624 624