diff options
Diffstat (limited to 'fs/ocfs2/dlm/dlmthread.c')
| -rw-r--r-- | fs/ocfs2/dlm/dlmthread.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/fs/ocfs2/dlm/dlmthread.c b/fs/ocfs2/dlm/dlmthread.c index 1d6d1d22c47..e73c833fc2a 100644 --- a/fs/ocfs2/dlm/dlmthread.c +++ b/fs/ocfs2/dlm/dlmthread.c @@ -94,24 +94,26 @@ int __dlm_lockres_unused(struct dlm_lock_resource *res)  {  	int bit; +	assert_spin_locked(&res->spinlock); +  	if (__dlm_lockres_has_locks(res))  		return 0; +	/* Locks are in the process of being created */ +	if (res->inflight_locks) +		return 0; +  	if (!list_empty(&res->dirty) || res->state & DLM_LOCK_RES_DIRTY)  		return 0;  	if (res->state & DLM_LOCK_RES_RECOVERING)  		return 0; +	/* Another node has this resource with this node as the master */  	bit = find_next_bit(res->refmap, O2NM_MAX_NODES, 0);  	if (bit < O2NM_MAX_NODES)  		return 0; -	/* -	 * since the bit for dlm->node_num is not set, inflight_locks better -	 * be zero -	 */ -	BUG_ON(res->inflight_locks != 0);  	return 1;  } @@ -185,8 +187,6 @@ static void dlm_purge_lockres(struct dlm_ctxt *dlm,  		/* clear our bit from the master's refmap, ignore errors */  		ret = dlm_drop_lockres_ref(dlm, res);  		if (ret < 0) { -			mlog(ML_ERROR, "%s: deref %.*s failed %d\n", dlm->name, -			     res->lockname.len, res->lockname.name, ret);  			if (!dlm_is_host_down(ret))  				BUG();  		} @@ -209,7 +209,7 @@ static void dlm_purge_lockres(struct dlm_ctxt *dlm,  		BUG();  	} -	__dlm_unhash_lockres(res); +	__dlm_unhash_lockres(dlm, res);  	/* lockres is not in the hash now.  drop the flag and wake up  	 * any processes waiting in dlm_get_lock_resource. */  |