[Devel] [vzlin-dev] [PATCH rh7 1/2] ploop: push_backup: roll back ALLOW_READS patch

Dmitry Monakhov dmonakhov at openvz.org
Wed Jun 8 06:52:19 PDT 2016


Maxim Patlasov <mpatlasov at virtuozzo.com> writes:

> The patch reverts:
>
> Subject: [PATCH rh7] ploop: push_backup must pass READs intact
>
> If push_backup is in progress (doesn't matter "full" or "incremental") and
> ploop state-machine detects incoming WRITE request to the cluster-block that
> was not push_backup-ed yet, it suspends the request until userspace reports it
> as "processed".
>
> The above is fine, but while such a WRITE request is suspended, only
> subsequent WRITEs (to given cluster-block) must be suspended too. READs must
> not. Otherwise userspace backup tool will be blocked infinintely trying
> to push_backup given cluster-block.
>
> Passing READs while blocking WRITEs must be OK because: 1) ploop has not
> finalized that first WRITE yet; 2) given cluster-block will be kept
> intact (non-modified) while the WRITE is suspended.
>
> https://jira.sw.ru/browse/PSBM-46775
ACK
>
> Signed-off-by: Maxim Patlasov <mpatlasov at virtuozzo.com>
> ---
>  drivers/block/ploop/dev.c   |    7 -------
>  include/linux/ploop/ploop.h |    1 -
>  2 files changed, 8 deletions(-)
>
> diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
> index 96f7850..d3f0ec0 100644
> --- a/drivers/block/ploop/dev.c
> +++ b/drivers/block/ploop/dev.c
> @@ -1137,11 +1137,6 @@ static int check_lockout(struct ploop_request *preq)
>  		else if (preq->req_cluster > p->req_cluster)
>  			n = n->rb_right;
>  		else {
> -			/* do not block backup tool READs from /dev/ploop */
> -			if (!(preq->req_rw & REQ_WRITE) &&
> -			    test_bit(PLOOP_REQ_ALLOW_READS, &p->state))
> -				return 0;
> -
>  			list_add_tail(&preq->list, &p->delay_list);
>  			plo->st.bio_lockouts++;
>  			trace_preq_lockout(preq, p);
> @@ -2053,7 +2048,6 @@ restart:
>  			ploop_pb_clear_bit(plo->pbd, preq->req_cluster);
>  		} else {
>  			spin_lock_irq(&plo->lock);
> -			__set_bit(PLOOP_REQ_ALLOW_READS, &preq->state);
>  			ploop_add_lockout(preq, 0);
>  			spin_unlock_irq(&plo->lock);
>  			/*
> @@ -2072,7 +2066,6 @@ restart:
>  
>  		spin_lock_irq(&plo->lock);
>  		del_lockout(preq);
> -		__clear_bit(PLOOP_REQ_ALLOW_READS, &preq->state);
>  		if (!list_empty(&preq->delay_list))
>  			list_splice_init(&preq->delay_list, plo->ready_queue.prev);
>  		spin_unlock_irq(&plo->lock);
> diff --git a/include/linux/ploop/ploop.h b/include/linux/ploop/ploop.h
> index 0fba25e..77fd833 100644
> --- a/include/linux/ploop/ploop.h
> +++ b/include/linux/ploop/ploop.h
> @@ -470,7 +470,6 @@ enum
>  	PLOOP_REQ_KAIO_FSYNC,	/*force image fsync by KAIO module */
>  	PLOOP_REQ_POST_SUBMIT, /* preq needs post_submit processing */
>  	PLOOP_REQ_PUSH_BACKUP, /* preq was ACKed by userspace push_backup */
> -	PLOOP_REQ_ALLOW_READS, /* READs are allowed for given req_cluster */
>  	PLOOP_REQ_FSYNC_DONE,  /* fsync_thread() performed f_op->fsync() */
>  };
>  
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://lists.openvz.org/pipermail/devel/attachments/20160608/efc5cfb8/attachment.sig>


More information about the Devel mailing list