Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=46f8a64bae11f5c9b15b4401f6e9863281999b66
Commit:     46f8a64bae11f5c9b15b4401f6e9863281999b66
Parent:     24e1c13c93cbdd05e4b7ea921c0050b036555adc
Author:     J. Bruce Fields <[EMAIL PROTECTED]>
AuthorDate: Thu Nov 22 13:54:18 2007 -0500
Committer:  J. Bruce Fields <[EMAIL PROTECTED]>
CommitDate: Fri Feb 1 16:42:01 2008 -0500

    nfsd4: probe callback channel only once
    
    Our callback code doesn't actually handle concurrent attempts to probe
    the callback channel.  Some rethinking of the locking may be required.
    However, we can also just move the callback probing to this case.  Since
    this is the only time a client is "confirmed" (and since that can only
    happen once in the lifetime of a client), this ensures we only probe
    once.
    
    Signed-off-by: J. Bruce Fields <[EMAIL PROTECTED]>
---
 fs/nfsd/nfs4callback.c |    3 +--
 fs/nfsd/nfs4state.c    |    3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 9d536a8..a9735a6 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -395,8 +395,7 @@ nfsd4_probe_callback(struct nfs4_client *clp)
        };
        struct task_struct *t;
 
-       if (atomic_read(&cb->cb_set))
-               return;
+       BUG_ON(atomic_read(&clp->cl_callback.cb_set));
 
        /* Initialize address */
        memset(&addr, 0, sizeof(addr));
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 31673cd..9d81c71 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -948,6 +948,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
                        }
                        move_to_confirmed(unconf);
                        conf = unconf;
+                       nfsd4_probe_callback(conf);
                        status = nfs_ok;
                }
        } else if ((!conf || (conf && !same_verf(&conf->cl_confirm, &confirm)))
@@ -965,8 +966,6 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
                status = nfserr_clid_inuse;
        }
 out:
-       if (!status)
-               nfsd4_probe_callback(conf);
        nfs4_unlock_state();
        return status;
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to