@@ -2940,10 +2940,11 @@ static void wb_inode_writeback_end(struct bdi_writeback *wb)
2940
2940
spin_unlock_irqrestore (& wb -> work_lock , flags );
2941
2941
}
2942
2942
2943
- void __folio_end_writeback (struct folio * folio )
2943
+ bool __folio_end_writeback (struct folio * folio )
2944
2944
{
2945
2945
long nr = folio_nr_pages (folio );
2946
2946
struct address_space * mapping = folio_mapping (folio );
2947
+ bool ret ;
2947
2948
2948
2949
folio_memcg_lock (folio );
2949
2950
if (mapping && mapping_use_writeback_tags (mapping )) {
@@ -2952,7 +2953,7 @@ void __folio_end_writeback(struct folio *folio)
2952
2953
unsigned long flags ;
2953
2954
2954
2955
xa_lock_irqsave (& mapping -> i_pages , flags );
2955
- folio_test_clear_writeback (folio );
2956
+ ret = folio_xor_flags_has_waiters (folio , 1 << PG_writeback );
2956
2957
__xa_clear_mark (& mapping -> i_pages , folio_index (folio ),
2957
2958
PAGECACHE_TAG_WRITEBACK );
2958
2959
if (bdi -> capabilities & BDI_CAP_WRITEBACK_ACCT ) {
@@ -2970,13 +2971,15 @@ void __folio_end_writeback(struct folio *folio)
2970
2971
2971
2972
xa_unlock_irqrestore (& mapping -> i_pages , flags );
2972
2973
} else {
2973
- folio_test_clear_writeback (folio );
2974
+ ret = folio_xor_flags_has_waiters (folio , 1 << PG_writeback );
2974
2975
}
2975
2976
2976
2977
lruvec_stat_mod_folio (folio , NR_WRITEBACK , - nr );
2977
2978
zone_stat_mod_folio (folio , NR_ZONE_WRITE_PENDING , - nr );
2978
2979
node_stat_mod_folio (folio , NR_WRITTEN , nr );
2979
2980
folio_memcg_unlock (folio );
2981
+
2982
+ return ret ;
2980
2983
}
2981
2984
2982
2985
bool __folio_start_writeback (struct folio * folio , bool keep_write )
0 commit comments