nak

The reason is listed in yesterday's email.

Coly Li wrote:
> dlm_get_lock_resource() is supposed to return a lock resource with a proper 
> master. If multiple
> concurrent threads attempt to lookup the lockres for the same lockid, one or 
> more threads are likely
> to return a lockres without a proper master, if the lock mastery is underway.
>
> This patch makes the threads wait in dlm_get_lock_resource() while the 
> mastery is underway, ensuring
> all threads return the lockres with a proper master.
>
> This issue is known limited to users using the flock() syscall. For all other 
> fs operations, dlmglue
> should ensure that only one thread is performing dlm operations for a given 
> lockid at any one time.
>
> Thank Sunil for his review and comments.
>
> Signed-off-by: Coly Li <[EMAIL PROTECTED]>
> Cc: Sunil Mushran <[EMAIL PROTECTED]>
> Cc: Mark Fasheh <[EMAIL PROTECTED]>
> Cc: Jeff Mahoney <[EMAIL PROTECTED]>
> ---
>  fs/ocfs2/dlm/dlmmaster.c |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)
>
> diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
> index 44f87ca..dd1e754 100644
> --- a/fs/ocfs2/dlm/dlmmaster.c
> +++ b/fs/ocfs2/dlm/dlmmaster.c
> @@ -742,6 +742,17 @@ lookup:
>                       goto lookup;
>               }
>
> +             /* wait for lock resource is being mastered by another thread */
> +             spin_lock(&tmpres->spinlock);
> +             if (tmpres->owner == DLM_LOCK_RES_OWNER_UNKNOWN) {
> +                     __dlm_wait_on_lockres_flags(tmpres, 
> DLM_LOCK_RES_IN_PROGRESS);
> +                     spin_unlock(&tmpres->spinlock);
> +                     dlm_lockres_put(tmpres);
> +                     tmpres = NULL;
> +                     goto lookup;
> +             }
> +             spin_unlock(&tmpres->spinlock);
> +
>               mlog(0, "found in hash!\n");
>               if (res)
>                       dlm_lockres_put(res);
>   


_______________________________________________
Ocfs2-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to