diff --git a/lustre/lod/lod_lov.c b/lustre/lod/lod_lov.c
index 08fbeda..b41084e 100644
--- a/lustre/lod/lod_lov.c
+++ b/lustre/lod/lod_lov.c
@@ -772,7 +772,7 @@ int lod_store_def_striping(const struct lu_env *env, struct dt_object *dt,
 	 */
 
 	/* probably nothing to inherite */
-	if (lo->ldo_striping_cached == 0)
+	if (lo->ldo_def_striping_set == 0)
 		RETURN(0);
 
 	if (LOVEA_DELETE_VALUES(lo->ldo_def_stripe_size, lo->ldo_def_stripenr,
@@ -1056,6 +1056,9 @@ int lod_load_striping_locked(const struct lu_env *env, struct lod_object *lo)
 		 */
 		rc = lod_parse_dir_striping(env, lo, buf);
 	}
+
+	if (rc == 0)
+		lo->ldo_striping_cached = 1;
 out:
 	RETURN(rc);
 }
@@ -1081,6 +1084,9 @@ int lod_load_striping(const struct lu_env *env, struct lod_object *lo)
 	struct dt_object	*next = dt_object_child(&lo->ldo_obj);
 	int			rc = 0;
 
+	if (lo->ldo_striping_cached)
+		return rc;
+
 	/* currently this code is supposed to be called from declaration
 	 * phase only, thus the object is not expected to be locked by caller */
 	dt_write_lock(env, next, 0);
diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c
index 2094ae9..f4a4a42 100644
--- a/lustre/lod/lod_object.c
+++ b/lustre/lod/lod_object.c
@@ -1633,7 +1633,7 @@ next:
 			GOTO(out_put, rc);
 
 		/* probably nothing to inherite */
-		if (lo->ldo_striping_cached &&
+		if (lo->ldo_def_striping_set &&
 		    !LOVEA_DELETE_VALUES(lo->ldo_def_stripe_size,
 					 lo->ldo_def_stripenr,
 					 lo->ldo_def_stripe_offset)) {
@@ -2121,7 +2121,7 @@ static int lod_xattr_set_lmv(const struct lu_env *env, struct dt_object *dt,
 		if (rc != 0)
 			RETURN(rc);
 
-		if (lo->ldo_striping_cached &&
+		if (lo->ldo_def_striping_set &&
 		    !LOVEA_DELETE_VALUES(lo->ldo_def_stripe_size,
 					 lo->ldo_def_stripenr,
 					 lo->ldo_def_stripe_offset)) {
@@ -2284,7 +2284,7 @@ int lod_dir_striping_create_internal(const struct lu_env *env,
 	}
 
 	/* Transfer default LOV striping from the parent */
-	if (lo->ldo_striping_cached &&
+	if (lo->ldo_def_striping_set &&
 	    !LOVEA_DELETE_VALUES(lo->ldo_def_stripe_size,
 				 lo->ldo_def_stripenr,
 				 lo->ldo_def_stripe_offset)) {
@@ -2464,7 +2464,6 @@ static int lod_cache_parent_lov_striping(const struct lu_env *env,
 	if (rc < (typeof(rc))sizeof(struct lov_user_md)) {
 		/* don't lookup for non-existing or invalid striping */
 		lp->ldo_def_striping_set = 0;
-		lp->ldo_striping_cached = 1;
 		lp->ldo_def_stripe_size = 0;
 		lp->ldo_def_stripenr = 0;
 		lp->ldo_def_stripe_offset = (typeof(v1->lmm_stripe_offset))(-1);
@@ -2494,7 +2493,6 @@ static int lod_cache_parent_lov_striping(const struct lu_env *env,
 	lp->ldo_def_stripenr = v1->lmm_stripe_count;
 	lp->ldo_def_stripe_size = v1->lmm_stripe_size;
 	lp->ldo_def_stripe_offset = v1->lmm_stripe_offset;
-	lp->ldo_striping_cached = 1;
 	lp->ldo_def_striping_set = 1;
 	if (v1->lmm_magic == LOV_USER_MAGIC_V3) {
 		/* XXX: sanity check here */
@@ -2557,11 +2555,7 @@ static int lod_cache_parent_striping(const struct lu_env *env,
 	int rc = 0;
 	ENTRY;
 
-	rc = lod_load_striping(env, lp);
-	if (rc != 0)
-		RETURN(rc);
-
-	if (!lp->ldo_striping_cached) {
+	if (!lp->ldo_def_striping_set) {
 		/* we haven't tried to get default striping for
 		 * the directory yet, let's cache it in the object */
 		rc = lod_cache_parent_lov_striping(env, lp);
@@ -2598,9 +2592,6 @@ static void lod_ah_init(const struct lu_env *env,
 	if (likely(parent)) {
 		nextp = dt_object_child(parent);
 		lp = lod_dt_obj(parent);
-		rc = lod_load_striping(env, lp);
-		if (rc != 0)
-			return;
 	}
 
 	nextc = dt_object_child(child);
@@ -2636,13 +2627,12 @@ static void lod_ah_init(const struct lu_env *env,
 			return;
 
 		/* transfer defaults to new directory */
-		if (lp->ldo_striping_cached) {
+		if (lp->ldo_def_striping_set) {
 			if (lp->ldo_pool)
 				lod_object_set_pool(lc, lp->ldo_pool);
 			lc->ldo_def_stripenr = lp->ldo_def_stripenr;
 			lc->ldo_def_stripe_size = lp->ldo_def_stripe_size;
 			lc->ldo_def_stripe_offset = lp->ldo_def_stripe_offset;
-			lc->ldo_striping_cached = 1;
 			lc->ldo_def_striping_set = 1;
 			CDEBUG(D_OTHER, "inherite EA sz:%d off:%d nr:%d\n",
 			       (int)lc->ldo_def_stripe_size,
diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c
index 1577c54..e185dc5 100644
--- a/lustre/mdd/mdd_dir.c
+++ b/lustre/mdd/mdd_dir.c
@@ -337,8 +337,6 @@ int mdd_may_create(const struct lu_env *env, struct mdd_object *pobj,
 		   const struct lu_attr *pattr, struct mdd_object *cobj,
 		   bool check_perm)
 {
-	struct mdd_thread_info *info = mdd_env_info(env);
-	struct lu_buf	*xbuf;
 	int rc = 0;
 	ENTRY;
 
@@ -348,19 +346,6 @@ int mdd_may_create(const struct lu_env *env, struct mdd_object *pobj,
 	if (mdd_is_dead_obj(pobj))
 		RETURN(-ENOENT);
 
-	/* If the parent is a sub-stripe, check whether it is dead */
-	xbuf = mdd_buf_get(env, info->mti_key, sizeof(info->mti_key));
-	rc = mdo_xattr_get(env, pobj, xbuf, XATTR_NAME_LMV,
-			   mdd_object_capa(env, pobj));
-	if (unlikely(rc > 0)) {
-		struct lmv_mds_md_v1  *lmv1 = xbuf->lb_buf;
-
-		if (le32_to_cpu(lmv1->lmv_magic) == LMV_MAGIC_STRIPE &&
-		    le32_to_cpu(lmv1->lmv_hash_type) & LMV_HASH_FLAG_DEAD)
-			RETURN(-ESTALE);
-	}
-	rc = 0;
-
 	if (check_perm)
 		rc = mdd_permission_internal_locked(env, pobj, pattr,
 						    MAY_WRITE | MAY_EXEC,
diff --git a/lustre/osd-ldiskfs/osd_oi.c b/lustre/osd-ldiskfs/osd_oi.c
index 476313e..2971b48 100644
--- a/lustre/osd-ldiskfs/osd_oi.c
+++ b/lustre/osd-ldiskfs/osd_oi.c
@@ -493,8 +493,6 @@ static int osd_oi_iam_lookup(struct osd_thread_info *oti,
 int fid_is_on_ost(struct osd_thread_info *info, struct osd_device *osd,
 		  const struct lu_fid *fid, enum oi_check_flags flags)
 {
-	struct lu_seq_range	*range = &info->oti_seq_range;
-	int			rc;
 	ENTRY;
 
 	if (flags & OI_KNOWN_ON_OST)
@@ -511,17 +509,8 @@ int fid_is_on_ost(struct osd_thread_info *info, struct osd_device *osd,
 	if (!(flags & OI_CHECK_FLD))
 		RETURN(0);
 
-	rc = osd_fld_lookup(info->oti_env, osd, fid_seq(fid), range);
-	if (rc != 0) {
-		if (rc != -ENOENT)
-			CERROR("%s: lookup FLD "DFID": rc = %d\n",
-			       osd_name(osd), PFID(fid), rc);
-		RETURN(0);
-	}
-
-	if (fld_range_is_ost(range))
+	if (osd->od_is_ost)
 		RETURN(1);
-
 	RETURN(0);
 }
 
