On 1/24/25 23:35, Alexander Atanasov wrote:
@@ -801,11 +799,21 @@ static void ploop_advance_local_after_bat_wb(struct ploop
*ploop,
WARN_ON_ONCE(!test_bit(MD_WRITEBACK, &md->status));
clear_bit(MD_WRITEBACK, &md->status);
+ /* protect piwb */
+ write_lock_irqsave(&ploop->bat_rwlock, flags);
md->piwb = NULL;
- list_splice_tail_init(&md->wait_list, &list);
write_unlock_irqrestore(&ploop->bat_rwlock, flags);
kunmap_local(dst_clu);
+ wait_llist_pending = llist_del_all(&md->wait_llist);
+ if (wait_llist_pending) {
+ wait_llist_pending = llist_reverse_order(wait_llist_pending);
+ llist_for_each_safe(pos, t, wait_llist_pending) {
+ pio = list_entry((struct list_head *)pos, typeof(*pio),
list);
Please use llist_for_each_entry_safe.
+ list_add(&pio->list, &list);
+ }
+ }
+
if (!list_empty(&list))
ploop_dispatch_pios(ploop, NULL, &list);
}
Same thing in other 20 places:
turmoil@fedora:~/devel/kernel-vz/kernel-vz9-second$ git log
rh9-5.14.0-427.44.1.vz9.80.11..rh9-5.14.0-427.44.1.vz9.80.12 -p | grep
llist_for_each | grep -v entry | grep '^+'
+ llist_for_each_safe(pos, t, ll_ready_pios) {
+ llist_for_each_safe(pos, t, ) {
+ llist_for_each_safe(pos, t, list) {
+ llist_for_each_safe(pos, t, llwork) {
+ llist_for_each_safe(pos, t, ll_wb_batch) {
+ llist_for_each_safe(pos, t, ploop->wb_batch_llist.first) {
+ llist_for_each_safe(pos, t, deferred_pios.first) {
+ llist_for_each_safe(pos, t, llist.first) {
+ llist_for_each_safe(pos, t, pios->first) {
+ llist_for_each_safe(pos, t, deferred_pios.first) {
+ llist_for_each_safe(pos, t, list) {
+ llist_for_each_safe(pos, t, lldeferred_pios) {
+ llist_for_each_safe(pos, t, cow_llist) {
+ llist_for_each_safe(pos, t, pios) {
+ llist_for_each_safe(pos, t, discpios) {
+ llist_for_each_safe(pos, t, llpios) {
+ llist_for_each_safe(pos, t, llflush_pios) {
+ llist_for_each_safe(pos, t,
llist_reverse_order(lldeferred_pios)) {
+ llist_for_each_safe(pos, t, suspended_pending) {
+ llist_for_each_safe(pos, t, enospc_pending) {
+ llist_for_each_safe(pos, t, wait_llist_pending) {
turmoil@fedora:~/devel/kernel-vz/kernel-vz9-second$ git log
rh9-5.14.0-427.44.1.vz9.80.11..rh9-5.14.0-427.44.1.vz9.80.12 -p | grep
llist_for_each | grep -v entry | grep '^+' | wc -l
21
There is no point in iterating over llist and convert llist_node to
entry manually.
--
Best regards, Tikhomirov Pavel
Senior Software Developer, Virtuozzo.
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel