[Devel] [RH7 PATCH] ploop: reloc vs extent_conversion race fix

Maxim Patlasov mpatlasov at virtuozzo.com
Fri Jul 1 15:32:15 PDT 2016


Acked-by: Maxim Patlasov <mpatlasov at virtuozzo.com>

On 06/30/2016 06:34 PM, Dmitry Monakhov wrote:
> We have fixed most relocation bugs during fixing https://jira.sw.ru/browse/PSBM-47107
>
> Currently reloc_a looks like follows:
>
>   1->read_data_from_old_post
>   2->write_to_new_pos
>      ->sumbit_alloc
>        ->submit_pad
>    ->post_submit->convert_unwritten
>   3->update_index ->write_page with FLUSH|FUA
>   4->nullify_old_pos
>   5->issue_flush
>
> But on step 3 extent coversion is not yet stable because belongs to uncommitted
> transaction. We MUST call ->fsync inside ->post_sumit as we do for REQ_FUA
> requests. Let's tag relocatoin requests as FUA from very beginning in order to
> assert sync semantics.
>
> https://jira.sw.ru/browse/PSBM-49143
> Signed-off-by: Dmitry Monakhov <dmonakhov at openvz.org>
> ---
>   drivers/block/ploop/dev.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
> index 40768b6..e5f010b 100644
> --- a/drivers/block/ploop/dev.c
> +++ b/drivers/block/ploop/dev.c
> @@ -4097,7 +4097,7 @@ static void ploop_relocate(struct ploop_device * plo)
>   	preq->bl.tail = preq->bl.head = NULL;
>   	preq->req_cluster = 0;
>   	preq->req_size = 0;
> -	preq->req_rw = WRITE_SYNC;
> +	preq->req_rw = WRITE_SYNC|REQ_FUA;
>   	preq->eng_state = PLOOP_E_ENTRY;
>   	preq->state = (1 << PLOOP_REQ_SYNC) | (1 << PLOOP_REQ_RELOC_A);
>   	preq->error = 0;
> @@ -4401,7 +4401,7 @@ static void ploop_relocblks_process(struct ploop_device *plo)
>   		preq->bl.tail = preq->bl.head = NULL;
>   		preq->req_cluster = ~0U; /* uninitialized */
>   		preq->req_size = 0;
> -		preq->req_rw = WRITE_SYNC;
> +		preq->req_rw = WRITE_SYNC|REQ_FUA;
>   		preq->eng_state = PLOOP_E_ENTRY;
>   		preq->state = (1 << PLOOP_REQ_SYNC) | (1 << PLOOP_REQ_RELOC_S);
>   		preq->error = 0;



More information about the Devel mailing list