diff options
Diffstat (limited to 'fs/ocfs2/dlm/dlmunlock.c')
| -rw-r--r-- | fs/ocfs2/dlm/dlmunlock.c | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c index 5698b52cf5c..2e3c9dbab68 100644 --- a/fs/ocfs2/dlm/dlmunlock.c +++ b/fs/ocfs2/dlm/dlmunlock.c @@ -191,7 +191,9 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,  				     DLM_UNLOCK_CLEAR_CONVERT_TYPE);  		} else if (status == DLM_RECOVERING ||  			   status == DLM_MIGRATING || -			   status == DLM_FORWARD) { +			   status == DLM_FORWARD || +			   status == DLM_NOLOCKMGR +			   ) {  			/* must clear the actions because this unlock  			 * is about to be retried.  cannot free or do  			 * any list manipulation. */ @@ -200,7 +202,8 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,  			     res->lockname.name,  			     status==DLM_RECOVERING?"recovering":  			     (status==DLM_MIGRATING?"migrating": -			      "forward")); +				(status == DLM_FORWARD ? "forward" : +						"nolockmanager")));  			actions = 0;  		}  		if (flags & LKM_CANCEL) @@ -364,7 +367,10 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm,  			 * updated state to the recovery master.  this thread  			 * just needs to finish out the operation and call  			 * the unlockast. */ -			ret = DLM_NORMAL; +			if (dlm_is_node_dead(dlm, owner)) +				ret = DLM_NORMAL; +			else +				ret = DLM_NOLOCKMGR;  		} else {  			/* something bad.  this will BUG in ocfs2 */  			ret = dlm_err_to_dlm_status(tmpret); @@ -638,7 +644,9 @@ retry:  	if (status == DLM_RECOVERING ||  	    status == DLM_MIGRATING || -	    status == DLM_FORWARD) { +	    status == DLM_FORWARD || +	    status == DLM_NOLOCKMGR) { +  		/* We want to go away for a tiny bit to allow recovery  		 * / migration to complete on this resource. I don't  		 * know of any wait queue we could sleep on as this @@ -650,7 +658,7 @@ retry:  		msleep(50);  		mlog(0, "retrying unlock due to pending recovery/" -		     "migration/in-progress\n"); +		     "migration/in-progress/reconnect\n");  		goto retry;  	}  | 
