[Ocfs2-commits] mfasheh commits r1309 - trunk/src

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Wed Jul 28 13:30:25 CDT 2004


Author: mfasheh
Date: 2004-07-28 12:30:23 -0500 (Wed, 28 Jul 2004)
New Revision: 1309

Modified:
   trunk/src/alloc.c
   trunk/src/dir.c
   trunk/src/dlm.c
   trunk/src/dlm.h
   trunk/src/file.c
   trunk/src/inode.c
   trunk/src/journal.c
   trunk/src/namei.c
   trunk/src/ocfs_journal.h
Log:
* ocfs_release_lock no longer does I/O which means you no longer need
  ip_io_sem to call it. This removes a *ton* of code (good!)

* teach ocfs_release_lock to retry a lock release (after dropping and
  reacquiring the lockres lock) after a timeout.

* remove an uneeded read in ocfs_unlink

* ocfs_force_read_journal wasn't passing inode to read_bhs.



Modified: trunk/src/alloc.c
===================================================================
--- trunk/src/alloc.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/alloc.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -376,8 +376,8 @@
 				goto abort;
 			}
 			ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-					     FLAG_FILE_CREATE, NULL, 
-					     inode_alloc_inode[i], 1);
+					     FLAG_FILE_CREATE, 
+					     inode_alloc_inode[i]);
 		}
 	}
 
@@ -405,8 +405,8 @@
 				goto abort;
 			}
 			ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-					     FLAG_FILE_CREATE, NULL, 
-					     ext_alloc_inode[i], 1);
+					     FLAG_FILE_CREATE,  
+					     ext_alloc_inode[i]);
 		}
 	}
 
@@ -431,8 +431,7 @@
 			goto abort;
 		}
 		ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-				     FLAG_FILE_CREATE, globalbh, 
-				     vol_inode, 1);
+				     FLAG_FILE_CREATE, vol_inode);
 	}
 
 	/* free vol block */
@@ -2934,7 +2933,7 @@
 			goto leave;
 		}
 		ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-				      0, bh, bitmap_inode, 1);
+				      0, bitmap_inode);
 	}
 
 	status = ocfs_journal_access(handle, bh, OCFS_JOURNAL_ACCESS_WRITE);
@@ -3151,8 +3150,7 @@
 	}
 
 	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-			     FLAG_FILE_CREATE, 
-			     bh, inode, 1);
+			     FLAG_FILE_CREATE, inode);
 
 	numBits = ((bytes_wanted + (blockSize-1)) >> blockSizeBits);
 	numBytes = (u64)numBits << blockSizeBits;
@@ -3850,7 +3848,7 @@
 		}
 
 		ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-				     0, main_bm_bh, main_bm_inode, 1);
+				     0, main_bm_inode);
 
 		status = ocfs_sync_local_to_main(osb, handle, alloc,
 						 main_bm_inode);

Modified: trunk/src/dir.c
===================================================================
--- trunk/src/dir.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/dir.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -202,8 +202,7 @@
 
 	if (have_disk_lock) {
 		error = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-					     FLAG_DIR|FLAG_READDIR, NULL, 
-					     inode);
+					     FLAG_DIR|FLAG_READDIR, inode);
 		if (error < 0)
 			LOG_ERROR_STATUS (error);
 	}
@@ -262,7 +261,7 @@
 	if (take_lock && lock_acq)
 	{
 		tmpstat = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-					     FLAG_DIR|FLAG_READDIR, bh, inode);
+					     FLAG_DIR|FLAG_READDIR, inode);
 		if (tmpstat < 0) {
 			LOG_ERROR_STATUS (tmpstat);
 			/* Volume should be disabled in this case */

Modified: trunk/src/dlm.c
===================================================================
--- trunk/src/dlm.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/dlm.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -61,7 +61,7 @@
 static int ocfs_wait_for_vote (ocfs_super * osb, __u64 lock_id, __u32 lock_type, __u32 flags, ocfs_node_map *vote_map, __u32 time_to_wait, __u64 lock_seq_num, ocfs_node_map *open_map);
 static int ocfs_reset_voting (ocfs_super * osb);
 static int ocfs_get_vote_on_disk (ocfs_super * osb, __u64 lock_id, __u32 lock_type, __u32 flags, ocfs_node_map * got_vote_map, ocfs_node_map * vote_map, __u64 lock_seq_num, ocfs_node_map * oin_open_map);
-static int ocfs_disk_release_lock (ocfs_super * osb, __u64 lock_id, __u32 lock_type, __u32 flags, struct buffer_head *bh, struct inode *inode, __u32 num_ident);
+static int ocfs_disk_release_lock (ocfs_super * osb, __u64 lock_id, __u32 lock_type, __u32 flags, struct inode *inode, __u32 num_ident);
 
 
 static void ocfs_set_publish_vote_map(ocfs_super *osb, ocfs_publish *publish, ocfs_node_map *vote_map)
@@ -642,7 +642,7 @@
 			status = ocfs_journal_dirty(handle, *bh);
 			lockres->lock_holders++;
 			ocfs_handle_add_lock(handle, lockres->lock_type, 0, 
-					     *bh, inode, 0);
+					     inode);
 		} else
 			status = ocfs_write_bh (osb, *bh, 0, inode);
 		if (status < 0) 
@@ -1031,19 +1031,13 @@
  * inode is definitely non NULL
  */
 static int ocfs_disk_release_lock(ocfs_super * osb, __u64 lock_id,
-		__u32 lock_type, __u32 flags, struct buffer_head *bh,
-		struct inode *inode, __u32 num_ident)
+		__u32 lock_type, __u32 flags, struct inode *inode, __u32 num_ident)
 {
 	ocfs_node_map votemap;
 	int status = 0, vote_status = 0;
 	int tmpstat;
 	__u64 lockseqno;
-	int cachelock = 0;
 	int disk_vote = 0;
-	ocfs2_dinode *fe = NULL;
-	struct buffer_head *tmpbh = NULL, **b = NULL;
-	__s16 curr_master;
-	int clear_tmp = 0;
 	ocfs_lock_res *lockres = GET_INODE_LOCKRES(inode);
 
 	/* TODO: the ifdefed out code here used to be used
@@ -1061,39 +1055,10 @@
 	/* TODO: figure out how to properly handle inode updates w/no oin */
 	ocfs_node_map_dup(osb, &votemap, &osb->publ_map);  // temporary hack, forces broadcast
 
-	if (bh != NULL)
-		b = &bh;
-	else {
-		b = &tmpbh;
-		clear_tmp = 1;
-	}
-
-	if (bh == NULL) {	
-		status = ocfs_read_bh (osb, lock_id, b, OCFS_BH_CACHED, inode);
-		if (status < 0) {
-			LOG_ERROR_STATUS (status);
-			goto finito;
-		}
-	}
-	fe = (ocfs2_dinode *) (*b)->b_data;
 #if 0
 	ocfs_node_map_init(osb, &openmap);
 	ocfs_get_disk_lock_open_map(osb, DISK_LOCK(fe), &openmap);
-#endif
-	curr_master = DISK_LOCK(fe)->dl_master;
 
-	if (curr_master >= osb->max_nodes) {
-		LOG_ERROR_STATUS(status = -EINVAL);
-		goto finito;
-	}
-
-	if (curr_master != osb->node_num) {
-		LOG_ERROR_ARGS ("Current master is NOT this NODE (%d)", curr_master);
-		status = 0;
-		goto finito;
-	}
-
-#if 0
 	/* publish_map & openmap for operations that dont need broadcast */
 	if (!(flags & (FLAG_FILE_RENAME | FLAG_FILE_DELETE | 
 		       FLAG_FILE_RELEASE_DENTRY | FLAG_FILE_TRUNCATE |
@@ -1132,16 +1097,21 @@
 					continue;
 				} else {
 					LOG_ERROR_STATUS (status);
-					goto finito;
+					goto finally;
 				}
 			} else if (status == -ETIMEDOUT) {
 				LOG_TRACE_ARGS ("ETIMEDOUT on net vote, id=%llu\n", lock_id);
 				status = -EAGAIN;
+
+				LOG_ERROR_ARGS("Timed out releasing lock for inode %llu, retrying...\n", OCFS_I(inode)->ip_blkno);
+				ocfs_release_lockres(lockres);
+				ocfs_sleep(200);
+				ocfs_acquire_lockres(lockres, 0);
 				continue;
 			}
 			else if (status == -EINTR && ocfs_task_interruptible (osb)) {
 				LOG_ERROR_STR("interrupted!\n");
-				goto finito;
+				goto finally;
 			} else 
 				LOG_ERROR_STATUS (status);
 		}
@@ -1166,12 +1136,12 @@
 		       	if (tmpstat >= 0)
 				break;
 			LOG_ERROR_STATUS (status = tmpstat);
-			goto finito;
+			goto finally;
 		}
 		
 		if (status != -EAGAIN) {
 			LOG_ERROR_STATUS (status);
-			goto finito;
+			goto finally;
 		}
 
 		LOG_TRACE_ARGS ("id=%llu\n", lock_id);
@@ -1179,38 +1149,7 @@
 	}
 
 finally:
-	fe = (ocfs2_dinode *) (*b)->b_data;
 
-	LOG_TRACE_ARGS("writing lock now... releasemaster: %s, level: %d, master: %d\n",
-		       flags & FLAG_FILE_RELEASE_MASTER ? "yes" : "no", 
-		       DISK_LOCK(fe)->dl_level,
-		       DISK_LOCK(fe)->dl_master);
-	if (flags & FLAG_FILE_RELEASE_MASTER)
-		DISK_LOCK(fe)->dl_master = OCFS_INVALID_NODE_NUM;
-
-	if ((DISK_LOCK(fe)->dl_level == OCFS_LKM_EXMODE) &&
-	    (DISK_LOCK(fe)->dl_master == osb->node_num)) {
-		lockres->lock_type = OCFS_LKM_EXMODE; 
-		cachelock = 1;
-		LOG_TRACE_STR("keeping at CACHE_LOCK");
-	}
-	else {
-		LOG_TRACE_STR("setting to NO_LOCK");
-		DISK_LOCK(fe)->dl_level = OCFS_LKM_NLMODE;
-	}
-
-	/* Reset the lock on the disk */
-	if (!cachelock) {
-		tmpstat = ocfs_write_bh (osb, *b, 0, inode);
-		if (tmpstat < 0)
-			LOG_ERROR_STATUS (tmpstat);
-		clear_tmp = 0;
-	}
-
-finito:
-	if (tmpbh)
-		brelse(tmpbh);
-
 	LOG_EXIT_STATUS (status);
 	return status;
 }				/* ocfs_disk_release_lock */
@@ -1219,7 +1158,7 @@
  * ocfs_release_lock()
  * inode is definitely non NULL
  */
-int ocfs_release_lock_full (ocfs_super * osb, __u32 lock_type, __u32 flags, struct buffer_head *bh, struct inode *inode, __u32 num_ident)
+int ocfs_release_lock_full (ocfs_super * osb, __u32 lock_type, __u32 flags, struct inode *inode, __u32 num_ident)
 {
 	int status = 0;
 	ocfs_lock_res *lockres = GET_INODE_LOCKRES(inode);
@@ -1255,11 +1194,10 @@
 		goto finally;
 	}
 
-	lockres->lock_type = OCFS_LKM_NLMODE;
 	if (flags & FLAG_FILE_RELEASE_MASTER)
 		lockres->master_node_num = OCFS_INVALID_NODE_NUM;
 
-	status = ocfs_disk_release_lock (osb, lock_id, lock_type, flags, bh, inode, num_ident);
+	status = ocfs_disk_release_lock (osb, lock_id, lock_type, flags, inode, num_ident);
 	if (status < 0) {
 		/* Disable the vol */
 		LOG_ERROR_STATUS (status);

Modified: trunk/src/dlm.h
===================================================================
--- trunk/src/dlm.h	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/dlm.h	2004-07-28 17:30:23 UTC (rev 1309)
@@ -37,11 +37,10 @@
 		      struct inode *inode);
 void ocfs_compute_dlm_stats(int status, int vote_status,
 			    ocfs_dlm_stats *stats);
-#define ocfs_release_lock(osb, lock_type, flags, bh, inode)  \
-	ocfs_release_lock_full(osb, lock_type, flags, bh, inode, 1)
+#define ocfs_release_lock(osb, lock_type, flags, inode)  \
+	ocfs_release_lock_full(osb, lock_type, flags, inode, 1)
 int ocfs_release_lock_full(ocfs_super *osb, __u32 lock_type,
-			   __u32 flags, struct buffer_head *bh,
-			   struct inode *inode, __u32 num_ident);
+			   __u32 flags, struct inode *inode, __u32 num_ident);
 int ocfs_update_disk_lock(ocfs_super *osb, __u32 flags,
 			  struct buffer_head **bh, struct inode *inode,
 			  ocfs_journal_handle *handle);

Modified: trunk/src/file.c
===================================================================
--- trunk/src/file.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/file.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -606,7 +606,7 @@
 			lock_flags |= FLAG_FILE_UPDATE_OIN;
 
 		ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-				     lock_flags, bh, inode, 0);
+				     lock_flags, inode);
 
 		if (status < 0)
 			ocfs_abort_trans(handle);
@@ -935,8 +935,7 @@
 		goto leave;
 	}
 	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-			     FLAG_FILE_TRUNCATE|FLAG_FILE_UPDATE_OIN, bh, 
-			     inode, 0);
+			     FLAG_FILE_TRUNCATE|FLAG_FILE_UPDATE_OIN, inode);
 
 	fe = (ocfs2_dinode *) bh->b_data;
 	if (!IS_VALID_FILE_ENTRY(fe)) {
@@ -1093,8 +1092,8 @@
 		}
 		ocfs_handle_add_lock(handle, 
 				     OCFS_LKM_EXMODE,
-				     FLAG_FILE_EXTEND|FLAG_FILE_UPDATE_OIN, bh,
-				     inode, 0);
+				     FLAG_FILE_EXTEND|FLAG_FILE_UPDATE_OIN,
+				     inode);
 	} else {
 		handle = passed_handle;
 	}

Modified: trunk/src/inode.c
===================================================================
--- trunk/src/inode.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/inode.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -652,8 +652,8 @@
 		goto bail_locked;
 	}
 	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-			     FLAG_FILE_CREATE | FLAG_DIR, orphan_dir_bh,
-			     orphan_dir_inode, 1);
+			     FLAG_FILE_CREATE | FLAG_DIR,
+			     orphan_dir_inode);
 
 	if (S_ISDIR(inode->i_mode))
 		lock_flags |= FLAG_DIR;

Modified: trunk/src/journal.c
===================================================================
--- trunk/src/journal.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/journal.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -56,14 +56,8 @@
 
 spinlock_t trans_inc_lock = SPIN_LOCK_UNLOCKED;
 
-typedef enum _release_locks_action {
-	TRANS_COMMIT,
-	TRANS_ABORT,
-	TRANS_CACHE
-} release_locks_action;
-
 static int ocfs_reset_publish (ocfs_super * osb, __u64 node_num);
-static int ocfs_handle_release_locks(ocfs_journal_handle *handle, release_locks_action action);
+static int ocfs_handle_release_locks(ocfs_journal_handle *handle);
 static int ocfs_force_read_journal(ocfs_super *osb, __u64 size, 
 				   struct inode *inode);
 static int ocfs_recover_node(struct _ocfs_super *osb, int node_num);
@@ -160,10 +154,6 @@
 		if (lock->flags & FLAG_FILE_TRUNCATE)
 			first->flags = first->flags | FLAG_FILE_TRUNCATE;
 
-		if (lock->bh && !first->bh)
-			first->bh = lock->bh;
-		else if (lock->bh)
-			brelse(lock->bh);
 		iput(lock->inode);
 
 		kmem_cache_free(OcfsGlobalCtxt.lock_cache, lock);
@@ -278,20 +268,17 @@
 		       atomic_read(&journal->num_chkpt_locks),
 		       OCFS_I(lock->inode)->ip_blkno);
 #endif
-		down_write(&OCFS_I(lock->inode)->ip_io_sem);
 		tmpstat = 0;
 		if (!INODE_DELETED(lock->inode))
 			tmpstat = ocfs_release_lock_full(osb, 
 							 lock->type,
 							 lock->flags,
-							 lock->bh,
 							 lock->inode,
 							 lock->num_ident);
 		else
 			LOG_ERROR_ARGS("commit_thread: Skipping delete for "
 				       "inode %llu!\n", 
 				       OCFS_I(lock->inode)->ip_blkno);
-		up_write(&OCFS_I(lock->inode)->ip_io_sem);
 		if (tmpstat < 0)
 			LOG_ERROR_ARGS("commit_thread: release_lock status is"
 				       " %d releasing lock on inode %llu!\n",
@@ -305,8 +292,6 @@
 			ocfs_release_lockres(lockres);
 		}
 
-		if (lock->bh != NULL)
-			brelse(lock->bh);
 		iput(lock->inode);
 
 		atomic_dec(&journal->num_chkpt_locks);
@@ -564,8 +549,7 @@
  * Called from commit / abort only for the checkpointing case. When we
  * stop doing that there, we can kill this function. 
  */
-static int ocfs_handle_release_locks(ocfs_journal_handle *handle, 
-				      release_locks_action action)
+static int ocfs_handle_release_locks(ocfs_journal_handle *handle)
 {
 	ocfs_super *osb;
 	ocfs_journal_lock *lock;
@@ -586,10 +570,6 @@
 		if (!lock->inode)
 			BUG();
 
-		/* The cache list holds unlocked inodes */
-		if (action == TRANS_CACHE || lock->req_io_sem)
-			down_write(&OCFS_I(lock->inode)->ip_io_sem);
-
 		/* The file may have been deleted before we got to
 		 * this lock release. If so, just skip it.  */
 		if (!INODE_DELETED(lock->inode)) {
@@ -597,8 +577,6 @@
 			tmpstat = ocfs_release_lock(osb, 
 						    lock->type, 
 						    lock->flags, 
-						    (action == TRANS_ABORT
-						     ? NULL : lock->bh), 
 						    lock->inode);
 			if (tmpstat < 0) {
 				LOG_ERROR_ARGS("Could not release lock: "
@@ -609,11 +587,6 @@
 			}
 		}
 
-		if (action == TRANS_CACHE || lock->req_io_sem)
-			up_write(&OCFS_I(lock->inode)->ip_io_sem);
-
-		if (lock->bh != NULL)
-			brelse(lock->bh);
 		iput(lock->inode);
 		list_del(&(lock->lock_list));
 		handle->num_locks--;
@@ -732,7 +705,7 @@
 /* done: */
 	if (checkpoint) {
 		/* Release locks associated with this handle. */
-		retval = ocfs_handle_release_locks(handle, TRANS_COMMIT);
+		retval = ocfs_handle_release_locks(handle);
 		if (retval < 0)
 			LOG_ERROR_STATUS(retval);
 	}
@@ -874,7 +847,7 @@
 		brelse(handle->buffs[i]);
 
 	/* drop locks associated with the handle here. */
-	retval = ocfs_handle_release_locks(handle, TRANS_ABORT);
+	retval = ocfs_handle_release_locks(handle);
 	if (retval < 0)
 		LOG_ERROR_STATUS(retval);
 
@@ -1065,20 +1038,15 @@
 } /* ocfs_journal_dirty */
 
 
-/* 
- * If you've passed the inode to the handle already (via
- * ocfs_handle_add_inode), then req_io_sem should be true. 
- */
 void ocfs_handle_add_lock(ocfs_journal_handle *handle, __u32 type, 
-			  __u32 flags, struct buffer_head *bh, 
-			  struct inode *inode, int req_io_sem) 
+			  __u32 flags, struct inode *inode)
 {
 	ocfs_journal_lock *lock;
 
 	OCFS_ASSERT(inode);
 
-	LOG_ENTRY_ARGS("(inode=%llu, type=%u, flags=%u, bh=%p)\n",
-			OCFS_I(inode)->ip_blkno, type, flags, bh);
+	LOG_ENTRY_ARGS("(inode=%llu, type=%u, flags=%u)\n",
+			OCFS_I(inode)->ip_blkno, type, flags);
 
 	lock = kmem_cache_alloc(OcfsGlobalCtxt.lock_cache, GFP_NOFS);
 	if (lock == NULL) {
@@ -1090,9 +1058,7 @@
 
 	lock->type  = type;
 	lock->flags = flags;
-	lock->bh    = bh;
 	lock->inode = inode;
-	lock->req_io_sem  = req_io_sem;
 
 	/* stuff for commit thread optimization. */
 	lock->num_ident = 1;
@@ -1100,9 +1066,6 @@
 	 * the one given by ocfs_release_lock... */
 	lock->drop_holders = 0;
 
-	if (bh)
-		get_bh(bh);
-
 	if (!igrab(inode))
 		BUG();
 
@@ -1355,12 +1318,9 @@
 
 	OCFS_I(inode)->ip_open_cnt--;
 
-	down_write(&OCFS_I(inode)->ip_io_sem);
 	/* unlock our journal */
 	status = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-				    FLAG_FILE_CREATE, 
-				    journal->lockbh, inode);
-	up_write(&OCFS_I(inode)->ip_io_sem);
+				    FLAG_FILE_CREATE, inode);
 	if (status < 0)
 		LOG_ERROR_STATUS (status);
 
@@ -1497,7 +1457,7 @@
 		/* there are actually returned in bytes. need blocks. */
 		numblks = numbytes >> osb->sb->s_blocksize_bits;
 
-		status = ocfs_read_bhs(osb, lbo, numbytes, bhs, 0, NULL);
+		status = ocfs_read_bhs(osb, lbo, numbytes, bhs, 0, inode);
 		if (status < 0) {
 			LOG_ERROR_STATUS(status);
 			goto bail;
@@ -1754,12 +1714,9 @@
 
 	/* drop the lock on this nodes journal */
 	if (got_lock) {
-		down_write(&OCFS_I(inode)->ip_io_sem);
-
 		tmpstat = ocfs_release_lock(osb, OCFS_LKM_EXMODE, 
 					   FLAG_FILE_CREATE|FLAG_FILE_RECOVERY,
-					   bh, inode);
-		up_write(&OCFS_I(inode)->ip_io_sem);	
+					   inode);
 		if (tmpstat < 0)
 			LOG_ERROR_STATUS(tmpstat);
 	}
@@ -1897,9 +1854,8 @@
 		brelse(bh);
 	}
 
-	status = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-				    FLAG_DIR|FLAG_READDIR, NULL, 
-				    orphan_dir_inode);
+	status = ocfs_release_lock (osb, OCFS_LKM_EXMODE, 
+				    FLAG_DIR|FLAG_READDIR, orphan_dir_inode);
 	have_disk_lock = 0;
 	if (status < 0) {
 		LOG_ERROR_STATUS(status);
@@ -1921,7 +1877,7 @@
 
 	if (have_disk_lock) {
 		tmpstat = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-					     FLAG_DIR|FLAG_READDIR, NULL, 
+					     FLAG_DIR|FLAG_READDIR,  
 					     orphan_dir_inode);
 		if (tmpstat < 0)
 			LOG_ERROR_STATUS(tmpstat);

Modified: trunk/src/namei.c
===================================================================
--- trunk/src/namei.c	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/namei.c	2004-07-28 17:30:23 UTC (rev 1309)
@@ -244,8 +244,7 @@
 
 	/* Ok, we got the lock -- we'd better add it to our transaction */
 	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-			     FLAG_FILE_CREATE | FLAG_DIR, parent_fe_bh, dir, 
-			     0);
+			     FLAG_FILE_CREATE | FLAG_DIR, dir);
 
 	/* do the real work now. */
 	status = ocfs_mknod_locked(osb, dir, dentry, mode, dev,
@@ -646,8 +645,7 @@
 
 	if (cleanup_parent) {
 		tmpstat = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-					     FLAG_FILE_CREATE | FLAG_DIR, 
-					     parent_fe_bh, dir);
+					     FLAG_FILE_CREATE | FLAG_DIR, dir);
 		if (tmpstat < 0)
 			LOG_ERROR_STATUS (tmpstat);
 		up_write(&OCFS_I(dir)->ip_io_sem);
@@ -658,7 +656,6 @@
 		tmpstat = ocfs_release_lock(osb, OCFS_LKM_EXMODE,
 					    FLAG_FILE_CREATE 
 					    | FLAG_FILE_UPDATE_OIN, 
-					    fe_bh, 
 					    inode);
 		if (tmpstat < 0)
 			LOG_ERROR_STATUS (tmpstat);
@@ -726,15 +723,14 @@
 	/* lock parent directory, yes we use FLAG_FILE_CREATE even
 	 * though we're deleting ;) */
 	status = ocfs_acquire_lock(osb, OCFS_LKM_EXMODE,
-				   FLAG_FILE_CREATE|FLAG_DIR, NULL, 
+				   FLAG_FILE_CREATE|FLAG_DIR, &parent_node_bh, 
 				   parentInode);
 	if (status < 0) {
 		LOG_ERROR_STATUS(status);
 		goto leave;
 	}
 	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-			     FLAG_FILE_CREATE|FLAG_DIR, 
-			     NULL, parentInode, 0);
+			     FLAG_FILE_CREATE|FLAG_DIR, parentInode);
 
 	/* this will re-read the directory now with the EXCLUSIVE */
 	/* lock already held; it will also return the blkno to us */
@@ -750,14 +746,6 @@
 	if (blkno != OCFS_I(inode)->ip_blkno)
 		BUG();
 
-	status = ocfs_read_bh(osb,
-			      OCFS_I(inode)->ip_blkno << inode->i_sb->s_blocksize_bits,
-			      &fe_bh, OCFS_BH_CACHED, inode);
-	if (status < 0) {
-		LOG_ERROR_STATUS(status);
-		goto leave;
-	}
-
 	status = ocfs_acquire_lock (osb, OCFS_LKM_EXMODE,
 				    lockFlags, &fe_bh, inode);
 	if (status < 0) {
@@ -765,8 +753,7 @@
 			LOG_ERROR_STATUS (status);
 		goto leave;
 	}
-	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, lockFlags, fe_bh, 
-			     inode, 0);
+	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, lockFlags, inode);
 
 	if (S_ISDIR (inode->i_mode)) {
 	       	if (!empty_dir(inode)) {
@@ -784,15 +771,6 @@
 		goto leave;
 	}
 
-	status = ocfs_read_bh(osb,
-			      OCFS_I(parentInode)->ip_blkno << parentInode->i_sb->s_blocksize_bits,
-			      &parent_node_bh, OCFS_BH_CACHED,
-			      parentInode);
-	if (status < 0) {
-		LOG_ERROR_STATUS (status);
-		goto leave;
-	}
-
 	fe = (ocfs2_dinode *) fe_bh->b_data;
 	if (fe->i_links_count != inode->i_nlink) {
 		printk("ocfs_unlink: hmm, inode has nlink = %u, fe has link_cnt = %u. Setting inode from fe.\n",
@@ -960,8 +938,7 @@
 bail:
 	if (status < 0) {
 		if (id2_locked) {
-			status = ocfs_release_lock(osb, type2, flags2, 
-						   *bh2, inode2);
+			status = ocfs_release_lock(osb, type2, flags2, inode2);
 			if (bh2) {
 				brelse(*bh2);
 				*bh2 = NULL;
@@ -969,10 +946,8 @@
 		}
 	} else if (handle) {
 		if (id2_locked)
-			ocfs_handle_add_lock(handle, type2, flags2, 
-					     *bh2, inode2, 0);
-		ocfs_handle_add_lock(handle, type1, flags1, *bh1, 
-				     inode1, 0);
+			ocfs_handle_add_lock(handle, type2, flags2, inode2);
+		ocfs_handle_add_lock(handle, type1, flags1, inode1);
 	}
 
 	LOG_EXIT_STATUS(status);
@@ -1320,13 +1295,13 @@
 
 bail:
 	if (got_oldlock) {
-		ocfs_release_lock(osb, OCFS_LKM_EXMODE, 
-				  oldfe_flags, NULL, old_inode);
+		ocfs_release_lock(osb, OCFS_LKM_EXMODE, oldfe_flags, 
+				  old_inode);
 	}
 
 	if (got_newlock) {
-		ocfs_release_lock(osb, OCFS_LKM_EXMODE, 
-				  newfe_flags, NULL, new_inode);
+		ocfs_release_lock(osb, OCFS_LKM_EXMODE, newfe_flags, 
+				  new_inode);
 	}
 
 	double_up_write(&OCFS_I(old_dir)->ip_io_sem, 
@@ -1602,8 +1577,7 @@
 	if (got_lock) {
 		int tmpstat;
 		tmpstat = ocfs_release_lock (osb, OCFS_LKM_EXMODE,
-					     FLAG_FILE_CREATE | FLAG_DIR, 
-					     parent_fe_bh, dir);
+					     FLAG_FILE_CREATE | FLAG_DIR, dir);
 		if (tmpstat < 0)
 			LOG_ERROR_STATUS (tmpstat);
 	}
@@ -2016,8 +1990,7 @@
 		goto leave;
 	}
 	ocfs_handle_add_lock(handle, OCFS_LKM_EXMODE, 
-			     FLAG_FILE_CREATE | FLAG_DIR, orphan_dir_bh,
-			     orphan_dir_inode, 1);
+			     FLAG_FILE_CREATE | FLAG_DIR, orphan_dir_inode);
 
 	status = __ocfs_add_entry(handle, orphan_dir_inode, name, namelen, 
 				  inode, OCFS_I(inode)->ip_blkno, 

Modified: trunk/src/ocfs_journal.h
===================================================================
--- trunk/src/ocfs_journal.h	2004-07-28 01:47:43 UTC (rev 1308)
+++ trunk/src/ocfs_journal.h	2004-07-28 17:30:23 UTC (rev 1309)
@@ -147,12 +147,9 @@
 	/* release_lock arguments. */
 	__u32 type;
 	__u32 flags;
-	struct buffer_head *bh;
 	struct inode *inode;
 	unsigned int num_ident;
 
-	/* used only for immediate checkpointing transactions */
-	int req_io_sem;
 	/* used by commit_cache */
 	unsigned int drop_holders;
 	/* lock_list: we are either on 
@@ -346,9 +343,7 @@
 					struct buffer_head *bh);
 void                 ocfs_handle_add_lock(ocfs_journal_handle *handle, 
 					  __u32 type, __u32 flags, 
-					  struct buffer_head *bh, 
-					  struct inode *inode,
-					  int req_io_sem);
+					  struct inode *inode);
 /*
  * Some transactions require us to leave inodes in a locked state
  * until we either commit or abort because the buffer state can change



More information about the Ocfs2-commits mailing list