NFSD: Using min/max/min_t/max_t for calculate
authorKinglong Mee <kinglongmee@gmail.com>
Tue, 10 Jun 2014 10:08:19 +0000 (18:08 +0800)
committerJ. Bruce Fields <bfields@redhat.com>
Mon, 23 Jun 2014 15:31:36 +0000 (11:31 -0400)
Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs3proc.c
fs/nfsd/nfs3xdr.c
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4xdr.c
fs/nfsd/nfsctl.c
fs/nfsd/nfssvc.c
fs/nfsd/nfsxdr.c
fs/nfsd/vfs.c

index 4012899..61ef42c 100644 (file)
@@ -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 (xdr opaque byte count) = 26
         */
-
-       resp->count = argp->count;
-       if (max_blocksize < resp->count)
-               resp->count = max_blocksize;
-
+       resp->count = min(argp->count, max_blocksize);
        svc_reserve_auth(rqstp, ((1 + NFS3_POST_OP_ATTR_WORDS + 3)<<2) + resp->count +4);
 
        fh_copy(&resp->fh, &argp->fh);
index e6c01e8..39c5eb3 100644 (file)
@@ -120,10 +120,7 @@ decode_sattr3(__be32 *p, struct iattr *iap)
 
                iap->ia_valid |= ATTR_SIZE;
                p = xdr_decode_hyper(p, &newsize);
-               if (newsize <= NFS_OFFSET_MAX)
-                       iap->ia_size = newsize;
-               else
-                       iap->ia_size = NFS_OFFSET_MAX;
+               iap->ia_size = min_t(u64, newsize, NFS_OFFSET_MAX);
        }
        if ((tmp = ntohl(*p++)) == 1) { /* set to server time */
                iap->ia_valid |= ATTR_ATIME;
@@ -338,10 +335,8 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
                return 0;
        p = xdr_decode_hyper(p, &args->offset);
 
-       len = args->count = ntohl(*p++);
-
-       if (len > max_blocksize)
-               len = max_blocksize;
+       args->count = ntohl(*p++);
+       len = min(args->count, max_blocksize);
 
        /* set up the kvec */
        v=0;
@@ -349,7 +344,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
                struct page *p = *(rqstp->rq_next_page++);
 
                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;
                v++;
        }
@@ -484,9 +479,7 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
        }
        /* now copy next page if there is one */
        if (len && !avail && rqstp->rq_arg.page_len) {
-               avail = rqstp->rq_arg.page_len;
-               if (avail > PAGE_SIZE)
-                       avail = PAGE_SIZE;
+               avail = min_t(unsigned int, rqstp->rq_arg.page_len, PAGE_SIZE);
                old = page_address(rqstp->rq_arg.pages[0]);
        }
        while (len && avail && *old) {
@@ -571,10 +564,7 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
        args->verf   = p; p += 2;
        args->dircount = ~0;
        args->count  = ntohl(*p++);
-
-       if (args->count > PAGE_SIZE)
-               args->count = PAGE_SIZE;
-
+       args->count  = min_t(u32, args->count, PAGE_SIZE);
        args->buffer = page_address(*(rqstp->rq_next_page++));
 
        return xdr_argsize_check(rqstp, p);
@@ -595,10 +585,7 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
        args->dircount = ntohl(*p++);
        args->count    = ntohl(*p++);
 
-       len = (args->count > max_blocksize) ? max_blocksize :
-                                                 args->count;
-       args->count = len;
-
+       len = args->count = min(args->count, max_blocksize);
        while (len > 0) {
                struct page *p = *(rqstp->rq_next_page++);
                if (!args->buffer)
@@ -913,8 +900,7 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
         */
 
        /* truncate filename if too long */
-       if (namlen > NFS3_MAXNAMLEN)
-               namlen = NFS3_MAXNAMLEN;
+       namlen = min(namlen, NFS3_MAXNAMLEN);
 
        slen = XDR_QUADLEN(namlen);
        elen = slen + NFS3_ENTRY_BAGGAGE
index 6851b00..baa3803 100644 (file)
@@ -1529,21 +1529,17 @@ static inline u32 nfsd4_read_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)
        u32 maxcount = 0, rlen = 0;
 
        maxcount = svc_max_payload(rqstp);
-       rlen = op->u.read.rd_length;
-
-       if (rlen > maxcount)
-               rlen = maxcount;
+       rlen = min(op->u.read.rd_length, maxcount);
 
        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)
 {
-       u32 maxcount = svc_max_payload(rqstp);
-       u32 rlen = op->u.readdir.rd_maxcount;
+       u32 maxcount = 0, rlen = 0;
 
-       if (rlen > maxcount)
-               rlen = maxcount;
+       maxcount = svc_max_payload(rqstp);
+       rlen = min(op->u.readdir.rd_maxcount, maxcount);
 
        return (op_encode_hdr_size + op_encode_verifier_maxsz +
                XDR_QUADLEN(rlen)) * sizeof(__be32);
index 83baf2b..30913c8 100644 (file)
@@ -3134,9 +3134,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
        len = maxcount;
        v = 0;
 
-       thislen = (void *)xdr->end - (void *)xdr->p;
-       if (len < thislen)
-               thislen = len;
+       thislen = min(len, ((void *)xdr->end - (void *)xdr->p));
        p = xdr_reserve_space(xdr, (thislen+3)&~3);
        WARN_ON_ONCE(!p);
        resp->rqstp->rq_vec[v].iov_base = p;
@@ -3203,10 +3201,8 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
        xdr_commit_encode(xdr);
 
        maxcount = svc_max_payload(resp->rqstp);
-       if (maxcount > xdr->buf->buflen - xdr->buf->len)
-               maxcount = xdr->buf->buflen - xdr->buf->len;
-       if (maxcount > read->rd_length)
-               maxcount = read->rd_length;
+       maxcount = min_t(unsigned long, maxcount, (xdr->buf->buflen - xdr->buf->len));
+       maxcount = min_t(unsigned long, maxcount, read->rd_length);
 
        if (!read->rd_filp) {
                err = nfsd_get_tmp_read_open(resp->rqstp, read->rd_fhp,
index 5184404..6a6f65c 100644 (file)
@@ -369,8 +369,7 @@ static ssize_t write_filehandle(struct file *file, char *buf, size_t size)
 
        if (maxsize < NFS_FHSIZE)
                return -EINVAL;
-       if (maxsize > NFS3_FHSIZE)
-               maxsize = NFS3_FHSIZE;
+       maxsize = min(maxsize, NFS3_FHSIZE);
 
        if (qword_get(&mesg, mesg, size)>0)
                return -EINVAL;
@@ -871,10 +870,8 @@ static ssize_t write_maxblksize(struct file *file, char *buf, size_t size)
                /* force bsize into allowed range and
                 * required alignment.
                 */
-               if (bsize < 1024)
-                       bsize = 1024;
-               if (bsize > NFSSVC_MAXBLKSIZE)
-                       bsize = NFSSVC_MAXBLKSIZE;
+               bsize = max_t(int, bsize, 1024);
+               bsize = min_t(int, bsize, NFSSVC_MAXBLKSIZE);
                bsize &= ~(1024-1);
                mutex_lock(&nfsd_mutex);
                if (nn->nfsd_serv) {
index 1879e43..2094741 100644 (file)
@@ -469,8 +469,7 @@ int nfsd_set_nrthreads(int n, int *nthreads, struct net *net)
        /* enforce a global maximum number of threads */
        tot = 0;
        for (i = 0; i < n; i++) {
-               if (nthreads[i] > NFSD_MAXSERVS)
-                       nthreads[i] = NFSD_MAXSERVS;
+               nthreads[i] = min(nthreads[i], NFSD_MAXSERVS);
                tot += nthreads[i];
        }
        if (tot > NFSD_MAXSERVS) {
@@ -519,11 +518,11 @@ nfsd_svc(int nrservs, struct net *net)
 
        mutex_lock(&nfsd_mutex);
        dprintk("nfsd: creating service\n");
-       if (nrservs <= 0)
-               nrservs = 0;
-       if (nrservs > NFSD_MAXSERVS)
-               nrservs = NFSD_MAXSERVS;
+
+       nrservs = max(nrservs, 0);
+       nrservs = min(nrservs, NFSD_MAXSERVS);
        error = 0;
+
        if (nrservs == 0 && nn->nfsd_serv == NULL)
                goto out;
 
index 1ac306b..412d706 100644 (file)
@@ -257,8 +257,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
        len = args->count     = ntohl(*p++);
        p++; /* totalcount - unused */
 
-       if (len > NFSSVC_MAXBLKSIZE_V2)
-               len = NFSSVC_MAXBLKSIZE_V2;
+       len = min_t(unsigned int, len, NFSSVC_MAXBLKSIZE_V2);
 
        /* set up somewhere to store response.
         * We take pages, put them on reslist and include in iovec
@@ -268,7 +267,7 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
                struct page *p = *(rqstp->rq_next_page++);
 
                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;
                v++;
        }
@@ -400,9 +399,7 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
                return 0;
        args->cookie = ntohl(*p++);
        args->count  = ntohl(*p++);
-       if (args->count > PAGE_SIZE)
-               args->count = PAGE_SIZE;
-
+       args->count  = min_t(u32, args->count, PAGE_SIZE);
        args->buffer = page_address(*(rqstp->rq_next_page++));
 
        return xdr_argsize_check(rqstp, p);
@@ -516,10 +513,11 @@ nfssvc_encode_entry(void *ccdv, const char *name,
        }
        if (cd->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);
+
        if ((buflen = cd->buflen - slen - 4) < 0) {
                cd->common.err = nfserr_toosmall;
                return -EINVAL;
index 140c496..7498099 100644 (file)
@@ -2093,8 +2093,7 @@ nfsd_racache_init(int cache_size)
        if (raparm_hash[0].pb_head)
                return 0;
        nperbucket = DIV_ROUND_UP(cache_size, RAPARM_HASH_SIZE);
-       if (nperbucket < 2)
-               nperbucket = 2;
+       nperbucket = max(2, nperbucket);
        cache_size = nperbucket * RAPARM_HASH_SIZE;
 
        dprintk("nfsd: allocating %d readahead buffers.\n", cache_size);