nfsd: clarify check_op_ordering
authorJ. Bruce Fields <bfields@redhat.com>
Wed, 13 Jun 2018 19:04:59 +0000 (15:04 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Sun, 17 Jun 2018 14:43:02 +0000 (10:43 -0400)
Document a couple things that confused me on a recent reading.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4proc.c

index 1929f85b8269251dcb6e8d09d57acf1d5668f7ff..140b05c8a4bef3e33fa09d459f432490f91233d4 100644 (file)
@@ -1603,7 +1603,7 @@ static const char *nfsd4_op_name(unsigned opnum);
  */
 static __be32 nfs41_check_op_ordering(struct nfsd4_compoundargs *args)
 {
-       struct nfsd4_op *op = &args->ops[0];
+       struct nfsd4_op *first_op = &args->ops[0];
 
        /* These ordering requirements don't apply to NFSv4.0: */
        if (args->minorversion == 0)
@@ -1611,12 +1611,17 @@ static __be32 nfs41_check_op_ordering(struct nfsd4_compoundargs *args)
        /* This is weird, but OK, not our problem: */
        if (args->opcnt == 0)
                return nfs_ok;
-       if (op->status == nfserr_op_illegal)
+       if (first_op->status == nfserr_op_illegal)
                return nfs_ok;
-       if (!(nfsd4_ops[op->opnum].op_flags & ALLOWED_AS_FIRST_OP))
+       if (!(nfsd4_ops[first_op->opnum].op_flags & ALLOWED_AS_FIRST_OP))
                return nfserr_op_not_in_session;
-       if (op->opnum == OP_SEQUENCE)
+       if (first_op->opnum == OP_SEQUENCE)
                return nfs_ok;
+       /*
+        * So first_op is something allowed outside a session, like
+        * EXCHANGE_ID; but then it has to be the only op in the
+        * compound:
+        */
        if (args->opcnt != 1)
                return nfserr_not_only_op;
        return nfs_ok;