Re: [PATCH 1/3] AFS: Fix VLocation record update wakeup

2007-04-27 Thread David Miller
From: David Howells <[EMAIL PROTECTED]>
Date: Fri, 27 Apr 2007 15:31:35 +0100

> 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.

Applied, thanks David, although a minor nit.

> Signed-Off-By: David Howells <[EMAIL PROTECTED]>

The canonical signoff line does not capitalize Off and By,
I keep fixing this up in your submissions so I figured
I should let you know about it to save me some typing
in the future :-)

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/3] AFS: Fix VLocation record update wakeup

2007-04-27 Thread David Howells
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]>
---

 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 netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html