Only check ldo_stripenr/ldo_stripe_offset before create
striped directory, and ldo_def_striping_set is used to
mark whether the directory has default stripe, which can
be inherited to its children.
Reset ldo_stripenr to 0, if initialization fails, otherwise
it will leave some invalid object in cache.
Change-Id: Iba6985861fb1443bd4e7fcce3cd8c523b31a5940
Signed-off-by: Wang Di <di.wang@intel.com>
Reviewed-on: http://review.whamcloud.com/10772
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
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>
lu_object_put(env, &stripe[i]->do_lu);
OBD_FREE(stripe, sizeof(stripe[0]) * stripe_len);
lu_object_put(env, &stripe[i]->do_lu);
OBD_FREE(stripe, sizeof(stripe[0]) * stripe_len);
} else {
lo->ldo_stripe = stripe;
lo->ldo_stripes_allocated = stripe_len;
} else {
lo->ldo_stripe = stripe;
lo->ldo_stripes_allocated = stripe_len;
- if (lo->ldo_dir_def_striping_set &&
- !LMVEA_DELETE_VALUES(lo->ldo_stripenr,
+ if (!LMVEA_DELETE_VALUES(lo->ldo_stripenr,
lo->ldo_dir_stripe_offset)) {
struct lmv_user_md_v1 *v1 = info->lti_ea_store;
int stripe_count = lo->ldo_stripenr;
lo->ldo_dir_stripe_offset)) {
struct lmv_user_md_v1 *v1 = info->lti_ea_store;
int stripe_count = lo->ldo_stripenr;
lc->ldo_dir_def_hash_type);
}
lc->ldo_dir_def_hash_type);
}
- /* If the directory is specified with certain stripes */
+ /* It should always honour the specified stripes */
if (ah->dah_eadata != NULL && ah->dah_eadata_len != 0) {
const struct lmv_user_md_v1 *lum1 = ah->dah_eadata;
if (ah->dah_eadata != NULL && ah->dah_eadata_len != 0) {
const struct lmv_user_md_v1 *lum1 = ah->dah_eadata;
lc->ldo_stripenr,
(int)lc->ldo_dir_stripe_offset);
}
lc->ldo_stripenr,
(int)lc->ldo_dir_stripe_offset);
}
+ /* then check whether there is default stripes from parent */
} else if (lp->ldo_dir_def_striping_set) {
/* If there are default dir stripe from parent */
lc->ldo_stripenr = lp->ldo_dir_def_stripenr;
} else if (lp->ldo_dir_def_striping_set) {
/* If there are default dir stripe from parent */
lc->ldo_stripenr = lp->ldo_dir_def_stripenr;
lu_object_put(env, &stripe[i]->do_lu);
OBD_FREE(stripe, sizeof(stripe[0]) * stripe_len);
lu_object_put(env, &stripe[i]->do_lu);
OBD_FREE(stripe, sizeof(stripe[0]) * stripe_len);
} else {
lo->ldo_stripe = stripe;
lo->ldo_stripes_allocated = stripe_len;
} else {
lo->ldo_stripe = stripe;
lo->ldo_stripes_allocated = stripe_len;