@@ -240,33 +240,38 @@ void commit_inmem_pages(struct inode *inode, bool abort)
240240 * Otherwise, f2fs_gc in f2fs_balance_fs can wait forever until this
241241 * inode becomes free by iget_locked in f2fs_iget.
242242 */
243- if (!abort )
243+ if (!abort ) {
244244 f2fs_balance_fs (sbi );
245-
246- f2fs_lock_op ( sbi );
245+ f2fs_lock_op ( sbi );
246+ }
247247
248248 mutex_lock (& fi -> inmem_lock );
249249 list_for_each_entry_safe (cur , tmp , & fi -> inmem_pages , list ) {
250- lock_page (cur -> page );
251- if (!abort && cur -> page -> mapping == inode -> i_mapping ) {
252- f2fs_wait_on_page_writeback (cur -> page , DATA );
253- if (clear_page_dirty_for_io (cur -> page ))
254- inode_dec_dirty_pages (inode );
255- do_write_data_page (cur -> page , & fio );
256- submit_bio = true;
250+ if (!abort ) {
251+ lock_page (cur -> page );
252+ if (cur -> page -> mapping == inode -> i_mapping ) {
253+ f2fs_wait_on_page_writeback (cur -> page , DATA );
254+ if (clear_page_dirty_for_io (cur -> page ))
255+ inode_dec_dirty_pages (inode );
256+ do_write_data_page (cur -> page , & fio );
257+ submit_bio = true;
258+ }
259+ f2fs_put_page (cur -> page , 1 );
260+ } else {
261+ put_page (cur -> page );
257262 }
258263 radix_tree_delete (& fi -> inmem_root , cur -> page -> index );
259- f2fs_put_page (cur -> page , 1 );
260264 list_del (& cur -> list );
261265 kmem_cache_free (inmem_entry_slab , cur );
262266 dec_page_count (F2FS_I_SB (inode ), F2FS_INMEM_PAGES );
263267 }
264- if (submit_bio )
265- f2fs_submit_merged_bio (sbi , DATA , WRITE );
266268 mutex_unlock (& fi -> inmem_lock );
267269
268- filemap_fdatawait_range (inode -> i_mapping , 0 , LLONG_MAX );
269- f2fs_unlock_op (sbi );
270+ if (!abort ) {
271+ f2fs_unlock_op (sbi );
272+ if (submit_bio )
273+ f2fs_submit_merged_bio (sbi , DATA , WRITE );
274+ }
270275}
271276
272277/*
0 commit comments