diff options
Diffstat (limited to 'fs/ocfs2/dlm')
| -rw-r--r-- | fs/ocfs2/dlm/Makefile | 2 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmcommon.h | 5 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmdebug.c | 2 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmdomain.c | 46 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmlock.c | 2 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmmaster.c | 79 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmrecovery.c | 49 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmthread.c | 13 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmunlock.c | 18 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmver.c | 42 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmver.h | 31 | 
11 files changed, 159 insertions, 130 deletions
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile index c8a044efbb1..bd1aab1f49a 100644 --- a/fs/ocfs2/dlm/Makefile +++ b/fs/ocfs2/dlm/Makefile @@ -3,5 +3,5 @@ ccflags-y := -Ifs/ocfs2  obj-$(CONFIG_OCFS2_FS_O2CB) += ocfs2_dlm.o  ocfs2_dlm-objs := dlmdomain.o dlmdebug.o dlmthread.o dlmrecovery.o \ -	dlmmaster.o dlmast.o dlmconvert.o dlmlock.o dlmunlock.o dlmver.o +	dlmmaster.o dlmast.o dlmconvert.o dlmlock.o dlmunlock.o diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h index e0517762fcc..fae17c640df 100644 --- a/fs/ocfs2/dlm/dlmcommon.h +++ b/fs/ocfs2/dlm/dlmcommon.h @@ -108,7 +108,6 @@ static inline int dlm_is_recovery_lock(const char *lock_name, int name_len)  struct dlm_recovery_ctxt  {  	struct list_head resources; -	struct list_head received;  	struct list_head node_data;  	u8  new_master;  	u8  dead_node; @@ -332,6 +331,7 @@ struct dlm_lock_resource  	u16 state;  	char lvb[DLM_LVB_LEN];  	unsigned int inflight_locks; +	unsigned int inflight_assert_workers;  	unsigned long refmap[BITS_TO_LONGS(O2NM_MAX_NODES)];  }; @@ -911,6 +911,9 @@ void dlm_lockres_drop_inflight_ref(struct dlm_ctxt *dlm,  void dlm_lockres_grab_inflight_ref(struct dlm_ctxt *dlm,  				   struct dlm_lock_resource *res); +void __dlm_lockres_grab_inflight_worker(struct dlm_ctxt *dlm, +		struct dlm_lock_resource *res); +  void dlm_queue_ast(struct dlm_ctxt *dlm, struct dlm_lock *lock);  void dlm_queue_bast(struct dlm_ctxt *dlm, struct dlm_lock *lock);  void __dlm_queue_ast(struct dlm_ctxt *dlm, struct dlm_lock *lock); diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c index e33cd7a3c58..18f13c2e4a1 100644 --- a/fs/ocfs2/dlm/dlmdebug.c +++ b/fs/ocfs2/dlm/dlmdebug.c @@ -338,7 +338,7 @@ void dlm_print_one_mle(struct dlm_master_list_entry *mle)  #ifdef CONFIG_DEBUG_FS -static struct dentry *dlm_debugfs_root = NULL; +static struct dentry *dlm_debugfs_root;  #define DLM_DEBUGFS_DIR				"o2dlm"  #define DLM_DEBUGFS_DLM_STATE			"dlm_state" diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c index 8b3382abf84..39efc5057a3 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c @@ -43,8 +43,6 @@  #include "dlmdomain.h"  #include "dlmdebug.h" -#include "dlmver.h" -  #define MLOG_MASK_PREFIX (ML_DLM|ML_DLM_DOMAIN)  #include "cluster/masklog.h" @@ -961,6 +959,14 @@ static int dlm_assert_joined_handler(struct o2net_msg *msg, u32 len, void *data,  		 * domain. Set him in the map and clean up our  		 * leftover join state. */  		BUG_ON(dlm->joining_node != assert->node_idx); + +		if (dlm->reco.state & DLM_RECO_STATE_ACTIVE) { +			mlog(0, "dlm recovery is ongoing, disallow join\n"); +			spin_unlock(&dlm->spinlock); +			spin_unlock(&dlm_domain_lock); +			return -EAGAIN; +		} +  		set_bit(assert->node_idx, dlm->domain_map);  		clear_bit(assert->node_idx, dlm->exit_domain_map);  		__dlm_set_joining_node(dlm, DLM_LOCK_RES_OWNER_UNKNOWN); @@ -1125,7 +1131,6 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len,  	struct dlm_ctxt *dlm = NULL;  	char *local = NULL;  	int status = 0; -	int locked = 0;  	qr = (struct dlm_query_region *) msg->buf; @@ -1134,10 +1139,8 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len,  	/* buffer used in dlm_mast_regions() */  	local = kmalloc(sizeof(qr->qr_regions), GFP_KERNEL); -	if (!local) { -		status = -ENOMEM; -		goto bail; -	} +	if (!local) +		return -ENOMEM;  	status = -EINVAL; @@ -1146,16 +1149,15 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len,  	if (!dlm) {  		mlog(ML_ERROR, "Node %d queried hb regions on domain %s "  		     "before join domain\n", qr->qr_node, qr->qr_domain); -		goto bail; +		goto out_domain_lock;  	}  	spin_lock(&dlm->spinlock); -	locked = 1;  	if (dlm->joining_node != qr->qr_node) {  		mlog(ML_ERROR, "Node %d queried hb regions on domain %s "  		     "but joining node is %d\n", qr->qr_node, qr->qr_domain,  		     dlm->joining_node); -		goto bail; +		goto out_dlm_lock;  	}  	/* Support for global heartbeat was added in 1.1 */ @@ -1165,14 +1167,15 @@ static int dlm_query_region_handler(struct o2net_msg *msg, u32 len,  		     "but active dlm protocol is %d.%d\n", qr->qr_node,  		     qr->qr_domain, dlm->dlm_locking_proto.pv_major,  		     dlm->dlm_locking_proto.pv_minor); -		goto bail; +		goto out_dlm_lock;  	}  	status = dlm_match_regions(dlm, qr, local, sizeof(qr->qr_regions)); -bail: -	if (locked) -		spin_unlock(&dlm->spinlock); +out_dlm_lock: +	spin_unlock(&dlm->spinlock); + +out_domain_lock:  	spin_unlock(&dlm_domain_lock);  	kfree(local); @@ -1522,6 +1525,7 @@ static int dlm_send_one_join_assert(struct dlm_ctxt *dlm,  				    unsigned int node)  {  	int status; +	int ret;  	struct dlm_assert_joined assert_msg;  	mlog(0, "Sending join assert to node %u\n", node); @@ -1533,11 +1537,13 @@ static int dlm_send_one_join_assert(struct dlm_ctxt *dlm,  	status = o2net_send_message(DLM_ASSERT_JOINED_MSG, DLM_MOD_KEY,  				    &assert_msg, sizeof(assert_msg), node, -				    NULL); +				    &ret);  	if (status < 0)  		mlog(ML_ERROR, "Error %d when sending message %u (key 0x%x) to "  		     "node %u\n", status, DLM_ASSERT_JOINED_MSG, DLM_MOD_KEY,  		     node); +	else +		status = ret;  	return status;  } @@ -1879,19 +1885,19 @@ static int dlm_join_domain(struct dlm_ctxt *dlm)  		goto bail;  	} -	status = dlm_debug_init(dlm); +	status = dlm_launch_thread(dlm);  	if (status < 0) {  		mlog_errno(status);  		goto bail;  	} -	status = dlm_launch_thread(dlm); +	status = dlm_launch_recovery_thread(dlm);  	if (status < 0) {  		mlog_errno(status);  		goto bail;  	} -	status = dlm_launch_recovery_thread(dlm); +	status = dlm_debug_init(dlm);  	if (status < 0) {  		mlog_errno(status);  		goto bail; @@ -2028,7 +2034,6 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain,  	INIT_LIST_HEAD(&dlm->list);  	INIT_LIST_HEAD(&dlm->dirty_list);  	INIT_LIST_HEAD(&dlm->reco.resources); -	INIT_LIST_HEAD(&dlm->reco.received);  	INIT_LIST_HEAD(&dlm->reco.node_data);  	INIT_LIST_HEAD(&dlm->purge_list);  	INIT_LIST_HEAD(&dlm->dlm_domain_handlers); @@ -2328,8 +2333,6 @@ static int __init dlm_init(void)  {  	int status; -	dlm_print_version(); -  	status = dlm_init_mle_cache();  	if (status) {  		mlog(ML_ERROR, "Could not create o2dlm_mle slabcache\n"); @@ -2379,6 +2382,7 @@ static void __exit dlm_exit (void)  MODULE_AUTHOR("Oracle");  MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("OCFS2 Distributed Lock Management");  module_init(dlm_init);  module_exit(dlm_exit); diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c index 5d32f7511f7..66c2a491f68 100644 --- a/fs/ocfs2/dlm/dlmlock.c +++ b/fs/ocfs2/dlm/dlmlock.c @@ -52,7 +52,7 @@  #define MLOG_MASK_PREFIX ML_DLM  #include "cluster/masklog.h" -static struct kmem_cache *dlm_lock_cache = NULL; +static struct kmem_cache *dlm_lock_cache;  static DEFINE_SPINLOCK(dlm_cookie_lock);  static u64 dlm_next_cookie = 1; diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index cf0f103963b..82abf0cc9a1 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c @@ -82,9 +82,9 @@ static inline int dlm_mle_equal(struct dlm_ctxt *dlm,  	return 1;  } -static struct kmem_cache *dlm_lockres_cache = NULL; -static struct kmem_cache *dlm_lockname_cache = NULL; -static struct kmem_cache *dlm_mle_cache = NULL; +static struct kmem_cache *dlm_lockres_cache; +static struct kmem_cache *dlm_lockname_cache; +static struct kmem_cache *dlm_mle_cache;  static void dlm_mle_release(struct kref *kref);  static void dlm_init_mle(struct dlm_master_list_entry *mle, @@ -472,11 +472,15 @@ bail:  void dlm_destroy_master_caches(void)  { -	if (dlm_lockname_cache) +	if (dlm_lockname_cache) {  		kmem_cache_destroy(dlm_lockname_cache); +		dlm_lockname_cache = NULL; +	} -	if (dlm_lockres_cache) +	if (dlm_lockres_cache) {  		kmem_cache_destroy(dlm_lockres_cache); +		dlm_lockres_cache = NULL; +	}  }  static void dlm_lockres_release(struct kref *kref) @@ -577,6 +581,7 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm,  	atomic_set(&res->asts_reserved, 0);  	res->migration_pending = 0;  	res->inflight_locks = 0; +	res->inflight_assert_workers = 0;  	res->dlm = dlm; @@ -679,6 +684,43 @@ void dlm_lockres_drop_inflight_ref(struct dlm_ctxt *dlm,  	wake_up(&res->wq);  } +void __dlm_lockres_grab_inflight_worker(struct dlm_ctxt *dlm, +		struct dlm_lock_resource *res) +{ +	assert_spin_locked(&res->spinlock); +	res->inflight_assert_workers++; +	mlog(0, "%s:%.*s: inflight assert worker++: now %u\n", +			dlm->name, res->lockname.len, res->lockname.name, +			res->inflight_assert_workers); +} + +static void dlm_lockres_grab_inflight_worker(struct dlm_ctxt *dlm, +		struct dlm_lock_resource *res) +{ +	spin_lock(&res->spinlock); +	__dlm_lockres_grab_inflight_worker(dlm, res); +	spin_unlock(&res->spinlock); +} + +static void __dlm_lockres_drop_inflight_worker(struct dlm_ctxt *dlm, +		struct dlm_lock_resource *res) +{ +	assert_spin_locked(&res->spinlock); +	BUG_ON(res->inflight_assert_workers == 0); +	res->inflight_assert_workers--; +	mlog(0, "%s:%.*s: inflight assert worker--: now %u\n", +			dlm->name, res->lockname.len, res->lockname.name, +			res->inflight_assert_workers); +} + +static void dlm_lockres_drop_inflight_worker(struct dlm_ctxt *dlm, +		struct dlm_lock_resource *res) +{ +	spin_lock(&res->spinlock); +	__dlm_lockres_drop_inflight_worker(dlm, res); +	spin_unlock(&res->spinlock); +} +  /*   * lookup a lock resource by name.   * may already exist in the hashtable. @@ -1599,7 +1641,8 @@ send_response:  			mlog(ML_ERROR, "failed to dispatch assert master work\n");  			response = DLM_MASTER_RESP_ERROR;  			dlm_lockres_put(res); -		} +		} else +			dlm_lockres_grab_inflight_worker(dlm, res);  	} else {  		if (res)  			dlm_lockres_put(res); @@ -1885,8 +1928,10 @@ ok:  			 * up nodes that this node contacted */  			while ((nn = find_next_bit (mle->response_map, O2NM_MAX_NODES,  						    nn+1)) < O2NM_MAX_NODES) { -				if (nn != dlm->node_num && nn != assert->node_idx) +				if (nn != dlm->node_num && nn != assert->node_idx) {  					master_request = 1; +					break; +				}  			}  		}  		mle->master = assert->node_idx; @@ -2112,6 +2157,8 @@ static void dlm_assert_master_worker(struct dlm_work_item *item, void *data)  	dlm_lockres_release_ast(dlm, res);  put: +	dlm_lockres_drop_inflight_worker(dlm, res); +  	dlm_lockres_put(res);  	mlog(0, "finished with dlm_assert_master_worker\n"); @@ -2354,6 +2401,10 @@ static int dlm_is_lockres_migrateable(struct dlm_ctxt *dlm,  	assert_spin_locked(&res->spinlock); +	/* delay migration when the lockres is in MIGRATING state */ +	if (res->state & DLM_LOCK_RES_MIGRATING) +		return 0; +  	if (res->owner != dlm->node_num)  		return 0; @@ -3078,11 +3129,15 @@ static int dlm_add_migration_mle(struct dlm_ctxt *dlm,  			/* remove it so that only one mle will be found */  			__dlm_unlink_mle(dlm, tmp);  			__dlm_mle_detach_hb_events(dlm, tmp); -			ret = DLM_MIGRATE_RESPONSE_MASTERY_REF; -			mlog(0, "%s:%.*s: master=%u, newmaster=%u, " -			    "telling master to get ref for cleared out mle " -			    "during migration\n", dlm->name, namelen, name, -			    master, new_master); +			if (tmp->type == DLM_MLE_MASTER) { +				ret = DLM_MIGRATE_RESPONSE_MASTERY_REF; +				mlog(0, "%s:%.*s: master=%u, newmaster=%u, " +						"telling master to get ref " +						"for cleared out mle during " +						"migration\n", dlm->name, +						namelen, name, master, +						new_master); +			}  		}  		spin_unlock(&tmp->spinlock);  	} diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index 0b5adca1b17..45067faf569 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c @@ -537,7 +537,10 @@ master_here:  		/* success!  see if any other nodes need recovery */  		mlog(0, "DONE mastering recovery of %s:%u here(this=%u)!\n",  		     dlm->name, dlm->reco.dead_node, dlm->node_num); -		dlm_reset_recovery(dlm); +		spin_lock(&dlm->spinlock); +		__dlm_reset_recovery(dlm); +		dlm->reco.state &= ~DLM_RECO_STATE_FINALIZE; +		spin_unlock(&dlm->spinlock);  	}  	dlm_end_recovery(dlm); @@ -695,6 +698,14 @@ static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node)  		if (all_nodes_done) {  			int ret; +			/* Set this flag on recovery master to avoid +			 * a new recovery for another dead node start +			 * before the recovery is not done. That may +			 * cause recovery hung.*/ +			spin_lock(&dlm->spinlock); +			dlm->reco.state |= DLM_RECO_STATE_FINALIZE; +			spin_unlock(&dlm->spinlock); +  			/* all nodes are now in DLM_RECO_NODE_DATA_DONE state  	 		 * just send a finalize message to everyone and  	 		 * clean up */ @@ -1697,7 +1708,8 @@ int dlm_master_requery_handler(struct o2net_msg *msg, u32 len, void *data,  				mlog_errno(-ENOMEM);  				/* retry!? */  				BUG(); -			} +			} else +				__dlm_lockres_grab_inflight_worker(dlm, res);  		} else /* put.. incase we are not the master */  			dlm_lockres_put(res);  		spin_unlock(&res->spinlock); @@ -1750,13 +1762,13 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,  				     struct dlm_migratable_lockres *mres)  {  	struct dlm_migratable_lock *ml; -	struct list_head *queue; +	struct list_head *queue, *iter;  	struct list_head *tmpq = NULL;  	struct dlm_lock *newlock = NULL;  	struct dlm_lockstatus *lksb = NULL;  	int ret = 0;  	int i, j, bad; -	struct dlm_lock *lock = NULL; +	struct dlm_lock *lock;  	u8 from = O2NM_MAX_NODES;  	unsigned int added = 0;  	__be64 c; @@ -1791,14 +1803,16 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,  			/* MIGRATION ONLY! */  			BUG_ON(!(mres->flags & DLM_MRES_MIGRATION)); +			lock = NULL;  			spin_lock(&res->spinlock);  			for (j = DLM_GRANTED_LIST; j <= DLM_BLOCKED_LIST; j++) {  				tmpq = dlm_list_idx_to_ptr(res, j); -				list_for_each_entry(lock, tmpq, list) { -					if (lock->ml.cookie != ml->cookie) -						lock = NULL; -					else +				list_for_each(iter, tmpq) { +					lock = list_entry(iter, +						  struct dlm_lock, list); +					if (lock->ml.cookie == ml->cookie)  						break; +					lock = NULL;  				}  				if (lock)  					break; @@ -1886,6 +1900,13 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,  		if (ml->type == LKM_NLMODE)  			goto skip_lvb; +		/* +		 * If the lock is in the blocked list it can't have a valid lvb, +		 * so skip it +		 */ +		if (ml->list == DLM_BLOCKED_LIST) +			goto skip_lvb; +  		if (!dlm_lvb_is_empty(mres->lvb)) {  			if (lksb->flags & DLM_LKSB_PUT_LVB) {  				/* other node was trying to update @@ -1966,7 +1987,15 @@ skip_lvb:  		}  		if (!bad) {  			dlm_lock_get(newlock); -			list_add_tail(&newlock->list, queue); +			if (mres->flags & DLM_MRES_RECOVERY && +					ml->list == DLM_CONVERTING_LIST && +					newlock->ml.type > +					newlock->ml.convert_type) { +				/* newlock is doing downconvert, add it to the +				 * head of converting list */ +				list_add(&newlock->list, queue); +			} else +				list_add_tail(&newlock->list, queue);  			mlog(0, "%s:%.*s: added lock for node %u, "  			     "setting refmap bit\n", dlm->name,  			     res->lockname.len, res->lockname.name, ml->node); @@ -2875,8 +2904,8 @@ int dlm_finalize_reco_handler(struct o2net_msg *msg, u32 len, void *data,  				BUG();  			}  			dlm->reco.state &= ~DLM_RECO_STATE_FINALIZE; +			__dlm_reset_recovery(dlm);  			spin_unlock(&dlm->spinlock); -			dlm_reset_recovery(dlm);  			dlm_kick_recovery_thread(dlm);  			break;  		default: diff --git a/fs/ocfs2/dlm/dlmthread.c b/fs/ocfs2/dlm/dlmthread.c index 9db869de829..69aac6f088a 100644 --- a/fs/ocfs2/dlm/dlmthread.c +++ b/fs/ocfs2/dlm/dlmthread.c @@ -259,12 +259,15 @@ static void dlm_run_purge_list(struct dlm_ctxt *dlm,  		 * refs on it. */  		unused = __dlm_lockres_unused(lockres);  		if (!unused || -		    (lockres->state & DLM_LOCK_RES_MIGRATING)) { +		    (lockres->state & DLM_LOCK_RES_MIGRATING) || +		    (lockres->inflight_assert_workers != 0)) {  			mlog(0, "%s: res %.*s is in use or being remastered, " -			     "used %d, state %d\n", dlm->name, -			     lockres->lockname.len, lockres->lockname.name, -			     !unused, lockres->state); -			list_move_tail(&dlm->purge_list, &lockres->purge); +			     "used %d, state %d, assert master workers %u\n", +			     dlm->name, lockres->lockname.len, +			     lockres->lockname.name, +			     !unused, lockres->state, +			     lockres->inflight_assert_workers); +			list_move_tail(&lockres->purge, &dlm->purge_list);  			spin_unlock(&lockres->spinlock);  			continue;  		} 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;  	} diff --git a/fs/ocfs2/dlm/dlmver.c b/fs/ocfs2/dlm/dlmver.c deleted file mode 100644 index dfc0da4d158..00000000000 --- a/fs/ocfs2/dlm/dlmver.c +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- mode: c; c-basic-offset: 8; -*- - * vim: noexpandtab sw=8 ts=8 sts=0: - * - * dlmver.c - * - * version string - * - * Copyright (C) 2002, 2005 Oracle.  All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA. - */ - -#include <linux/module.h> -#include <linux/kernel.h> - -#include "dlmver.h" - -#define DLM_BUILD_VERSION "1.5.0" - -#define VERSION_STR "OCFS2 DLM " DLM_BUILD_VERSION - -void dlm_print_version(void) -{ -	printk(KERN_INFO "%s\n", VERSION_STR); -} - -MODULE_DESCRIPTION(VERSION_STR); - -MODULE_VERSION(DLM_BUILD_VERSION); diff --git a/fs/ocfs2/dlm/dlmver.h b/fs/ocfs2/dlm/dlmver.h deleted file mode 100644 index f674aee77a1..00000000000 --- a/fs/ocfs2/dlm/dlmver.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- mode: c; c-basic-offset: 8; -*- - * vim: noexpandtab sw=8 ts=8 sts=0: - * - * dlmfsver.h - * - * Function prototypes - * - * Copyright (C) 2005 Oracle.  All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA. - */ - -#ifndef DLM_VER_H -#define DLM_VER_H - -void dlm_print_version(void); - -#endif /* DLM_VER_H */  | 
