Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=47051a2152f8b2355ee70249a0faaf7b682e8ce5
Commit:     47051a2152f8b2355ee70249a0faaf7b682e8ce5
Parent:     1a028e50729b85d0a038fad13daf0ee201a37454
Author:     David Howells <[EMAIL PROTECTED]>
AuthorDate: Fri Apr 27 15:26:30 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Fri Apr 27 15:26:30 2007 -0700

    [AFS]: Fix VLocation record update wakeup
    
    Fix the wakeup transitions after a VLocation record update completes
    one way or another.  This builds on Dave Miller's partial fix.
    
    Also move wakeups outside the spinlocked sections.
    
    Signed-off-by: David Howells <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 fs/afs/vlocation.c |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/fs/afs/vlocation.c b/fs/afs/vlocation.c
index 74cce17..6c8e95a 100644
--- a/fs/afs/vlocation.c
+++ b/fs/afs/vlocation.c
@@ -416,8 +416,8 @@ fill_in_record:
                goto error_abandon;
        spin_lock(&vl->lock);
        vl->state = AFS_VL_VALID;
-       wake_up(&vl->waitq);
        spin_unlock(&vl->lock);
+       wake_up(&vl->waitq);
 
        /* schedule for regular updates */
        afs_vlocation_queue_for_updates(vl);
@@ -442,7 +442,7 @@ found_in_memory:
 
                _debug("invalid [state %d]", state);
 
-               if ((state == AFS_VL_NEW || state == AFS_VL_NO_VOLUME)) {
+               if (state == AFS_VL_NEW || state == AFS_VL_NO_VOLUME) {
                        vl->state = AFS_VL_CREATING;
                        spin_unlock(&vl->lock);
                        goto fill_in_record;
@@ -453,11 +453,10 @@ found_in_memory:
                _debug("wait");
 
                spin_unlock(&vl->lock);
-               ret = wait_event_interruptible(
-                       vl->waitq,
-                       vl->state == AFS_VL_NEW ||
-                       vl->state == AFS_VL_VALID ||
-                       vl->state == AFS_VL_NO_VOLUME);
+               ret = wait_event_interruptible(vl->waitq,
+                                              vl->state == AFS_VL_NEW ||
+                                              vl->state == AFS_VL_VALID ||
+                                              vl->state == AFS_VL_NO_VOLUME);
                if (ret < 0)
                        goto error;
                spin_lock(&vl->lock);
@@ -471,8 +470,8 @@ success:
 error_abandon:
        spin_lock(&vl->lock);
        vl->state = AFS_VL_NEW;
-       wake_up(&vl->waitq);
        spin_unlock(&vl->lock);
+       wake_up(&vl->waitq);
 error:
        ASSERT(vl != NULL);
        afs_put_vlocation(vl);
@@ -675,7 +674,6 @@ static void afs_vlocation_updater(struct work_struct *work)
        case 0:
                afs_vlocation_apply_update(vl, &vldb);
                vl->state = AFS_VL_VALID;
-               wake_up(&vl->waitq);
                break;
        case -ENOMEDIUM:
                vl->state = AFS_VL_VOLUME_DELETED;
@@ -685,6 +683,7 @@ static void afs_vlocation_updater(struct work_struct *work)
                break;
        }
        spin_unlock(&vl->lock);
+       wake_up(&vl->waitq);
 
        /* and then reschedule */
        _debug("reschedule");
-
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