From 490ea83a486c0c44274f4d4f6f77d8e0e16835d5 Mon Sep 17 00:00:00 2001 From: Ulka Vaze Date: Wed, 5 Aug 2015 18:02:09 -0700 Subject: [PATCH 1/1] LU-6516 ofd: fix double spin_unlock In ofd_inconsistency_verification_main(), spin_unlock() would be performed twice if OBD_ALLOC_PTR(lr) failed. This patch fixes this by adding a new label to gain lock again before unlocking. Signed-off-by: Ulka Vaze Signed-off-by: Dmitry Eremin Change-Id: If9838d75b9bf6936b99c9d92e8ff0c9b36d783c3 Reviewed-on: http://review.whamcloud.com/14875 Tested-by: Jenkins Reviewed-by: John L. Hammond Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/ofd/ofd_io.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lustre/ofd/ofd_io.c b/lustre/ofd/ofd_io.c index 3352616..892abb8 100644 --- a/lustre/ofd/ofd_io.c +++ b/lustre/ofd/ofd_io.c @@ -172,7 +172,7 @@ static int ofd_inconsistency_verification_main(void *args) OBD_ALLOC_PTR(lr); if (unlikely(lr == NULL)) - GOTO(out, rc = -ENOMEM); + GOTO(out_unlocked, rc = -ENOMEM); lr->lr_event = LE_PAIRS_VERIFY; lr->lr_active = LFSCK_TYPE_LAYOUT; @@ -223,6 +223,8 @@ static int ofd_inconsistency_verification_main(void *args) GOTO(out, rc = 0); +out_unlocked: + spin_lock(&ofd->ofd_inconsistency_lock); out: thread_set_flags(thread, SVC_STOPPED); wake_up_all(&thread->t_ctl_waitq); -- 1.8.3.1