Commit 3c7aa15d authored by Kinglong Mee's avatar Kinglong Mee Committed by J. Bruce Fields

NFSD: Using min/max/min_t/max_t for calculate

Signed-off-by: default avatarKinglong Mee <kinglongmee@gmail.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent a497c3ba
...@@ -157,11 +157,7 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, ...@@ -157,11 +157,7 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp,
* 1 (status) + 22 (post_op_attr) + 1 (count) + 1 (eof) * 1 (status) + 22 (post_op_attr) + 1 (count) + 1 (eof)
* + 1 (xdr opaque byte count) = 26 * + 1 (xdr opaque byte count) = 26
*/ */
resp->count = min(argp->count, max_blocksize);
resp->count = argp->count;
if (max_blocksize < resp->count)
resp->count = max_blocksize;
svc_reserve_auth(rqstp, ((1 + NFS3_POST_OP_ATTR_WORDS + 3)<<2) + resp->count +4); svc_reserve_auth(rqstp, ((1 + NFS3_POST_OP_ATTR_WORDS + 3)<<2) + resp->count +4);
fh_copy(&resp->fh, &argp->fh); fh_copy(&resp->fh, &argp->fh);
......
...@@ -120,10 +120,7 @@ decode_sattr3(__be32 *p, struct iattr *iap) ...@@ -120,10 +120,7 @@ decode_sattr3(__be32 *p, struct iattr *iap)
iap->ia_valid |= ATTR_SIZE; iap->ia_valid |= ATTR_SIZE;
p = xdr_decode_hyper(p, &newsize); p = xdr_decode_hyper(p, &newsize);
if (newsize <= NFS_OFFSET_MAX) iap->ia_size = min_t(u64, newsize, NFS_OFFSET_MAX);
iap->ia_size = newsize;
else
iap->ia_size = NFS_OFFSET_MAX;
} }
if ((tmp = ntohl(*p++)) == 1) { /* set to server time */ if ((tmp = ntohl(*p++)) == 1) { /* set to server time */
iap->ia_valid |= ATTR_ATIME; iap->ia_valid |= ATTR_ATIME;
...@@ -338,10 +335,8 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -338,10 +335,8 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
return 0; return 0;
p = xdr_decode_hyper(p, &args->offset); p = xdr_decode_hyper(p, &args->offset);
len = args->count = ntohl(*p++); args->count = ntohl(*p++);
len = min(args->count, max_blocksize);
if (len > max_blocksize)
len = max_blocksize;
/* set up the kvec */ /* set up the kvec */
v=0; v=0;
...@@ -349,7 +344,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -349,7 +344,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
struct page *p = *(rqstp->rq_next_page++); struct page *p = *(rqstp->rq_next_page++);
rqstp->rq_vec[v].iov_base = page_address(p); rqstp->rq_vec[v].iov_base = page_address(p);
rqstp->rq_vec[v].iov_len = len < PAGE_SIZE? len : PAGE_SIZE; rqstp->rq_vec[v].iov_len = min_t(unsigned int, len, PAGE_SIZE);
len -= rqstp->rq_vec[v].iov_len; len -= rqstp->rq_vec[v].iov_len;
v++; v++;
} }
...@@ -484,9 +479,7 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -484,9 +479,7 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
} }
/* now copy next page if there is one */ /* now copy next page if there is one */
if (len && !avail && rqstp->rq_arg.page_len) { if (len && !avail && rqstp->rq_arg.page_len) {
avail = rqstp->rq_arg.page_len; avail = min_t(unsigned int, rqstp->rq_arg.page_len, PAGE_SIZE);
if (avail > PAGE_SIZE)
avail = PAGE_SIZE;
old = page_address(rqstp->rq_arg.pages[0]); old = page_address(rqstp->rq_arg.pages[0]);
} }
while (len && avail && *old) { while (len && avail && *old) {
...@@ -571,10 +564,7 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -571,10 +564,7 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
args->verf = p; p += 2; args->verf = p; p += 2;
args->dircount = ~0; args->dircount = ~0;
args->count = ntohl(*p++); args->count = ntohl(*p++);
args->count = min_t(u32, args->count, PAGE_SIZE);
if (args->count > PAGE_SIZE)
args->count = PAGE_SIZE;
args->buffer = page_address(*(rqstp->rq_next_page++)); args->buffer = page_address(*(rqstp->rq_next_page++));
return xdr_argsize_check(rqstp, p); return xdr_argsize_check(rqstp, p);
...@@ -595,10 +585,7 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -595,10 +585,7 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
args->dircount = ntohl(*p++); args->dircount = ntohl(*p++);
args->count = ntohl(*p++); args->count = ntohl(*p++);
len = (args->count > max_blocksize) ? max_blocksize : len = args->count = min(args->count, max_blocksize);
args->count;
args->count = len;
while (len > 0) { while (len > 0) {
struct page *p = *(rqstp->rq_next_page++); struct page *p = *(rqstp->rq_next_page++);
if (!args->buffer) if (!args->buffer)
...@@ -913,8 +900,7 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen, ...@@ -913,8 +900,7 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
*/ */
/* truncate filename if too long */ /* truncate filename if too long */
if (namlen > NFS3_MAXNAMLEN) namlen = min(namlen, NFS3_MAXNAMLEN);
namlen = NFS3_MAXNAMLEN;
slen = XDR_QUADLEN(namlen); slen = XDR_QUADLEN(namlen);
elen = slen + NFS3_ENTRY_BAGGAGE elen = slen + NFS3_ENTRY_BAGGAGE
......
...@@ -1529,21 +1529,17 @@ static inline u32 nfsd4_read_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op) ...@@ -1529,21 +1529,17 @@ static inline u32 nfsd4_read_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)
u32 maxcount = 0, rlen = 0; u32 maxcount = 0, rlen = 0;
maxcount = svc_max_payload(rqstp); maxcount = svc_max_payload(rqstp);
rlen = op->u.read.rd_length; rlen = min(op->u.read.rd_length, maxcount);
if (rlen > maxcount)
rlen = maxcount;
return (op_encode_hdr_size + 2 + XDR_QUADLEN(rlen)) * sizeof(__be32); return (op_encode_hdr_size + 2 + XDR_QUADLEN(rlen)) * sizeof(__be32);
} }
static inline u32 nfsd4_readdir_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op) static inline u32 nfsd4_readdir_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)
{ {
u32 maxcount = svc_max_payload(rqstp); u32 maxcount = 0, rlen = 0;
u32 rlen = op->u.readdir.rd_maxcount;
if (rlen > maxcount) maxcount = svc_max_payload(rqstp);
rlen = maxcount; rlen = min(op->u.readdir.rd_maxcount, maxcount);
return (op_encode_hdr_size + op_encode_verifier_maxsz + return (op_encode_hdr_size + op_encode_verifier_maxsz +
XDR_QUADLEN(rlen)) * sizeof(__be32); XDR_QUADLEN(rlen)) * sizeof(__be32);
......
...@@ -3134,9 +3134,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, ...@@ -3134,9 +3134,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
len = maxcount; len = maxcount;
v = 0; v = 0;
thislen = (void *)xdr->end - (void *)xdr->p; thislen = min(len, ((void *)xdr->end - (void *)xdr->p));
if (len < thislen)
thislen = len;
p = xdr_reserve_space(xdr, (thislen+3)&~3); p = xdr_reserve_space(xdr, (thislen+3)&~3);
WARN_ON_ONCE(!p); WARN_ON_ONCE(!p);
resp->rqstp->rq_vec[v].iov_base = p; resp->rqstp->rq_vec[v].iov_base = p;
...@@ -3203,10 +3201,8 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr, ...@@ -3203,10 +3201,8 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
xdr_commit_encode(xdr); xdr_commit_encode(xdr);
maxcount = svc_max_payload(resp->rqstp); maxcount = svc_max_payload(resp->rqstp);
if (maxcount > xdr->buf->buflen - xdr->buf->len) maxcount = min_t(unsigned long, maxcount, (xdr->buf->buflen - xdr->buf->len));
maxcount = xdr->buf->buflen - xdr->buf->len; maxcount = min_t(unsigned long, maxcount, read->rd_length);
if (maxcount > read->rd_length)
maxcount = read->rd_length;
if (!read->rd_filp) { if (!read->rd_filp) {
err = nfsd_get_tmp_read_open(resp->rqstp, read->rd_fhp, err = nfsd_get_tmp_read_open(resp->rqstp, read->rd_fhp,
......
...@@ -369,8 +369,7 @@ static ssize_t write_filehandle(struct file *file, char *buf, size_t size) ...@@ -369,8 +369,7 @@ static ssize_t write_filehandle(struct file *file, char *buf, size_t size)
if (maxsize < NFS_FHSIZE) if (maxsize < NFS_FHSIZE)
return -EINVAL; return -EINVAL;
if (maxsize > NFS3_FHSIZE) maxsize = min(maxsize, NFS3_FHSIZE);
maxsize = NFS3_FHSIZE;
if (qword_get(&mesg, mesg, size)>0) if (qword_get(&mesg, mesg, size)>0)
return -EINVAL; return -EINVAL;
...@@ -871,10 +870,8 @@ static ssize_t write_maxblksize(struct file *file, char *buf, size_t size) ...@@ -871,10 +870,8 @@ static ssize_t write_maxblksize(struct file *file, char *buf, size_t size)
/* force bsize into allowed range and /* force bsize into allowed range and
* required alignment. * required alignment.
*/ */
if (bsize < 1024) bsize = max_t(int, bsize, 1024);
bsize = 1024; bsize = min_t(int, bsize, NFSSVC_MAXBLKSIZE);
if (bsize > NFSSVC_MAXBLKSIZE)
bsize = NFSSVC_MAXBLKSIZE;
bsize &= ~(1024-1); bsize &= ~(1024-1);
mutex_lock(&nfsd_mutex); mutex_lock(&nfsd_mutex);
if (nn->nfsd_serv) { if (nn->nfsd_serv) {
......
...@@ -469,8 +469,7 @@ int nfsd_set_nrthreads(int n, int *nthreads, struct net *net) ...@@ -469,8 +469,7 @@ int nfsd_set_nrthreads(int n, int *nthreads, struct net *net)
/* enforce a global maximum number of threads */ /* enforce a global maximum number of threads */
tot = 0; tot = 0;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
if (nthreads[i] > NFSD_MAXSERVS) nthreads[i] = min(nthreads[i], NFSD_MAXSERVS);
nthreads[i] = NFSD_MAXSERVS;
tot += nthreads[i]; tot += nthreads[i];
} }
if (tot > NFSD_MAXSERVS) { if (tot > NFSD_MAXSERVS) {
...@@ -519,11 +518,11 @@ nfsd_svc(int nrservs, struct net *net) ...@@ -519,11 +518,11 @@ nfsd_svc(int nrservs, struct net *net)
mutex_lock(&nfsd_mutex); mutex_lock(&nfsd_mutex);
dprintk("nfsd: creating service\n"); dprintk("nfsd: creating service\n");
if (nrservs <= 0)
nrservs = 0; nrservs = max(nrservs, 0);
if (nrservs > NFSD_MAXSERVS) nrservs = min(nrservs, NFSD_MAXSERVS);
nrservs = NFSD_MAXSERVS;
error = 0; error = 0;
if (nrservs == 0 && nn->nfsd_serv == NULL) if (nrservs == 0 && nn->nfsd_serv == NULL)
goto out; goto out;
......
...@@ -257,8 +257,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -257,8 +257,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
len = args->count = ntohl(*p++); len = args->count = ntohl(*p++);
p++; /* totalcount - unused */ p++; /* totalcount - unused */
if (len > NFSSVC_MAXBLKSIZE_V2) len = min_t(unsigned int, len, NFSSVC_MAXBLKSIZE_V2);
len = NFSSVC_MAXBLKSIZE_V2;
/* set up somewhere to store response. /* set up somewhere to store response.
* We take pages, put them on reslist and include in iovec * We take pages, put them on reslist and include in iovec
...@@ -268,7 +267,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -268,7 +267,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
struct page *p = *(rqstp->rq_next_page++); struct page *p = *(rqstp->rq_next_page++);
rqstp->rq_vec[v].iov_base = page_address(p); rqstp->rq_vec[v].iov_base = page_address(p);
rqstp->rq_vec[v].iov_len = len < PAGE_SIZE?len:PAGE_SIZE; rqstp->rq_vec[v].iov_len = min_t(unsigned int, len, PAGE_SIZE);
len -= rqstp->rq_vec[v].iov_len; len -= rqstp->rq_vec[v].iov_len;
v++; v++;
} }
...@@ -400,9 +399,7 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p, ...@@ -400,9 +399,7 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
return 0; return 0;
args->cookie = ntohl(*p++); args->cookie = ntohl(*p++);
args->count = ntohl(*p++); args->count = ntohl(*p++);
if (args->count > PAGE_SIZE) args->count = min_t(u32, args->count, PAGE_SIZE);
args->count = PAGE_SIZE;
args->buffer = page_address(*(rqstp->rq_next_page++)); args->buffer = page_address(*(rqstp->rq_next_page++));
return xdr_argsize_check(rqstp, p); return xdr_argsize_check(rqstp, p);
...@@ -516,10 +513,11 @@ nfssvc_encode_entry(void *ccdv, const char *name, ...@@ -516,10 +513,11 @@ nfssvc_encode_entry(void *ccdv, const char *name,
} }
if (cd->offset) if (cd->offset)
*cd->offset = htonl(offset); *cd->offset = htonl(offset);
if (namlen > NFS2_MAXNAMLEN)
namlen = NFS2_MAXNAMLEN;/* truncate filename */
/* truncate filename */
namlen = min(namlen, NFS2_MAXNAMLEN);
slen = XDR_QUADLEN(namlen); slen = XDR_QUADLEN(namlen);
if ((buflen = cd->buflen - slen - 4) < 0) { if ((buflen = cd->buflen - slen - 4) < 0) {
cd->common.err = nfserr_toosmall; cd->common.err = nfserr_toosmall;
return -EINVAL; return -EINVAL;
......
...@@ -2093,8 +2093,7 @@ nfsd_racache_init(int cache_size) ...@@ -2093,8 +2093,7 @@ nfsd_racache_init(int cache_size)
if (raparm_hash[0].pb_head) if (raparm_hash[0].pb_head)
return 0; return 0;
nperbucket = DIV_ROUND_UP(cache_size, RAPARM_HASH_SIZE); nperbucket = DIV_ROUND_UP(cache_size, RAPARM_HASH_SIZE);
if (nperbucket < 2) nperbucket = max(2, nperbucket);
nperbucket = 2;
cache_size = nperbucket * RAPARM_HASH_SIZE; cache_size = nperbucket * RAPARM_HASH_SIZE;
dprintk("nfsd: allocating %d readahead buffers.\n", cache_size); dprintk("nfsd: allocating %d readahead buffers.\n", cache_size);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment