Whamcloud - gitweb
LU-6516 ofd: fix double spin_unlock 75/14875/3
authorUlka Vaze <ulka.vaze@yahoo.in>
Thu, 6 Aug 2015 01:02:09 +0000 (18:02 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 18 Aug 2015 11:26:48 +0000 (11:26 +0000)
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 <ulka.vaze@yahoo.in>
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Change-Id: If9838d75b9bf6936b99c9d92e8ff0c9b36d783c3
Reviewed-on: http://review.whamcloud.com/14875
Tested-by: Jenkins
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ofd/ofd_io.c

index 3352616..892abb8 100644 (file)
@@ -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);