[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH V2] tools: blktap2 fix stack overflow when closing vbd with pending_requests
When we close blktap and pending_requests have not been completed yet, the callchain like this: tapdisk_vbd_close-->with pending_requests
-->td_flag_set(vbd->state, TD_VBD_SHUTDOWN_REQUESTED); -->tapdisk_vbd_kick -->tapdisk_vbd_check_state -->tapdisk_vbd_close -->tapdisk_vbd_shutdown -->tapdisk_vbd_kick
which will inter a deadloop as above and makes stack overflow. To fix this, we just clear TD_VBD_SHUTDOWN_REQUESTED flag before tapdisk_vbd_shutdown. Signed-off-by: Weiwei Li<nuonuoli@xxxxxxxxxxx>
Signed-off-by: Xiaoming Gao <newtongao@xxxxxxxxxxx> Signed-off-by: Yi Li <peteryili@xxxxxxxxxxx>
--- tools/blktap2/drivers/tapdisk-vbd.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/tools/blktap2/drivers/tapdisk-vbd.c b/tools/blktap2/drivers/tapdisk-vbd.c
index c665f27..a6f697d 100644 --- a/tools/blktap2/drivers/tapdisk-vbd.c +++ b/tools/blktap2/drivers/tapdisk-vbd.c @@ -795,6 +795,7 @@ tapdisk_vbd_close(td_vbd_t *vbd)
!list_empty(&vbd->completed_requests))) goto fail; + td_flag_clear(vbd->state, TD_VBD_SHUTDOWN_REQUESTED); return tapdisk_vbd_shutdown(vbd); fail: @@ -1100,7 +1101,7 @@ tapdisk_vbd_check_state(td_vbd_t *vbd) if (td_flag_test(vbd->state, TD_VBD_PAUSE_REQUESTED)) tapdisk_vbd_pause(vbd); - if (td_flag_test(vbd->state, TD_VBD_SHUTDOWN_REQUESTED))
+ if (td_flag_test(vbd->state, TD_VBD_SHUTDOWN_REQUESTED) && list_empty(&vbd->pending_requests)) tapdisk_vbd_close(vbd); } -- 1.7.1 2014-03-12 20:33 GMT+08:00 weiwei li <weiweili821@xxxxxxxxx>:
_______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |