Whamcloud - gitweb
LU-12675 mdt: release object reference upon error 45/35845/3
authorBruno Faccini <bruno.faccini@intel.com>
Wed, 21 Aug 2019 13:32:54 +0000 (15:32 +0200)
committerOleg Drokin <green@whamcloud.com>
Tue, 27 Aug 2019 02:20:39 +0000 (02:20 +0000)
LBUG ("(lu_object.c:1196:lu_device_fini()) ASSERTION(
atomic_read(&d->ld_ref) == 0) failed: Refcount is <x>") can
intermitently occur during umount of MDT0000, upon specific
use cases (playing with file/dir having foreign LOV/LMV), and
due to object reference set/leaked on server side.

Signed-off-by: Bruno Faccini <bruno.faccini@intel.com>
Change-Id: Ic49b2bb0402b1a6e51d7ba656f9957eeda1bd0fb
Reviewed-on: https://review.whamcloud.com/35845
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mdt/mdt_reint.c

index ef6446a..9970f98 100644 (file)
@@ -962,7 +962,7 @@ relock:
        if (!cos_incompat) {
                rc = mdt_object_striped(info, mc);
                if (rc < 0)
        if (!cos_incompat) {
                rc = mdt_object_striped(info, mc);
                if (rc < 0)
-                       GOTO(unlock_parent, rc);
+                       GOTO(put_child, rc);
 
                cos_incompat = rc;
                if (cos_incompat) {
 
                cos_incompat = rc;
                if (cos_incompat) {