On 3.02.25 8:01, Pavel Tikhomirov wrote:

@@ -166,7 +171,6 @@ static bool ploop_try_delay_enospc(struct ploop_rq *prq, struct pio *pio)
      bool delayed = true;
      unsigned long flags;
-    spin_lock_irqsave(&ploop->deferred_lock, flags);
      if (unlikely(ploop->wants_suspend)) {
          delayed = false;
          goto unlock;
@@ -176,10 +180,11 @@ static bool ploop_try_delay_enospc(struct ploop_rq *prq, struct pio *pio)
      pr_err_once(PL_FMT("underlying disk is almost full"),
          ploop_device_name(ploop));
+    spin_lock_irqsave(&ploop->deferred_lock, flags);
      ploop->event_enospc = true;
-    list_add_tail(&pio->list, &ploop->enospc_pios);
-unlock:
      spin_unlock_irqrestore(&ploop->deferred_lock, flags);
+    llist_add((struct llist_node *)(&pio->list), &ploop->enospc_pios);
+unlock:
      if (delayed)
          mod_timer(&ploop->enospc_timer, jiffies + PLOOP_ENOSPC_TIMEOUT);

Can you please explain why we need to take defered_lock around ploop->event_enospc setting after your patch? (It looks that this lock does not do anything now.)


see static int ploop_get_event(...), without lock event can be missed

--
Regards,
Alexander Atanasov

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to