[Ocfs2-devel] [PATCH] ocfs2: Plugs race between the dc thread and an unlock ast message
Wengang Wang
wen.gang.wang at oracle.com
Thu Feb 4 02:27:29 PST 2010
Hi Sunil,
Just for my knowledage.
By "unlock ast message", do you meant
ocfs2_locking_ast()->ocfs2_generic_handle_downconvert_action()?
If yes,
if l_blocking did not changed before ocfs2_generic_handle_downconvert_action(),
when l_level is set with a lower value, l_blocking must change.
So why we need to check l_level?
regards,
wengang.
On 10-02-03 10:16, Sunil Mushran wrote:
> This patch plugs a race between the downconvert thread and an unlock ast message.
> Specifically, after the downconvert worker has done its task, the dc thread needs
> to check whether an unlock ast made the downconvert moot.
>
> Reported-by: David Teigland <teigland at redhat.com>
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
> Acked-by: Mark Fasheh <mfasheh at sus.com>
> ---
> fs/ocfs2/dlmglue.c | 4 +++-
> 1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
> index 1c4d704..28b3e21 100644
> --- a/fs/ocfs2/dlmglue.c
> +++ b/fs/ocfs2/dlmglue.c
> @@ -3384,6 +3384,7 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb,
> unsigned long flags;
> int blocking;
> int new_level;
> + int level;
> int ret = 0;
> int set_lvb = 0;
> unsigned int gen;
> @@ -3503,6 +3504,7 @@ recheck:
> * may sleep, so we save off a copy of what we're blocking as
> * it may change while we're not holding the spin lock. */
> blocking = lockres->l_blocking;
> + level = lockres->l_level;
> spin_unlock_irqrestore(&lockres->l_lock, flags);
>
> ctl->unblock_action = lockres->l_ops->downconvert_worker(lockres, blocking);
> @@ -3511,7 +3513,7 @@ recheck:
> goto leave;
>
> spin_lock_irqsave(&lockres->l_lock, flags);
> - if (blocking != lockres->l_blocking) {
> + if ((blocking != lockres->l_blocking) || (level != lockres->l_level)) {
> /* If this changed underneath us, then we can't drop
> * it just yet. */
> goto recheck;
> --
> 1.6.3.3
>
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
More information about the Ocfs2-devel
mailing list