[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