Whamcloud - gitweb
LU-15832 lod: clear .do_index_ops in striping free 56/47256/2
authorLai Siyao <lai.siyao@whamcloud.com>
Thu, 28 Apr 2022 14:48:01 +0000 (10:48 -0400)
committerAndreas Dilger <adilger@whamcloud.com>
Sat, 4 Jun 2022 16:07:00 +0000 (16:07 +0000)
LDLM lock can guarantee LOD object directory striping is safe to
access, but lod_striping_free_nolock() should clear .do_index_ops,
otherwise upon some failure the directory striping is freed, while a
subsequent dt_try_as_dir() skips striping initialization, and call
.do_index_ops directly, which will cause crash.

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: Ib94a4ef2f8bf5f0d34521abff77d8be46ecbf428
Reviewed-on: https://review.whamcloud.com/47256
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Hongchao Zhang <hongchao@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/lod/lod_object.c

index ac8d0c0..504bb5f 100644 (file)
@@ -9149,6 +9149,7 @@ void lod_striping_free_nolock(const struct lu_env *env, struct lod_object *lo)
                lo->ldo_dir_stripes_allocated = 0;
                lo->ldo_dir_stripe_loaded = 0;
                lo->ldo_dir_stripe_count = 0;
+               lo->ldo_obj.do_index_ops = NULL;
        } else if (lo->ldo_comp_entries != NULL) {
                for (i = 0; i < lo->ldo_comp_cnt; i++) {
                        /* free lod_layout_component::llc_stripe array */