f2fs: unlock cp_rwsem early for IPU writes

For IPU writes, there won't be any udpates in dnode page since we
will reuse old block address instead of allocating new one, so we
don't need to lock cp_rwsem during IPU IO submitting.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
This commit is contained in:
Chao Yu
2017-04-18 19:23:39 +08:00
committed by Jaegeuk Kim
parent 73d23680de
commit e818486a9a
2 changed files with 6 additions and 1 deletions

View File

@@ -1355,6 +1355,8 @@ retry_encrypt:
!is_cold_data(page) &&
!IS_ATOMIC_WRITTEN_PAGE(page) &&
need_inplace_update(inode))) {
f2fs_unlock_op(F2FS_I_SB(inode));
fio->cp_rwsem_locked = false;
err = rewrite_data_page(fio);
set_inode_flag(inode, FI_UPDATE_WRITE);
trace_f2fs_do_write_data_page(page, IPU);
@@ -1390,6 +1392,7 @@ static int __write_data_page(struct page *page, bool *submitted,
.page = page,
.encrypted_page = NULL,
.submitted = false,
.cp_rwsem_locked = true,
};
trace_f2fs_writepage(page, DATA);
@@ -1447,7 +1450,8 @@ write:
err = do_write_data_page(&fio);
if (F2FS_I(inode)->last_disk_size < psize)
F2FS_I(inode)->last_disk_size = psize;
f2fs_unlock_op(sbi);
if (fio.cp_rwsem_locked)
f2fs_unlock_op(sbi);
done:
if (err && err != -ENOENT)
goto redirty_out;

View File

@@ -860,6 +860,7 @@ struct f2fs_io_info {
struct page *page; /* page to be written */
struct page *encrypted_page; /* encrypted page */
bool submitted; /* indicate IO submission */
bool cp_rwsem_locked; /* indicate cp_rwsem is held */
};
#define is_read_io(rw) ((rw) == READ)