[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