Loading fs/f2fs/segment.c +12 −31 Original line number Diff line number Diff line Loading @@ -215,8 +215,7 @@ void f2fs_register_inmem_page(struct inode *inode, struct page *page) } static int __revoke_inmem_pages(struct inode *inode, struct list_head *head, bool drop, bool recover, bool trylock) struct list_head *head, bool drop, bool recover) { struct f2fs_sb_info *sbi = F2FS_I_SB(inode); struct inmem_pages *cur, *tmp; Loading @@ -228,16 +227,7 @@ static int __revoke_inmem_pages(struct inode *inode, if (drop) trace_f2fs_commit_inmem_page(page, INMEM_DROP); if (trylock) { /* * to avoid deadlock in between page lock and * inmem_lock. */ if (!trylock_page(page)) continue; } else { lock_page(page); } f2fs_wait_on_page_writeback(page, DATA, true, true); Loading Loading @@ -328,19 +318,13 @@ void f2fs_drop_inmem_pages(struct inode *inode) struct f2fs_sb_info *sbi = F2FS_I_SB(inode); struct f2fs_inode_info *fi = F2FS_I(inode); while (!list_empty(&fi->inmem_pages)) { mutex_lock(&fi->inmem_lock); __revoke_inmem_pages(inode, &fi->inmem_pages, true, false, true); if (list_empty(&fi->inmem_pages)) { __revoke_inmem_pages(inode, &fi->inmem_pages, true, false); spin_lock(&sbi->inode_lock[ATOMIC_FILE]); if (!list_empty(&fi->inmem_ilist)) list_del_init(&fi->inmem_ilist); spin_unlock(&sbi->inode_lock[ATOMIC_FILE]); mutex_unlock(&fi->inmem_lock); } } clear_inode_flag(inode, FI_ATOMIC_FILE); fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0; Loading Loading @@ -445,15 +429,12 @@ static int __f2fs_commit_inmem_pages(struct inode *inode) * recovery or rewrite & commit last transaction. For other * error number, revoking was done by filesystem itself. */ err = __revoke_inmem_pages(inode, &revoke_list, false, true, false); err = __revoke_inmem_pages(inode, &revoke_list, false, true); /* drop all uncommitted pages */ __revoke_inmem_pages(inode, &fi->inmem_pages, true, false, false); __revoke_inmem_pages(inode, &fi->inmem_pages, true, false); } else { __revoke_inmem_pages(inode, &revoke_list, false, false, false); __revoke_inmem_pages(inode, &revoke_list, false, false); } return err; Loading Loading
fs/f2fs/segment.c +12 −31 Original line number Diff line number Diff line Loading @@ -215,8 +215,7 @@ void f2fs_register_inmem_page(struct inode *inode, struct page *page) } static int __revoke_inmem_pages(struct inode *inode, struct list_head *head, bool drop, bool recover, bool trylock) struct list_head *head, bool drop, bool recover) { struct f2fs_sb_info *sbi = F2FS_I_SB(inode); struct inmem_pages *cur, *tmp; Loading @@ -228,16 +227,7 @@ static int __revoke_inmem_pages(struct inode *inode, if (drop) trace_f2fs_commit_inmem_page(page, INMEM_DROP); if (trylock) { /* * to avoid deadlock in between page lock and * inmem_lock. */ if (!trylock_page(page)) continue; } else { lock_page(page); } f2fs_wait_on_page_writeback(page, DATA, true, true); Loading Loading @@ -328,19 +318,13 @@ void f2fs_drop_inmem_pages(struct inode *inode) struct f2fs_sb_info *sbi = F2FS_I_SB(inode); struct f2fs_inode_info *fi = F2FS_I(inode); while (!list_empty(&fi->inmem_pages)) { mutex_lock(&fi->inmem_lock); __revoke_inmem_pages(inode, &fi->inmem_pages, true, false, true); if (list_empty(&fi->inmem_pages)) { __revoke_inmem_pages(inode, &fi->inmem_pages, true, false); spin_lock(&sbi->inode_lock[ATOMIC_FILE]); if (!list_empty(&fi->inmem_ilist)) list_del_init(&fi->inmem_ilist); spin_unlock(&sbi->inode_lock[ATOMIC_FILE]); mutex_unlock(&fi->inmem_lock); } } clear_inode_flag(inode, FI_ATOMIC_FILE); fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0; Loading Loading @@ -445,15 +429,12 @@ static int __f2fs_commit_inmem_pages(struct inode *inode) * recovery or rewrite & commit last transaction. For other * error number, revoking was done by filesystem itself. */ err = __revoke_inmem_pages(inode, &revoke_list, false, true, false); err = __revoke_inmem_pages(inode, &revoke_list, false, true); /* drop all uncommitted pages */ __revoke_inmem_pages(inode, &fi->inmem_pages, true, false, false); __revoke_inmem_pages(inode, &fi->inmem_pages, true, false); } else { __revoke_inmem_pages(inode, &revoke_list, false, false, false); __revoke_inmem_pages(inode, &revoke_list, false, false); } return err; Loading