All of lore.kernel.org
 help / color / mirror / Atom feed
* [Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests
@ 2009-08-20 18:43 Goldwyn Rodrigues
  2009-08-21  0:35 ` Sunil Mushran
  2009-08-21  1:49 ` Joel Becker
  0 siblings, 2 replies; 3+ messages in thread
From: Goldwyn Rodrigues @ 2009-08-20 18:43 UTC (permalink / raw)
  To: ocfs2-devel

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@suse.de>
Signed-off-by: Mark Fasheh <mfasheh@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;

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests
  2009-08-20 18:43 [Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests Goldwyn Rodrigues
@ 2009-08-21  0:35 ` Sunil Mushran
  2009-08-21  1:49 ` Joel Becker
  1 sibling, 0 replies; 3+ messages in thread
From: Sunil Mushran @ 2009-08-21  0:35 UTC (permalink / raw)
  To: ocfs2-devel

Signed-off-by: Sunil Mushran <sunil.mushran@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@suse.de>
> Signed-off-by: Mark Fasheh <mfasheh@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
>   

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests
  2009-08-20 18:43 [Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests Goldwyn Rodrigues
  2009-08-21  0:35 ` Sunil Mushran
@ 2009-08-21  1:49 ` Joel Becker
  1 sibling, 0 replies; 3+ messages in thread
From: Joel Becker @ 2009-08-21  1:49 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Aug 20, 2009 at 01:43:19PM -0500, 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@suse.de>
> Signed-off-by: Mark Fasheh <mfasheh@suse.com>

This patch is now part of the fixes branch of ocfs2.git.

Joel

-- 

"Friends may come and go, but enemies accumulate." 
        - Thomas Jones

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-08-21  1:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-20 18:43 [Ocfs2-devel] [PATCH] ocfs2/dlm: Wait on lockres instead of erroring cancel requests Goldwyn Rodrigues
2009-08-21  0:35 ` Sunil Mushran
2009-08-21  1:49 ` Joel Becker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.