The commit is pushed to "branch-rh7-3.10.0-327.10.1.vz7.12.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-327.10.1.vz7.12.17 ------> commit 7cd35b576e4e45248df9ad7728f207fd1fc5a462 Author: Dmitry Monakhov <dmonak...@openvz.org> Date: Tue May 10 20:22:50 2016 +0400
ploop: push_backup: fix reentrance in ploop_pb_get_pending() The patch implements what Dima Monakhov suggested: > AFAIU you have a re-entrance issue if several tasks want performs ioctls > task1:ioctl->wait > task2:ioctl->wait > > Just change wait sequence like this and you are safe: > /* blocking case */ > if (unlikely(pbd->ppb_waiting)) > /* Other task is already waitng for event */ > err = -EBUSY; > goto get_pending_unlock; > } > pbd->ppb_waiting = true; > spin_unlock(&pbd->ppb_lock); > mutex_unlock(&plo->ctl_mutex); Fixes commit adcff732cabc43be32649055afd8a1aed41c63d9 ("ploop: implement PLOOP_IOC_PUSH_BACKUP_IO"). https://jira.sw.ru/browse/PSBM-45000 Signed-off-by: Maxim Patlasov <mpatla...@virtuozzo.com> --- drivers/block/ploop/push_backup.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/block/ploop/push_backup.c b/drivers/block/ploop/push_backup.c index 05af67c..056918c 100644 --- a/drivers/block/ploop/push_backup.c +++ b/drivers/block/ploop/push_backup.c @@ -466,6 +466,11 @@ int ploop_pb_get_pending(struct ploop_pushbackup_desc *pbd, } /* blocking case */ + if (unlikely(pbd->ppb_waiting)) { + /* Other task is already waiting for event */ + err = -EBUSY; + goto get_pending_unlock; + } pbd->ppb_waiting = true; spin_unlock(&pbd->ppb_lock); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel