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
[email protected]
https://lists.openvz.org/mailman/listinfo/devel