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