[Devel] [PATCH vz9 v1 55/63] dm-ploop: rework bat completion logic
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Mon Feb 10 09:37:52 MSK 2025
> @@ -915,28 +918,31 @@ static void ploop_free_piwb(struct ploop_index_wb *piwb)
> kfree(piwb);
> }
>
> +
> +static void ploop_bat_write_finish(struct pio *pio, void *piwb_ptr,
> + blk_status_t bi_status);
> static void ploop_put_piwb(struct ploop_index_wb *piwb)
> {
> if (atomic_dec_and_test(&piwb->count)) {
> - struct ploop *ploop = piwb->ploop;
> - /*
> - * Index wb failed. Mark clusters as unallocated again.
> - * piwb->count is zero, so all data writers compeleted.
> - */
> - if (piwb->bi_status)
> - ploop_advance_local_after_bat_wb(ploop, piwb, false);
> +
> + ploop_bat_write_finish(piwb->pio, piwb, piwb->bi_status);
>
> if (piwb->comp) {
> if (piwb->comp_bi_status)
> *piwb->comp_bi_status = piwb->bi_status;
> complete(piwb->comp);
> }
> + /*
> + * Status is set from first call to ploop_bat_write_complete
> + * zero keeps it as is
> + */
It looks like this comment belongs to ploop_bat_write_complete.
> +
> ploop_free_piwb(piwb);
> }
> }
>
> /* This handler is called after BAT is updated. */
> -static void ploop_bat_write_complete(struct pio *pio, void *piwb_ptr,
> +static void ploop_bat_write_finish(struct pio *pio, void *piwb_ptr,
> blk_status_t bi_status)
> {
> struct ploop_index_wb *piwb = piwb_ptr;
...
> @@ -1000,11 +1006,17 @@ static void ploop_bat_write_complete(struct pio *pio, void *piwb_ptr,
> ploop_dispatch_pios(ploop, flush_pio, NULL);
> piwb->flush_pio = NULL;
> }
> +}
> +
> +static void ploop_bat_write_complete(struct pio *pio, void *piwb_ptr,
> + blk_status_t bi_status)
> +
> +{
> + struct ploop_index_wb *piwb = piwb_ptr;
> +
For instance here, where we have piwb status update when have pio error.
> + if (bi_status)
> + piwb->bi_status = bi_status;
>
> - /*
> - * In case of update BAT is failed, dst_clusters will be
> - * set back to holes_bitmap on last put_piwb().
> - */
> ploop_put_piwb(piwb);
> }
More information about the Devel
mailing list