nfsd4: pull out common code from setclientid cases
authorJ. Bruce Fields <bfields@redhat.com>
Sat, 19 May 2012 02:06:41 +0000 (22:06 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 1 Jun 2012 00:30:01 +0000 (20:30 -0400)
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index f62ab7624b1f4ef5db7d7b33fabe11d3e23994a0..1fe06ebf192f1634c5380accad6c4af530653cee 100644 (file)
@@ -2189,36 +2189,20 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                }
        }
        unconf = find_unconfirmed_client_by_str(dname, strhashval);
+       if (unconf)
+               expire_client(unconf);
        status = nfserr_jukebox;
+       new = create_client(clname, dname, rqstp, &clverifier);
+       if (new == NULL)
+               goto out;
        if (!conf) {
                /* case 4: placed first, because it's the normal case */
-               if (unconf)
-                       expire_client(unconf);
-               new = create_client(clname, dname, rqstp, &clverifier);
-               if (new == NULL)
-                       goto out;
                gen_clid(new);
        } else if (same_verf(&conf->cl_verifier, &clverifier)) {
                /* case 1: probable callback update */
-               if (unconf) {
-                       /* Note this is removing unconfirmed {*x***},
-                        * which is stronger than RFC recommended {vxc**}.
-                        * This has the advantage that there is at most
-                        * one {*x***} in either list at any time.
-                        */
-                       expire_client(unconf);
-               }
-               new = create_client(clname, dname, rqstp, &clverifier);
-               if (new == NULL)
-                       goto out;
                copy_clid(new, conf);
        } else { /* conf && !same_verf(): */
                /* cases 2, 3: probable client reboot: */
-               if (unconf)
-                       expire_client(unconf);
-               new = create_client(clname, dname, rqstp, &clverifier);
-               if (new == NULL)
-                       goto out;
                gen_clid(new);
        }
        /*