[Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests
Sunil Mushran
sunil.mushran at oracle.com
Thu Aug 20 17:35:26 PDT 2009
Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
Goldwyn Rodrigues wrote:
> In case a downconvert is queued, and a flock receives a signal,
> BUG_ON(lockres->l_action != OCFS2_AST_INVALID) is triggered
> because a lock cancel triggers a dlmunlock while an AST is
> scheduled.
>
> To avoid this, allow a LKM_CANCEL to pass through, and let it
> wait on __dlm_wait_on_lockres().
>
> Signed-off-by: Goldwyn Rodrigues <rgoldwyn at suse.de>
> Signed-off-by: Mark Fasheh <mfasheh at suse.com>
> ---
> diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c
> index fcf879e..756f5b0 100644
> --- a/fs/ocfs2/dlm/dlmunlock.c
> +++ b/fs/ocfs2/dlm/dlmunlock.c
> @@ -122,7 +122,7 @@ static enum dlm_status dlmunlock_common(struct
> dlm_ctxt *dlm,
> * that still has AST's pending... */
> in_use = !list_empty(&lock->ast_list);
> spin_unlock(&dlm->ast_lock);
> - if (in_use) {
> + if (in_use && !(flags & LKM_CANCEL)) {
> mlog(ML_ERROR, "lockres %.*s: Someone is calling dlmunlock "
> "while waiting for an ast!", res->lockname.len,
> res->lockname.name);
> @@ -131,7 +131,7 @@ static enum dlm_status dlmunlock_common(struct
> dlm_ctxt *dlm,
>
> spin_lock(&res->spinlock);
> if (res->state & DLM_LOCK_RES_IN_PROGRESS) {
> - if (master_node) {
> + if (master_node && !(flags & LKM_CANCEL)) {
> mlog(ML_ERROR, "lockres in progress!\n");
> spin_unlock(&res->spinlock);
> return DLM_FORWARD;
>
> _______________________________________________
> 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