A better description would be:
=====================================
When the lockres state UPCONVERT_FINISHING is cleared,
we should wake up the downconvert thread incase that lockres
is in the blocked queue. Currently we are not doing so and thus
are at the mercy of another event waking up the dc thread.
======================================

With that in mind, can you do the following with the lock...

kick = (lockres->l_flags & OCFS2_LOCK_BLOCKED);

...

and this at the end of both functions.

if (kick)
      ocfs2_wake_downconvert_thread(ocfs2_get_lockres_osb(lockres));

Be careful in cluster_lock.

On 09/14/2011 07:06 PM, Wengang Wang wrote:
> In down convert thread, when the ocfs2_lock_res is in 
> OCFS2_LOCK_UPCONVERT_FINISHING
> state, it is requeued for next run of ocfs2_downconvert_thread_do_work(). If 
> not
> waked up, the DC thread just sleep there without even there are 
> ocfs2_lock_res' left
> in the list.
>
> So when clearing the OCFS2_LOCK_UPCONVERT_FINISHING flag, we need also to 
> wake up dc
> thread accordingly.
>
> Signed-off-by: Wengang Wang<wen.gang.w...@oracle.com>
> ---
>   fs/ocfs2/dlmglue.c |    2 ++
>   1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
> index 7642d7c..a2e8278 100644
> --- a/fs/ocfs2/dlmglue.c
> +++ b/fs/ocfs2/dlmglue.c
> @@ -1206,6 +1206,7 @@ static inline void ocfs2_recover_from_dlm_error(struct 
> ocfs2_lock_res *lockres,
>       spin_unlock_irqrestore(&lockres->l_lock, flags);
>
>       wake_up(&lockres->l_event);
> +     ocfs2_wake_downconvert_thread(ocfs2_get_lockres_osb(lockres));
>   }
>
>   /* Note: If we detect another process working on the lock (i.e.,
> @@ -1502,6 +1503,7 @@ unlock:
>       lockres_clear_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING);
>
>       spin_unlock_irqrestore(&lockres->l_lock, flags);
> +     ocfs2_wake_downconvert_thread(osb);
>   out:
>       /*
>        * This is helping work around a lock inversion between the page lock


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to