[Devel] [PATCH vz9 v1 06/63] dm-ploop: convert enospc handling to use lockless lists
Alexander Atanasov
alexander.atanasov at virtuozzo.com
Mon Feb 3 09:45:24 MSK 2025
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
More information about the Devel
mailing list