#define LOV_PATTERN_FIRST 0x100 /* first stripe is not in round-robin */
#define LOV_PATTERN_CMOBD 0x200
+#define LOV_OBJECT_GROUP_DEFAULT ~0ULL
+#define LOV_OBJECT_GROUP_CLEAR 0ULL
+
#define lov_ost_data lov_ost_data_v1
struct lov_ost_data_v1 { /* per-stripe data structure (little-endian)*/
__u64 l_object_id; /* OST object ID */
MA_COOKIE = (1 << 2),
MA_FLAGS = (1 << 3),
MA_LMV = (1 << 4),
- MA_ACL_DEF = (1 << 5)
+ MA_ACL_DEF = (1 << 5),
+ MA_LOV_DEF = (1 << 6)
};
typedef enum {
RETURN(rc);
}
+static int mdd_get_default_md(struct mdd_object *mdd_obj,
+ struct lov_mds_md *lmm, int *size)
+{
+ struct lov_desc *ldesc;
+ struct mdd_device *mdd = mdo2mdd(&mdd_obj->mod_obj);
+ ENTRY;
+
+ ldesc = &mdd->mdd_obd_dev->u.mds.mds_lov_desc;
+ LASSERT(ldesc != NULL);
+
+ if (!lmm)
+ RETURN(0);
+
+ lmm->lmm_magic = LOV_MAGIC_V1;
+ lmm->lmm_object_gr = LOV_OBJECT_GROUP_DEFAULT;
+ lmm->lmm_pattern = ldesc->ld_pattern;
+ lmm->lmm_stripe_size = ldesc->ld_default_stripe_size;
+ lmm->lmm_stripe_count = ldesc->ld_default_stripe_count;
+ *size = sizeof(struct lov_mds_md);
+
+ RETURN(sizeof(struct lov_mds_md));
+}
+
/* get lov EA only */
static int __mdd_lmm_get(const struct lu_env *env,
struct mdd_object *mdd_obj, struct md_attr *ma)
rc = mdd_get_md(env, mdd_obj, ma->ma_lmm, &ma->ma_lmm_size,
MDS_LOV_MD_NAME);
+
+ if (rc == 0 && (ma->ma_need & MA_LOV_DEF)) {
+ rc = mdd_get_default_md(mdd_obj, ma->ma_lmm,
+ &ma->ma_lmm_size);
+ }
+
if (rc > 0) {
ma->ma_valid |= MA_LOV;
rc = 0;
ma->ma_need = MA_LOV | MA_INODE;
}
+ if (S_ISDIR(lu_object_attr(&next->mo_lu)) &&
+ reqbody->valid & OBD_MD_FLDIREA &&
+ lustre_msg_get_opc(req->rq_reqmsg) == MDS_GETATTR) {
+ /* get default stripe info for this dir. */
+ ma->ma_need |= MA_LOV_DEF;
+ }
rc = mo_attr_get(env, next, ma);
if (unlikely(rc)) {
CERROR("getattr error for "DFID": %d\n",
mkdir -p $DIR/d65
$SETSTRIPE $DIR/d65 || error "setstripe"
- $GETSTRIPE -v $DIR/d65 | grep "has no stripe info" || error "no stripe info failed"
+ $GETSTRIPE -v $DIR/d65 | grep "Default" || error "no stripe info failed"
touch $DIR/d65/f6
$LVERIFY $DIR/d65 $DIR/d65/f6 || error "lverify failed"
}
mkdir -p $DIR/d65
$SETSTRIPE $DIR/d65 -s $(($STRIPESIZE * 2)) -i 0 -c 1 || error "setstripe"
$SETSTRIPE -d $DIR/d65 || error "setstripe"
- $GETSTRIPE -v $DIR/d65 | grep "has no stripe info" || \
+ $GETSTRIPE -v $DIR/d65 | grep "Default" || \
error "delete default stripe failed"
}
run_test 65g "directory setstripe -d ==========================="
/* if it's a directory */
if (is_dir) {
if (obdstripe == 1) {
+ if (lum->lmm_object_gr == LOV_OBJECT_GROUP_DEFAULT) {
+ llapi_printf(LLAPI_MSG_NORMAL, "(Default) ");
+ lum->lmm_object_gr = LOV_OBJECT_GROUP_CLEAR;
+ }
llapi_printf(LLAPI_MSG_NORMAL,
- "default stripe_count: %d stripe_size: %u "
+ "stripe_count: %d stripe_size: %u "
"stripe_offset: %d\n",
lum->lmm_stripe_count == (__u16)-1 ? -1 :
lum->lmm_stripe_count,