On Oct 30, 2022, at 10:00 PM, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > So the current ordering rules are basically that we need to do > set_page_dirty() *and* we need to flush the TLB's before dropping the > page table lock. That's what gets us serialized with "mkclean”. I understand. I am still not sure whether ordering the set_page_dirty() and dropping the mapcount reference cannot suffice for the reclaim logic not to free the buffers if the page is dirtied. According to the code, shrink_page_list() first checks for folio_mapped() and then for folio_test_dirty() to check whether pageout() is necessary. IIUC, the buffers are not dropped up to this point and set_page_dirty() would always set the page-struct dirty bit. IOW: In shrink_page_list(), when we decide on whether to pageout(), we should see whether the page is dirty (give or take smp_rmb()). But this is an optimization and I do not know all the cases in which buffers might be dropped. My intuition says that they cannot be dropped while mapcount != 0, but I need to further explore it.