nfs41: make sure nfs server return right ca_maxresponsesize_cached
authorMi Jinlong <mijinlong@cn.fujitsu.com>
Thu, 10 Mar 2011 09:43:37 +0000 (17:43 +0800)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 16 Mar 2011 15:10:22 +0000 (11:10 -0400)
According to rfc5661,

  ca_maxresponsesize_cached:

     Like ca_maxresponsesize, but the maximum size of a reply that
     will be stored in the reply cache (Section 2.10.6.1).  For each
     channel, the server MAY decrease this value, but MUST NOT
     increase it.

the latest kernel(2.6.38-rc8) may increase the value for ignoring
request's ca_maxresponsesize_cached value. We should not ignore it.

Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index c26dc31fb943ce91d68e6fed5166a8b64b0c1280..a20827804c50d2952e0b05f2d9b760c26e0db1f6 100644 (file)
@@ -608,7 +608,8 @@ static void init_forechannel_attrs(struct nfsd4_channel_attrs *new, struct nfsd4
        u32 maxrpc = nfsd_serv->sv_max_mesg;
 
        new->maxreqs = numslots;
-       new->maxresp_cached = slotsize + NFSD_MIN_HDR_SEQ_SZ;
+       new->maxresp_cached = min_t(u32, req->maxresp_cached,
+                                       slotsize + NFSD_MIN_HDR_SEQ_SZ);
        new->maxreq_sz = min_t(u32, req->maxreq_sz, maxrpc);
        new->maxresp_sz = min_t(u32, req->maxresp_sz, maxrpc);
        new->maxops = min_t(u32, req->maxops, NFSD_MAX_OPS_PER_COMPOUND);