linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / nfs / callback_xdr.c
index 29f9321..7c33b9a 100644 (file)
@@ -5,6 +5,7 @@
  *
  * NFSv4 callback encode/decode procedures
  */
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/sunrpc/svc.h>
 #include <linux/nfs4.h>
@@ -201,7 +202,7 @@ static unsigned decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xd
        status = decode_fh(xdr, &args->fh);
 out:
        dprintk("%s: exit with status = %d\n", __FUNCTION__, status);
-       return status;
+       return 0;
 }
 
 static unsigned encode_string(struct xdr_stream *xdr, unsigned int len, const char *str)
@@ -329,7 +330,7 @@ static unsigned encode_op_hdr(struct xdr_stream *xdr, uint32_t op, uint32_t res)
 
 static unsigned encode_getattr_res(struct svc_rqst *rqstp, struct xdr_stream *xdr, const struct cb_getattrres *res)
 {
-       uint32_t *savep = NULL;
+       uint32_t *savep;
        unsigned status = res->status;
        
        if (unlikely(status != 0))
@@ -357,26 +358,23 @@ static unsigned process_op(struct svc_rqst *rqstp,
                struct xdr_stream *xdr_in, void *argp,
                struct xdr_stream *xdr_out, void *resp)
 {
-       struct callback_op *op = &callback_ops[0];
-       unsigned int op_nr = OP_CB_ILLEGAL;
+       struct callback_op *op;
+       unsigned int op_nr;
        unsigned int status = 0;
        long maxlen;
        unsigned res;
 
        dprintk("%s: start\n", __FUNCTION__);
        status = decode_op_hdr(xdr_in, &op_nr);
-       if (likely(status == 0)) {
-               switch (op_nr) {
-                       case OP_CB_GETATTR:
-                       case OP_CB_RECALL:
-                               op = &callback_ops[op_nr];
-                               break;
-                       default:
-                               op_nr = OP_CB_ILLEGAL;
-                               op = &callback_ops[0];
-                               status = htonl(NFS4ERR_OP_ILLEGAL);
-               }
-       }
+       if (unlikely(status != 0)) {
+               op_nr = OP_CB_ILLEGAL;
+               op = &callback_ops[0];
+       } else if (unlikely(op_nr != OP_CB_GETATTR && op_nr != OP_CB_RECALL)) {
+               op_nr = OP_CB_ILLEGAL;
+               op = &callback_ops[0];
+               status = htonl(NFS4ERR_OP_ILLEGAL);
+       } else
+               op = &callback_ops[op_nr];
 
        maxlen = xdr_out->end - xdr_out->p;
        if (maxlen > 0 && maxlen < PAGE_SIZE) {
@@ -418,7 +416,6 @@ static int nfs4_callback_compound(struct svc_rqst *rqstp, void *argp, void *resp
        decode_compound_hdr_arg(&xdr_in, &hdr_arg);
        hdr_res.taglen = hdr_arg.taglen;
        hdr_res.tag = hdr_arg.tag;
-       hdr_res.nops = NULL;
        encode_compound_hdr_res(&xdr_out, &hdr_res);
 
        for (;;) {