On 12/6/24 05:55, Alexander Atanasov wrote:
@@ -1758,22 +1767,18 @@ static void ploop_process_resubmit_pios(struct ploop *ploop, static void ploop_submit_metadata_writeback(struct ploop *ploop) { struct md_page *md; - while (1) { - write_lock_irq(&ploop->bat_rwlock); - md = list_first_entry_or_null(&ploop->wb_batch_list, - struct md_page, wb_link); - if (!md) { - write_unlock_irq(&ploop->bat_rwlock); - break; - } - list_del_init(&md->wb_link); - /* L1L2 mustn't be redirtyed, when wb in-flight! */ + struct md_page *t; + struct llist_node *wbl; + + wbl = llist_del_all(&ploop->wb_batch_llist); + if (!wbl) + return; + wbl = llist_reverse_order(wbl); + llist_for_each_entry_safe(md, t, wbl, wb_llink) {
Why do we need _safe version here? Noone can delete from wbl at this point.
WARN_ON_ONCE(!test_bit(MD_DIRTY, &md->status)); WARN_ON_ONCE(test_bit(MD_WRITEBACK, &md->status)); set_bit(MD_WRITEBACK, &md->status); clear_bit(MD_DIRTY, &md->status); - write_unlock_irq(&ploop->bat_rwlock); - ploop_index_wb_submit(ploop, md->piwb); } }
-- Best regards, Tikhomirov Pavel Senior Software Developer, Virtuozzo. _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel