提交 251b6ecc 编写于 作者: M Mark Fasheh

[OCFS2] Make ip_io_sem a mutex

ip_io_sem is now ip_io_mutex.
Signed-off-by: NMark Fasheh <mark.fasheh@oracle.com>
上级 aee93ac4
...@@ -58,7 +58,7 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh, ...@@ -58,7 +58,7 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
goto out; goto out;
} }
down(&OCFS2_I(inode)->ip_io_sem); mutex_lock(&OCFS2_I(inode)->ip_io_mutex);
lock_buffer(bh); lock_buffer(bh);
set_buffer_uptodate(bh); set_buffer_uptodate(bh);
...@@ -82,7 +82,7 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh, ...@@ -82,7 +82,7 @@ int ocfs2_write_block(struct ocfs2_super *osb, struct buffer_head *bh,
brelse(bh); brelse(bh);
} }
up(&OCFS2_I(inode)->ip_io_sem); mutex_unlock(&OCFS2_I(inode)->ip_io_mutex);
out: out:
mlog_exit(ret); mlog_exit(ret);
return ret; return ret;
...@@ -125,13 +125,13 @@ int ocfs2_read_blocks(struct ocfs2_super *osb, u64 block, int nr, ...@@ -125,13 +125,13 @@ int ocfs2_read_blocks(struct ocfs2_super *osb, u64 block, int nr,
flags &= ~OCFS2_BH_CACHED; flags &= ~OCFS2_BH_CACHED;
if (inode) if (inode)
down(&OCFS2_I(inode)->ip_io_sem); mutex_lock(&OCFS2_I(inode)->ip_io_mutex);
for (i = 0 ; i < nr ; i++) { for (i = 0 ; i < nr ; i++) {
if (bhs[i] == NULL) { if (bhs[i] == NULL) {
bhs[i] = sb_getblk(sb, block++); bhs[i] = sb_getblk(sb, block++);
if (bhs[i] == NULL) { if (bhs[i] == NULL) {
if (inode) if (inode)
up(&OCFS2_I(inode)->ip_io_sem); mutex_unlock(&OCFS2_I(inode)->ip_io_mutex);
status = -EIO; status = -EIO;
mlog_errno(status); mlog_errno(status);
goto bail; goto bail;
...@@ -220,7 +220,7 @@ int ocfs2_read_blocks(struct ocfs2_super *osb, u64 block, int nr, ...@@ -220,7 +220,7 @@ int ocfs2_read_blocks(struct ocfs2_super *osb, u64 block, int nr,
ocfs2_set_buffer_uptodate(inode, bh); ocfs2_set_buffer_uptodate(inode, bh);
} }
if (inode) 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, mlog(ML_BH_IO, "block=(%"MLFu64"), nr=(%d), cached=%s\n", block, nr,
(!(flags & OCFS2_BH_CACHED) || ignore_cache) ? "no" : "yes"); (!(flags & OCFS2_BH_CACHED) || ignore_cache) ? "no" : "yes");
......
...@@ -903,10 +903,10 @@ void ocfs2_clear_inode(struct inode *inode) ...@@ -903,10 +903,10 @@ void ocfs2_clear_inode(struct inode *inode)
"Clear inode of %"MLFu64", inode is locked\n", "Clear inode of %"MLFu64", inode is locked\n",
oi->ip_blkno); oi->ip_blkno);
mlog_bug_on_msg(down_trylock(&oi->ip_io_sem), mlog_bug_on_msg(!mutex_trylock(&oi->ip_io_mutex),
"Clear inode of %"MLFu64", io_sem is locked\n", "Clear inode of %"MLFu64", io_mutex is locked\n",
oi->ip_blkno); oi->ip_blkno);
up(&oi->ip_io_sem); mutex_unlock(&oi->ip_io_mutex);
/* /*
* down_trylock() returns 0, down_write_trylock() returns 1 * down_trylock() returns 0, down_write_trylock() returns 1
......
...@@ -46,10 +46,10 @@ struct ocfs2_inode_info ...@@ -46,10 +46,10 @@ struct ocfs2_inode_info
struct list_head ip_io_markers; struct list_head ip_io_markers;
int ip_orphaned_slot; 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 /* 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 * out other I/O to the inode until we either commit or
* abort. */ * abort. */
struct list_head ip_handle_list; struct list_head ip_handle_list;
......
...@@ -401,7 +401,7 @@ int ocfs2_journal_access(struct ocfs2_journal_handle *handle, ...@@ -401,7 +401,7 @@ int ocfs2_journal_access(struct ocfs2_journal_handle *handle,
* j_trans_barrier for us. */ * j_trans_barrier for us. */
ocfs2_set_inode_lock_trans(OCFS2_SB(inode->i_sb)->journal, inode); 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) { switch (type) {
case OCFS2_JOURNAL_ACCESS_CREATE: case OCFS2_JOURNAL_ACCESS_CREATE:
case OCFS2_JOURNAL_ACCESS_WRITE: case OCFS2_JOURNAL_ACCESS_WRITE:
...@@ -416,7 +416,7 @@ int ocfs2_journal_access(struct ocfs2_journal_handle *handle, ...@@ -416,7 +416,7 @@ int ocfs2_journal_access(struct ocfs2_journal_handle *handle,
status = -EINVAL; status = -EINVAL;
mlog(ML_ERROR, "Uknown access type!\n"); 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) if (status < 0)
mlog(ML_ERROR, "Error %d getting %d access to buffer!\n", mlog(ML_ERROR, "Error %d getting %d access to buffer!\n",
......
...@@ -932,7 +932,7 @@ static void ocfs2_inode_init_once(void *data, ...@@ -932,7 +932,7 @@ static void ocfs2_inode_init_once(void *data,
oi->ip_dir_start_lookup = 0; oi->ip_dir_start_lookup = 0;
init_rwsem(&oi->ip_alloc_sem); init_rwsem(&oi->ip_alloc_sem);
init_MUTEX(&(oi->ip_io_sem)); mutex_init(&oi->ip_io_mutex);
oi->ip_blkno = 0ULL; oi->ip_blkno = 0ULL;
oi->ip_clusters = 0; oi->ip_clusters = 0;
......
...@@ -388,7 +388,7 @@ static void __ocfs2_set_buffer_uptodate(struct ocfs2_inode_info *oi, ...@@ -388,7 +388,7 @@ static void __ocfs2_set_buffer_uptodate(struct ocfs2_inode_info *oi,
} }
} }
/* 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 * advantage of this by not rechecking for a duplicate insert during
* the slow case. Additionally, if the cache needs to be bumped up to * the slow case. Additionally, if the cache needs to be bumped up to
* a tree, the code will not recheck after acquiring the lock -- * a tree, the code will not recheck after acquiring the lock --
...@@ -418,7 +418,7 @@ void ocfs2_set_buffer_uptodate(struct inode *inode, ...@@ -418,7 +418,7 @@ void ocfs2_set_buffer_uptodate(struct inode *inode,
(unsigned long long) bh->b_blocknr); (unsigned long long) bh->b_blocknr);
/* No need to recheck under spinlock - insertion is guarded by /* No need to recheck under spinlock - insertion is guarded by
* ip_io_sem */ * ip_io_mutex */
spin_lock(&oi->ip_lock); spin_lock(&oi->ip_lock);
if (ocfs2_insert_can_use_array(oi, ci)) { if (ocfs2_insert_can_use_array(oi, ci)) {
/* Fast case - it's an array and there's a free /* Fast case - it's an array and there's a free
...@@ -440,7 +440,7 @@ void ocfs2_set_buffer_uptodate(struct inode *inode, ...@@ -440,7 +440,7 @@ void ocfs2_set_buffer_uptodate(struct inode *inode,
/* Called against a newly allocated buffer. Most likely nobody should /* Called against a newly allocated buffer. Most likely nobody should
* be able to read this sort of metadata while it's still being * 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, void ocfs2_set_new_buffer_uptodate(struct inode *inode,
struct buffer_head *bh) struct buffer_head *bh)
{ {
...@@ -451,9 +451,9 @@ void ocfs2_set_new_buffer_uptodate(struct inode *inode, ...@@ -451,9 +451,9 @@ void ocfs2_set_new_buffer_uptodate(struct inode *inode,
set_buffer_uptodate(bh); set_buffer_uptodate(bh);
down(&oi->ip_io_sem); mutex_lock(&oi->ip_io_mutex);
ocfs2_set_buffer_uptodate(inode, bh); ocfs2_set_buffer_uptodate(inode, bh);
up(&oi->ip_io_sem); mutex_unlock(&oi->ip_io_mutex);
} }
/* Requires ip_lock. */ /* Requires ip_lock. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册