[Devel,RHEL7,COMMIT] ploop: push_backup: avoid deadlock on PLOOP_PEEK

Submitted by Konstantin Khorenko on Nov. 28, 2016, 2:31 p.m.


Message ID 201611281431.uASEVgjf021705@finist_cl7.x64_64.work.ct
State New
Series "ploop: push_backup: avoid deadlock on PLOOP_PEEK"
Headers show

Commit Message

Konstantin Khorenko Nov. 28, 2016, 2:31 p.m.
The commit is pushed to "branch-rh7-3.10.0-327.36.1.vz7.20.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-327.36.1.vz7.20.6
commit 697c1ea2ec23bc23d80172c11c7754b4db016e5c
Author: Maxim Patlasov <mpatlasov@virtuozzo.com>
Date:   Mon Nov 28 18:31:42 2016 +0400

    ploop: push_backup: avoid deadlock on PLOOP_PEEK
    ioctl handlers for PLOOP_IOC_PUSH_BACKUP_IO, including
    ctl.direction = PLOOP_PEEK must not use ploop_quiesce/relax
    because ploop_quiesce waits for completion of active requests,
    but some of them may be currently blocked on the progress of
    vz_backup_client. Deadlock.
    Calling ploop_pb_peek() without protection of ploop_quiesce
    is safe because it acquires pbd->ppb_lock anyway. The result
    of the ioctl must be consistent because incoming bio-s rely
    on the state push_backup maps, but they never change them.
    Signed-off-by: Maxim Patlasov <mpatlasov@virtuozzo.com>
 drivers/block/ploop/dev.c | 2 --
 1 file changed, 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
index 4600bfe..5aacd2a 100644
--- a/drivers/block/ploop/dev.c
+++ b/drivers/block/ploop/dev.c
@@ -4914,9 +4914,7 @@  static int ploop_push_backup_io_peek(struct ploop_device *plo,
 	int rc;
-	ploop_quiesce(plo);
 	rc = ploop_push_backup_io_get(plo, arg, ctl, ploop_pb_peek);
-	ploop_relax(plo);
 	if (rc == -ENOENT) {
 		ctl->n_extents = 0;