@@ -1841,41 +1841,51 @@ static bool __write_node_folio(struct folio *folio, bool atomic, bool *submitted
18411841 return false;
18421842}
18431843
1844- int f2fs_move_node_folio (struct folio * node_folio , int gc_type )
1844+ static int f2fs_write_single_node_folio (struct folio * node_folio , int sync_mode ,
1845+ bool mark_dirty , enum iostat_type io_type )
18451846{
18461847 int err = 0 ;
1848+ struct writeback_control wbc = {
1849+ .sync_mode = WB_SYNC_ALL ,
1850+ .nr_to_write = 1 ,
1851+ };
18471852
1848- if (gc_type == FG_GC ) {
1849- struct writeback_control wbc = {
1850- .sync_mode = WB_SYNC_ALL ,
1851- .nr_to_write = 1 ,
1852- };
1853+ if (!sync_mode ) {
1854+ /* set page dirty and write it */
1855+ if (!folio_test_writeback (node_folio ))
1856+ folio_mark_dirty (node_folio );
1857+ goto out_folio ;
1858+ }
18531859
1854- f2fs_folio_wait_writeback (node_folio , NODE , true, true);
1860+ f2fs_folio_wait_writeback (node_folio , NODE , true, true);
18551861
1862+ if (mark_dirty )
18561863 folio_mark_dirty (node_folio );
1864+ else if (!folio_test_dirty (node_folio ))
1865+ goto out_folio ;
18571866
1858- if (!folio_clear_dirty_for_io (node_folio )) {
1859- err = - EAGAIN ;
1860- goto out_page ;
1861- }
1862-
1863- if (!__write_node_folio (node_folio , false, NULL ,
1864- & wbc , false, FS_GC_NODE_IO , NULL ))
1865- err = - EAGAIN ;
1866- goto release_page ;
1867- } else {
1868- /* set page dirty and write it */
1869- if (!folio_test_writeback (node_folio ))
1870- folio_mark_dirty (node_folio );
1867+ if (!folio_clear_dirty_for_io (node_folio )) {
1868+ err = - EAGAIN ;
1869+ goto out_folio ;
18711870 }
1872- out_page :
1871+
1872+ if (!__write_node_folio (node_folio , false, NULL ,
1873+ & wbc , false, FS_GC_NODE_IO , NULL ))
1874+ err = - EAGAIN ;
1875+ goto release_folio ;
1876+ out_folio :
18731877 folio_unlock (node_folio );
1874- release_page :
1878+ release_folio :
18751879 f2fs_folio_put (node_folio , false);
18761880 return err ;
18771881}
18781882
1883+ int f2fs_move_node_folio (struct folio * node_folio , int gc_type )
1884+ {
1885+ return f2fs_write_single_node_folio (node_folio , gc_type == FG_GC ,
1886+ true, FS_GC_NODE_IO );
1887+ }
1888+
18791889int f2fs_fsync_node_pages (struct f2fs_sb_info * sbi , struct inode * inode ,
18801890 struct writeback_control * wbc , bool atomic ,
18811891 unsigned int * seq_id )
0 commit comments