]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/nfsd/nfs4xdr.c
nfsd: turn on reply cache for NFSv4
[karo-tx-linux.git] / fs / nfsd / nfs4xdr.c
index c43f56021501d655ff0a67d4ffe9482b25cec239..c8bf405d19de53dcf521a5cac313b4fbc3da6f24 100644 (file)
@@ -52,6 +52,7 @@
 #include "xdr4.h"
 #include "vfs.h"
 #include "state.h"
+#include "cache.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_XDR
 
@@ -1466,6 +1467,7 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
        DECODE_HEAD;
        struct nfsd4_op *op;
        struct nfsd4_minorversion_ops *ops;
+       bool cachethis = false;
        int i;
 
        /*
@@ -1547,7 +1549,16 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
                        argp->opcnt = i+1;
                        break;
                }
+               /*
+                * We'll try to cache the result in the DRC if any one
+                * op in the compound wants to be cached:
+                */
+               cachethis |= nfsd4_cache_this_op(op);
        }
+       /* Sessions make the DRC unnecessary: */
+       if (argp->minorversion)
+               cachethis = false;
+       argp->rqstp->rq_cachetype = cachethis ? RC_REPLBUFF : RC_NOCACHE;
 
        DECODE_TAIL;
 }