Loading fs/nfsd/nfs3xdr.c +28 −7 Original line number Diff line number Diff line Loading @@ -121,6 +121,17 @@ svcxdr_encode_nfs_fh3(struct xdr_stream *xdr, const struct svc_fh *fhp) return true; } static bool svcxdr_encode_post_op_fh3(struct xdr_stream *xdr, const struct svc_fh *fhp) { if (xdr_stream_encode_item_present(xdr) < 0) return false; if (!svcxdr_encode_nfs_fh3(xdr, fhp)) return false; return true; } static __be32 * encode_fh(__be32 *p, struct svc_fh *fhp) { Loading Loading @@ -1079,16 +1090,26 @@ nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p) int nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p) { struct xdr_stream *xdr = &rqstp->rq_res_stream; struct nfsd3_diropres *resp = rqstp->rq_resp; *p++ = resp->status; if (resp->status == 0) { *p++ = xdr_one; p = encode_fh(p, &resp->fh); p = encode_post_op_attr(rqstp, p, &resp->fh); if (!svcxdr_encode_nfsstat3(xdr, resp->status)) return 0; switch (resp->status) { case nfs_ok: if (!svcxdr_encode_post_op_fh3(xdr, &resp->fh)) return 0; if (!svcxdr_encode_post_op_attr(rqstp, xdr, &resp->fh)) return 0; if (!svcxdr_encode_wcc_data(rqstp, xdr, &resp->dirfh)) return 0; break; default: if (!svcxdr_encode_wcc_data(rqstp, xdr, &resp->dirfh)) return 0; } p = encode_wcc_data(rqstp, p, &resp->dirfh); return xdr_ressize_check(rqstp, p); return 1; } /* RENAME */ Loading Loading
fs/nfsd/nfs3xdr.c +28 −7 Original line number Diff line number Diff line Loading @@ -121,6 +121,17 @@ svcxdr_encode_nfs_fh3(struct xdr_stream *xdr, const struct svc_fh *fhp) return true; } static bool svcxdr_encode_post_op_fh3(struct xdr_stream *xdr, const struct svc_fh *fhp) { if (xdr_stream_encode_item_present(xdr) < 0) return false; if (!svcxdr_encode_nfs_fh3(xdr, fhp)) return false; return true; } static __be32 * encode_fh(__be32 *p, struct svc_fh *fhp) { Loading Loading @@ -1079,16 +1090,26 @@ nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p) int nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p) { struct xdr_stream *xdr = &rqstp->rq_res_stream; struct nfsd3_diropres *resp = rqstp->rq_resp; *p++ = resp->status; if (resp->status == 0) { *p++ = xdr_one; p = encode_fh(p, &resp->fh); p = encode_post_op_attr(rqstp, p, &resp->fh); if (!svcxdr_encode_nfsstat3(xdr, resp->status)) return 0; switch (resp->status) { case nfs_ok: if (!svcxdr_encode_post_op_fh3(xdr, &resp->fh)) return 0; if (!svcxdr_encode_post_op_attr(rqstp, xdr, &resp->fh)) return 0; if (!svcxdr_encode_wcc_data(rqstp, xdr, &resp->dirfh)) return 0; break; default: if (!svcxdr_encode_wcc_data(rqstp, xdr, &resp->dirfh)) return 0; } p = encode_wcc_data(rqstp, p, &resp->dirfh); return xdr_ressize_check(rqstp, p); return 1; } /* RENAME */ Loading