From fb64c701791e591f4fd1a849e4be774ff85145fc Mon Sep 17 00:00:00 2001 From: Ned Bass Date: Fri, 6 Jan 2017 17:43:47 -0800 Subject: [PATCH] LU-8562 osp: osp_precreate_thread gets stuck after disconnect osp_precreate_thread() can get stuck because d->opd_got_disconnected never gets reset. When opd_got_disconnected is set, osp_precreate_cleanup_orphans() returns early with EAGAIN and can't clear d->opd_pre_recovering. And because d->opd_pre_recovering can't be cleared we always break out of the while loop where d->opd_got_disconnected normally gets reset. So osp_precreate_cleanup_orphans() is stuck always failing. Signed-off-by: Ned Bass Change-Id: I0b4f4e2e55e7a8d7ffae633a4d3c578b4a484ae2 Reviewed-on: https://review.whamcloud.com/24758 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Sergey Cheremencev Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin --- lustre/osp/osp_precreate.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c index 8570fa6..f598387 100644 --- a/lustre/osp/osp_precreate.c +++ b/lustre/osp/osp_precreate.c @@ -1162,7 +1162,8 @@ static int osp_precreate_thread(void *_arg) */ while (osp_precreate_running(d)) { if (d->opd_pre_recovering && - d->opd_imp_connected) + d->opd_imp_connected && + !d->opd_got_disconnected) break; l_wait_event(d->opd_pre_waitq, !osp_precreate_running(d) || -- 1.8.3.1