[Ocfs2-commits] mfasheh commits r1650 - branches/dlm-glue/src

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Nov 15 20:21:26 CST 2004


Author: mfasheh
Date: 2004-11-15 20:21:24 -0600 (Mon, 15 Nov 2004)
New Revision: 1650

Modified:
   branches/dlm-glue/src/dlmglue.c
   branches/dlm-glue/src/dlmglue.h
   branches/dlm-glue/src/inode.c
   branches/dlm-glue/src/ocfs.h
Log:
* start cleanup up the lockres / lock structures. eventually we want
  to squish them together.



Modified: branches/dlm-glue/src/dlmglue.c
===================================================================
--- branches/dlm-glue/src/dlmglue.c	2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/dlmglue.c	2004-11-16 02:21:24 UTC (rev 1650)
@@ -119,13 +119,15 @@
 	[OCFS_TYPE_META]	ocfs2_bast_func,
 	[OCFS_TYPE_DATA] 	ocfs2_bast_func
 };
-static int ocfs2_lock_create(struct inode *inode,
+static int ocfs2_lock_create(ocfs_super *osb,
+			     ocfs2_lock_res *lockres,
 			     ocfs2_lock *lock,
 			     int level,
 			     int flags);
 static inline int ocfs2_may_continue_on_blocked_lock(ocfs2_lock *lock,
 						     int wanted);
-static int ocfs2_cluster_lock(struct inode *inode, 
+static int ocfs2_cluster_lock(ocfs_super *osb,
+			      ocfs2_lock_res *lockres,
 			      ocfs2_lock *lock, 
 			      int level);
 static void ocfs2_unlock_ast_func(void *opaque, dlm_status status);
@@ -200,10 +202,9 @@
 }
 
 /* fill in new values as we add them to the lvb. */
-static inline void ocfs2_meta_lvb_get_values(struct inode *inode, 
+static inline void ocfs2_meta_lvb_get_values(ocfs2_lock_res *lockres,
 					     unsigned int *trunc_clusters)
 {
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
 	ocfs2_lock *lock = &lockres->lr_meta;
 	ocfs2_meta_lvb *lvb;
 
@@ -261,9 +262,7 @@
 	memset(res, 0, sizeof(ocfs2_lock_res));
 
 	spin_lock_init(&res->lr_lock);
-	init_waitqueue_head(&res->lr_busy);
-	init_waitqueue_head (&res->lr_blocked);
-	init_waitqueue_head(&res->lr_refreshing);
+	init_waitqueue_head(&res->l_event);
 	res->lr_inode = inode;
 
 	/* build the data and metadata locks. */
@@ -351,7 +350,7 @@
 	lock->l_blocking = LKM_NLMODE;
 	lock->l_flags &= ~OCFS2_LOCK_BLOCKED;
 	lock->l_flags &= ~OCFS2_LOCK_BUSY;
-	wake_up_all(&lock->l_lockres->lr_blocked);
+	wake_up_all(&lock->l_lockres->l_event);
 }
 
 static inline void ocfs2_handle_data_convert_action(struct inode *inode,
@@ -476,7 +475,7 @@
 	 * can catch it. */
 	lock->l_action = OCFS2_AST_INVALID;
 	spin_unlock(&lockres->lr_lock);
-	wake_up_all(&lockres->lr_busy);
+	wake_up_all(&lockres->l_event);
 }
 
 static void ocfs2_bast_func(void *opaque, int level)
@@ -511,7 +510,8 @@
 	spin_unlock(&lockres->lr_lock);
 }
 
-static int ocfs2_lock_create(struct inode *inode,
+static int ocfs2_lock_create(ocfs_super *osb,
+			     ocfs2_lock_res *lockres,
 			     ocfs2_lock *lock,
 			     int level,
 			     int flags)
@@ -519,8 +519,6 @@
 	int ret = 0;
 	enum ocfs2_lock_type type = lock->l_type;
 	dlm_status status;
-	ocfs_super *osb = OCFS2_SB(inode->i_sb);
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
 
 	LOG_ENTRY();
 
@@ -569,7 +567,7 @@
 					   ocfs2_lock *lock)
 
 {
-	wait_event_interruptible(lockres->lr_busy,
+	wait_event_interruptible(lockres->l_event,
 				 !ocfs2_check_wait_flag(lockres,
 							lock,
 							OCFS2_LOCK_BUSY));
@@ -579,7 +577,7 @@
 					      ocfs2_lock *lock)
 
 {
-	wait_event_interruptible(lockres->lr_blocked,
+	wait_event_interruptible(lockres->l_event,
 				 !ocfs2_check_wait_flag(lockres,
 							lock,
 							OCFS2_LOCK_BLOCKED));
@@ -589,7 +587,7 @@
 						 ocfs2_lock *lock)
 
 {
-	wait_event_interruptible(lockres->lr_blocked,
+	wait_event_interruptible(lockres->l_event,
 				 !ocfs2_check_wait_flag(lockres,
 							lock,
 							OCFS2_LOCK_REFRESHING));}
@@ -605,14 +603,13 @@
 	return wanted <= ocfs2_highest_compat_lock_level(lock->l_blocking);
 }
 
-static int ocfs2_cluster_lock(struct inode *inode, 
+static int ocfs2_cluster_lock(ocfs_super *osb,
+			      ocfs2_lock_res *lockres,
 			      ocfs2_lock *lock, 
 			      int level)
 {
 	int ret;
 	enum ocfs2_lock_type type = lock->l_type;
-	ocfs_super *osb = OCFS2_SB(inode->i_sb);
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
 	dlm_status status;
 
 	LOG_ENTRY();
@@ -640,7 +637,7 @@
 	if (!(lock->l_flags & OCFS2_LOCK_ATTACHED)) {
 		/* lock has not been created yet. */
 		spin_unlock(&lockres->lr_lock);
-		ret = ocfs2_lock_create(inode, lock, LKM_NLMODE, 0);
+		ret = ocfs2_lock_create(osb, lockres, lock, LKM_NLMODE, 0);
 		if (ret < 0) {
 			LOG_ERROR_STATUS(ret);
 			goto bail;
@@ -703,7 +700,8 @@
 int ocfs2_create_new_inode_locks(struct inode *inode)
 {
 	int status;
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs_super *osb = OCFS2_SB(inode->i_sb);
+	ocfs2_lock_res *lockres;
 	ocfs2_lock *lock;
 
 	OCFS_ASSERT(inode);
@@ -719,22 +717,24 @@
 	 * on a resource which has an invalid one -- we'll set it
 	 * valid when we release the EX. */
 
+	lockres = &OCFS_I(inode)->ip_meta_lockres;
 	lock = &lockres->lr_meta;
 	OCFS_ASSERT(!(lock->l_flags & OCFS2_LOCK_ATTACHED));
 	lock->l_flags |= OCFS2_LOCK_LOCAL;
 
-	status = ocfs2_lock_create(inode, lock, LKM_EXMODE, LKM_LOCAL);
+	status = ocfs2_lock_create(osb, lockres, lock, LKM_EXMODE, LKM_LOCAL);
 	lock->l_flags &= ~OCFS2_LOCK_LOCAL;
 	if (status < 0) {
 		LOG_ERROR_STATUS(status);
 		goto bail;
 	}
 
+	lockres = &OCFS_I(inode)->ip_data_lockres;
 	lock = &lockres->lr_data;
 	OCFS_ASSERT(!(lock->l_flags & OCFS2_LOCK_ATTACHED));
 	lock->l_flags |= OCFS2_LOCK_LOCAL;
 
-	status = ocfs2_lock_create(inode, lock, LKM_EXMODE, LKM_LOCAL);
+	status = ocfs2_lock_create(osb, lockres, lock, LKM_EXMODE, LKM_LOCAL);
 	lock->l_flags &= ~OCFS2_LOCK_LOCAL;
 	if (status < 0) {
 		LOG_ERROR_STATUS(status);
@@ -751,17 +751,19 @@
 		    int write)
 {
 	int status, level;
+	ocfs2_lock_res *lockres;
 	ocfs2_lock *lock;
 
 	OCFS_ASSERT(inode);
 
 	LOG_ENTRY();
 
-	lock = &(OCFS_I(inode)->ip_lockres.lr_data);
+	lockres = &OCFS_I(inode)->ip_data_lockres;
+	lock = &lockres->lr_data;
 
 	level = write ? LKM_EXMODE : LKM_PRMODE;
 
-	status = ocfs2_cluster_lock(inode, lock, level);
+	status = ocfs2_cluster_lock(OCFS2_SB(inode->i_sb), lockres, lock, level);
 	if (status < 0 && status != -EINTR)
 		LOG_ERROR_STATUS(status);
 
@@ -800,7 +802,7 @@
 		       int write)
 {
 	int level;
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_data_lockres;
 	ocfs2_lock *lock = &lockres->lr_data;
 
 	level = write ? LKM_EXMODE : LKM_PRMODE;
@@ -829,7 +831,7 @@
 static void __ocfs2_stuff_meta_lvb(struct inode *inode)
 {
 	ocfs_inode_private *oip = OCFS_I(inode);
-	ocfs2_lock_res *lockres = &oip->ip_lockres;
+	ocfs2_lock_res *lockres = &oip->ip_meta_lockres;
 	ocfs2_meta_lvb *lvb     = (ocfs2_meta_lvb *) lockres->lr_meta.l_lksb.lvb;
 
 	lvb->lvb_iclusters = oip->ip_clusters;
@@ -846,7 +848,7 @@
 static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
 {
 	ocfs_inode_private *oip = OCFS_I(inode);
-	ocfs2_lock_res *lockres = &oip->ip_lockres;
+	ocfs2_lock_res *lockres = &oip->ip_meta_lockres;
 	ocfs2_meta_lvb *lvb     = (ocfs2_meta_lvb *) lockres->lr_meta.l_lksb.lvb;
 
 	/* We're safe here without the lockres lock... */
@@ -867,7 +869,7 @@
 
 static void ocfs2_reset_meta_lvb_values(struct inode *inode)
 {
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
 	ocfs2_lock *lock = &lockres->lr_meta;
 	ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lock->l_lksb.lvb;
 	u32 i_clusters;
@@ -911,7 +913,7 @@
 	ocfs2_lock *lock;
 	ocfs2_dinode *fe;
 
-	lockres = &OCFS_I(inode)->ip_lockres;
+	lockres = &OCFS_I(inode)->ip_meta_lockres;
 	lock = &lockres->lr_meta;
 
 refresh_check:
@@ -940,7 +942,7 @@
 	if (!(OCFS_I(inode)->ip_flags & OCFS_INODE_BITMAP) &&
 	    ocfs2_lvb_is_trustable(lock)) {
 		/* yay, fastpath! */
-		ocfs2_meta_lvb_get_values(inode, &trustable_clusters);
+		ocfs2_meta_lvb_get_values(lockres, &trustable_clusters);
 		ocfs2_refresh_inode_from_lvb(inode);
 	} else {
 		/* Boo, we have to go to disk. */
@@ -972,7 +974,7 @@
 
 	ocfs2_extent_map_trunc(inode, trustable_clusters);
 
-	ocfs2_set_local_seq_from_lvb(&OCFS_I(inode)->ip_lockres.lr_meta);
+	ocfs2_set_local_seq_from_lvb(&OCFS_I(inode)->ip_meta_lockres.lr_meta);
 	ocfs2_reset_meta_lvb_values(inode);
 
 	spin_lock(&lockres->lr_lock);
@@ -980,7 +982,7 @@
 	lock->l_flags &= ~OCFS2_LOCK_NEEDS_REFRESH;
 	spin_unlock(&lockres->lr_lock);
 
-	wake_up_all(&lockres->lr_refreshing);
+	wake_up_all(&lockres->l_event);
 bail:
 	return status;
 }
@@ -1016,11 +1018,11 @@
 			goto bail;
 	}
 
-	lockres = &OCFS_I(inode)->ip_lockres;
-	lock = &(OCFS_I(inode)->ip_lockres.lr_meta);
+	lockres = &OCFS_I(inode)->ip_meta_lockres;
+	lock = &(OCFS_I(inode)->ip_meta_lockres.lr_meta);
 	level = ex ? LKM_EXMODE : LKM_PRMODE;
 
-	status = ocfs2_cluster_lock(inode, lock, level);
+	status = ocfs2_cluster_lock(osb, lockres, lock, level);
 	if (status < 0) {
 		if (status != -EINTR)
 			LOG_ERROR_STATUS(status);
@@ -1069,7 +1071,7 @@
 		       int ex)
 {
 	int level;
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
 	ocfs2_lock *lock = &lockres->lr_meta;
 
 	level = ex ? LKM_EXMODE : LKM_PRMODE;
@@ -1180,7 +1182,7 @@
 	lock->l_flags &= ~OCFS2_LOCK_BUSY;
 	spin_unlock(&lockres->lr_lock);
 
-	wake_up_all(&lockres->lr_busy);
+	wake_up_all(&lockres->l_event);
 }
 
 /* BEWARE: called with lockres lock, and always drops it. */
@@ -1236,9 +1238,10 @@
 int ocfs2_drop_inode_locks(struct inode *inode)
 {
 	int status, err;
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres;
 	ocfs2_lock *meta_lock;
 
+	lockres = &OCFS_I(inode)->ip_data_lockres;
 	spin_lock(&lockres->lr_lock);
 	err = __ocfs2_drop_lock(OCFS2_SB(inode->i_sb), lockres, 
 				&lockres->lr_data);
@@ -1249,6 +1252,7 @@
 
 	/* the metadata lock requires a bit more work as we have an
 	 * LVB to worry about. */
+	lockres = &OCFS_I(inode)->ip_meta_lockres;
 	meta_lock = &lockres->lr_meta;
 	spin_lock(&lockres->lr_lock);
 	if (meta_lock->l_flags & OCFS2_LOCK_ATTACHED) {
@@ -1381,7 +1385,7 @@
 {
 	int new_level;
 	int set_lvb = 0;
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
 	ocfs2_lock *lock = &lockres->lr_meta;
 
 	spin_lock(&lockres->lr_lock);
@@ -1430,7 +1434,7 @@
 static int ocfs2_process_blocked_data(struct inode *inode,
 				      int *requeue)
 {
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_data_lockres;
 	ocfs2_lock *lock = &lockres->lr_meta;
 	int blocking;
 	int new_level;

Modified: branches/dlm-glue/src/dlmglue.h
===================================================================
--- branches/dlm-glue/src/dlmglue.h	2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/dlmglue.h	2004-11-16 02:21:24 UTC (rev 1650)
@@ -95,6 +95,9 @@
 		    int ex);
 void ocfs2_meta_unlock(struct inode *inode,
 		       int ex);
+int ocfs2_super_lock(ocfs_super *osb, int ex);
+void ocfs2_super_unlock(ocfs_super *osb);
+
 static inline void ocfs2_kick_vote_thread(ocfs_super *osb)
 {
 	atomic_set(&osb->wake_vote_task, 1);
@@ -107,7 +110,7 @@
 static inline void ocfs2_lvb_set_trunc_clusters(struct inode *inode,
 						unsigned int trunc_clusters)
 {
-	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+	ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
 	ocfs2_lock *lock = &lockres->lr_meta;
 	ocfs2_meta_lvb *lvb;
 

Modified: branches/dlm-glue/src/inode.c
===================================================================
--- branches/dlm-glue/src/inode.c	2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/inode.c	2004-11-16 02:21:24 UTC (rev 1650)
@@ -426,7 +426,12 @@
 		    break;
 	}
 
-	status = ocfs2_lock_res_init(inode, &OCFS_I(inode)->ip_lockres);
+	status = ocfs2_lock_res_init(inode, &OCFS_I(inode)->ip_meta_lockres);
+	if (status < 0) {
+		LOG_ERROR_STATUS(status);
+		goto bail;
+	}
+	status = ocfs2_lock_res_init(inode, &OCFS_I(inode)->ip_data_lockres);
 	if (status < 0)
 		LOG_ERROR_STATUS(status);
 bail:
@@ -821,7 +826,8 @@
 	if (status < 0)
 		LOG_ERROR_STATUS(status);
 
-	ocfs2_lock_res_free(&OCFS_I(inode)->ip_lockres);
+	ocfs2_lock_res_free(&OCFS_I(inode)->ip_meta_lockres);
+	ocfs2_lock_res_free(&OCFS_I(inode)->ip_data_lockres);
 	/* clean out the inode private ... why?! */
 	memset(inode->u.generic_ip, 0, sizeof(ocfs_inode_private));
 

Modified: branches/dlm-glue/src/ocfs.h
===================================================================
--- branches/dlm-glue/src/ocfs.h	2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/ocfs.h	2004-11-16 02:21:24 UTC (rev 1650)
@@ -231,10 +231,7 @@
 	ocfs2_lock        lr_meta;
 	ocfs2_lock        lr_data;
 
-	/* should i just make these two a single wait queue? */
-	wait_queue_head_t lr_busy;
-	wait_queue_head_t lr_blocked;
-	wait_queue_head_t lr_refreshing;
+	wait_queue_head_t l_event;
 } ocfs2_lock_res;
 
 /* OCFS2 Inode Private Data */
@@ -246,7 +243,8 @@
 
 	u64             ip_blkno;
 
-	ocfs2_lock_res  ip_lockres;
+	ocfs2_lock_res  ip_meta_lockres;
+	ocfs2_lock_res  ip_data_lockres;
 	struct list_head ip_blocked_list;
 
 	/* protects allocation changes on this inode. */



More information about the Ocfs2-commits mailing list