{
        struct nfsd3_readargs *argp = rqstp->rq_argp;
        struct nfsd3_readres *resp = rqstp->rq_resp;
-       u32 max_blocksize = svc_max_payload(rqstp);
        unsigned int len;
        int v;
 
                                (unsigned long) argp->count,
                                (unsigned long long) argp->offset);
 
-       argp->count = min_t(u32, argp->count, max_blocksize);
+       argp->count = min_t(u32, argp->count, svc_max_payload(rqstp));
+       argp->count = min_t(u32, argp->count, rqstp->rq_res.buflen);
        if (argp->offset > (u64)OFFSET_MAX)
                argp->offset = (u64)OFFSET_MAX;
        if (argp->offset + argp->count > (u64)OFFSET_MAX)