nfsxdr.c (ebcd8e8b28535b643a4c06685bd363b3b73a96af) nfsxdr.c (8c293ef993c8df0b1bea9ecb0de6eb96dec3ac9d)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * XDR support for nfsd
4 *
5 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
6 */
7
8#include "vfs.h"

--- 232 unchanged lines hidden (view full) ---

241 return 0;
242
243 return xdr_argsize_check(rqstp, p);
244}
245
246int
247nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p)
248{
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * XDR support for nfsd
4 *
5 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
6 */
7
8#include "vfs.h"

--- 232 unchanged lines hidden (view full) ---

241 return 0;
242
243 return xdr_argsize_check(rqstp, p);
244}
245
246int
247nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p)
248{
249 struct xdr_stream *xdr = &rqstp->rq_arg_stream;
249 struct nfsd_readargs *args = rqstp->rq_argp;
250 struct nfsd_readargs *args = rqstp->rq_argp;
250 unsigned int len;
251 int v;
252 p = decode_fh(p, &args->fh);
253 if (!p)
251 u32 totalcount;
252
253 if (!svcxdr_decode_fhandle(xdr, &args->fh))
254 return 0;
254 return 0;
255 if (xdr_stream_decode_u32(xdr, &args->offset) < 0)
256 return 0;
257 if (xdr_stream_decode_u32(xdr, &args->count) < 0)
258 return 0;
259 /* totalcount is ignored */
260 if (xdr_stream_decode_u32(xdr, &totalcount) < 0)
261 return 0;
255
262
256 args->offset = ntohl(*p++);
257 len = args->count = ntohl(*p++);
258 p++; /* totalcount - unused */
259
260 len = min_t(unsigned int, len, NFSSVC_MAXBLKSIZE_V2);
261
262 /* set up somewhere to store response.
263 * We take pages, put them on reslist and include in iovec
264 */
265 v=0;
266 while (len > 0) {
267 struct page *p = *(rqstp->rq_next_page++);
268
269 rqstp->rq_vec[v].iov_base = page_address(p);
270 rqstp->rq_vec[v].iov_len = min_t(unsigned int, len, PAGE_SIZE);
271 len -= rqstp->rq_vec[v].iov_len;
272 v++;
273 }
274 args->vlen = v;
275 return xdr_argsize_check(rqstp, p);
263 return 1;
276}
277
278int
279nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p)
280{
281 struct nfsd_writeargs *args = rqstp->rq_argp;
282 unsigned int len, hdr, dlen;
283 struct kvec *head = rqstp->rq_arg.head;

--- 343 unchanged lines hidden ---
264}
265
266int
267nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p)
268{
269 struct nfsd_writeargs *args = rqstp->rq_argp;
270 unsigned int len, hdr, dlen;
271 struct kvec *head = rqstp->rq_arg.head;

--- 343 unchanged lines hidden ---