mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
[OCFS2] Make ip_io_sem a mutex
ip_io_sem is now ip_io_mutex. Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
parent
aee93ac4b7
commit
251b6eccbe
@ -58,7 +58,7 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
|
||||
goto out;
|
||||
}
|
||||
|
||||
down(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_lock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
|
||||
lock_buffer(bh);
|
||||
set_buffer_uptodate(bh);
|
||||
@ -82,7 +82,7 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
|
||||
brelse(bh);
|
||||
}
|
||||
|
||||
up(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_unlock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
out:
|
||||
mlog_exit(ret);
|
||||
return ret;
|
||||
@ -125,13 +125,13 @@ int ocfs2_read_blocks(struct ocfs2_super *osb, u64 block, int nr,
|
||||
flags &= ~OCFS2_BH_CACHED;
|
||||
|
||||
if (inode)
|
||||
down(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_lock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
for (i = 0 ; i < nr ; i++) {
|
||||
if (bhs[i] == NULL) {
|
||||
bhs[i] = sb_getblk(sb, block++);
|
||||
if (bhs[i] == NULL) {
|
||||
if (inode)
|
||||
up(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_unlock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
status = -EIO;
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
@ -220,7 +220,7 @@ int ocfs2_read_blocks(struct ocfs2_super *osb, u64 block, int nr,
|
||||
ocfs2_set_buffer_uptodate(inode, bh);
|
||||
}
|
||||
if (inode)
|
||||
up(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_unlock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
|
||||
mlog(ML_BH_IO, "block=(%"MLFu64"), nr=(%d), cached=%s\n", block, nr,
|
||||
(!(flags & OCFS2_BH_CACHED) || ignore_cache) ? "no" : "yes");
|
||||
|
@ -903,10 +903,10 @@ void ocfs2_clear_inode(struct inode *inode)
|
||||
"Clear inode of %"MLFu64", inode is locked\n",
|
||||
oi->ip_blkno);
|
||||
|
||||
mlog_bug_on_msg(down_trylock(&oi->ip_io_sem),
|
||||
"Clear inode of %"MLFu64", io_sem is locked\n",
|
||||
mlog_bug_on_msg(!mutex_trylock(&oi->ip_io_mutex),
|
||||
"Clear inode of %"MLFu64", io_mutex is locked\n",
|
||||
oi->ip_blkno);
|
||||
up(&oi->ip_io_sem);
|
||||
mutex_unlock(&oi->ip_io_mutex);
|
||||
|
||||
/*
|
||||
* down_trylock() returns 0, down_write_trylock() returns 1
|
||||
|
@ -46,10 +46,10 @@ struct ocfs2_inode_info
|
||||
struct list_head ip_io_markers;
|
||||
int ip_orphaned_slot;
|
||||
|
||||
struct semaphore ip_io_sem;
|
||||
struct mutex ip_io_mutex;
|
||||
|
||||
/* Used by the journalling code to attach an inode to a
|
||||
* handle. These are protected by ip_io_sem in order to lock
|
||||
* handle. These are protected by ip_io_mutex in order to lock
|
||||
* out other I/O to the inode until we either commit or
|
||||
* abort. */
|
||||
struct list_head ip_handle_list;
|
||||
|
@ -401,7 +401,7 @@ int ocfs2_journal_access(struct ocfs2_journal_handle *handle,
|
||||
* j_trans_barrier for us. */
|
||||
ocfs2_set_inode_lock_trans(OCFS2_SB(inode->i_sb)->journal, inode);
|
||||
|
||||
down(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_lock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
switch (type) {
|
||||
case OCFS2_JOURNAL_ACCESS_CREATE:
|
||||
case OCFS2_JOURNAL_ACCESS_WRITE:
|
||||
@ -416,7 +416,7 @@ int ocfs2_journal_access(struct ocfs2_journal_handle *handle,
|
||||
status = -EINVAL;
|
||||
mlog(ML_ERROR, "Uknown access type!\n");
|
||||
}
|
||||
up(&OCFS2_I(inode)->ip_io_sem);
|
||||
mutex_unlock(&OCFS2_I(inode)->ip_io_mutex);
|
||||
|
||||
if (status < 0)
|
||||
mlog(ML_ERROR, "Error %d getting %d access to buffer!\n",
|
||||
|
@ -932,7 +932,7 @@ static void ocfs2_inode_init_once(void *data,
|
||||
oi->ip_dir_start_lookup = 0;
|
||||
|
||||
init_rwsem(&oi->ip_alloc_sem);
|
||||
init_MUTEX(&(oi->ip_io_sem));
|
||||
mutex_init(&oi->ip_io_mutex);
|
||||
|
||||
oi->ip_blkno = 0ULL;
|
||||
oi->ip_clusters = 0;
|
||||
|
@ -388,7 +388,7 @@ out_free:
|
||||
}
|
||||
}
|
||||
|
||||
/* Item insertion is guarded by ip_io_sem, so the insertion path takes
|
||||
/* Item insertion is guarded by ip_io_mutex, so the insertion path takes
|
||||
* advantage of this by not rechecking for a duplicate insert during
|
||||
* the slow case. Additionally, if the cache needs to be bumped up to
|
||||
* a tree, the code will not recheck after acquiring the lock --
|
||||
@ -418,7 +418,7 @@ void ocfs2_set_buffer_uptodate(struct inode *inode,
|
||||
(unsigned long long) bh->b_blocknr);
|
||||
|
||||
/* No need to recheck under spinlock - insertion is guarded by
|
||||
* ip_io_sem */
|
||||
* ip_io_mutex */
|
||||
spin_lock(&oi->ip_lock);
|
||||
if (ocfs2_insert_can_use_array(oi, ci)) {
|
||||
/* Fast case - it's an array and there's a free
|
||||
@ -440,7 +440,7 @@ void ocfs2_set_buffer_uptodate(struct inode *inode,
|
||||
|
||||
/* Called against a newly allocated buffer. Most likely nobody should
|
||||
* be able to read this sort of metadata while it's still being
|
||||
* allocated, but this is careful to take ip_io_sem anyway. */
|
||||
* allocated, but this is careful to take ip_io_mutex anyway. */
|
||||
void ocfs2_set_new_buffer_uptodate(struct inode *inode,
|
||||
struct buffer_head *bh)
|
||||
{
|
||||
@ -451,9 +451,9 @@ void ocfs2_set_new_buffer_uptodate(struct inode *inode,
|
||||
|
||||
set_buffer_uptodate(bh);
|
||||
|
||||
down(&oi->ip_io_sem);
|
||||
mutex_lock(&oi->ip_io_mutex);
|
||||
ocfs2_set_buffer_uptodate(inode, bh);
|
||||
up(&oi->ip_io_sem);
|
||||
mutex_unlock(&oi->ip_io_mutex);
|
||||
}
|
||||
|
||||
/* Requires ip_lock. */
|
||||
|
Loading…
Reference in New Issue
Block a user