Messages in this thread Patch in this message | | | From | Sayali Lokhande <> | Subject | [PATCH] f2fs: Avoid double lock for cp_rwsem | Date | Thu, 23 Apr 2020 15:43:52 +0530 |
| |
Call stack : f2fs_write_checkpoint() -> block_operations(sbi) f2fs_lock_all(sbi); down_write(&sbi->cp_rwsem); => write lock held <> -> f2fs_sync_node_pages() if (is_inline_node(page)) flush_inline_data() page = f2fs_pagecache_get_page() if (!page) goto iput_out; iput_out: iput(inode); -> f2fs_evict_inode() f2fs_truncate_blocks() f2fs_lock_op() down_read(&sbi->cp_rwsem); => read lock fail
Signed-off-by: Sayali Lokhande <sayalil@codeaurora.org> --- fs/f2fs/checkpoint.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 5ba649e..5c504cf 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -1219,21 +1219,19 @@ static int block_operations(struct f2fs_sb_info *sbi) goto retry_flush_quotas; } -retry_flush_nodes: down_write(&sbi->node_write); if (get_pages(sbi, F2FS_DIRTY_NODES)) { up_write(&sbi->node_write); + f2fs_unlock_all(sbi); atomic_inc(&sbi->wb_sync_req[NODE]); err = f2fs_sync_node_pages(sbi, &wbc, false, FS_CP_NODE_IO); atomic_dec(&sbi->wb_sync_req[NODE]); - if (err) { - up_write(&sbi->node_change); - f2fs_unlock_all(sbi); + up_write(&sbi->node_change); + if (err) goto out; - } cond_resched(); - goto retry_flush_nodes; + goto retry_flush_quotas; } /* -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
| |