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;
if (la->la_valid == LA_ATIME) {
/* This is atime only set for read atime update on close. */
- if (la->la_atime <= tmp_la->la_atime + 0/*XXX:mds_atime_diff*/)
+ if (la->la_atime <= tmp_la->la_atime +
+ mdd_obj2mdd_dev(obj)->mdd_atime_diff)
la->la_valid &= ~LA_ATIME;
RETURN(0);
}
(tmp_la->la_mode & ~S_IALLUGO);
/* Also check the setgid bit! */
- if (!mdd_in_group_p(uc, (la->la_valid & LA_GID) ? la->la_gid :
+ if (!lustre_in_group_p(uc, (la->la_valid & LA_GID) ? la->la_gid :
tmp_la->la_gid) && !mdd_capable(uc, CAP_FSETID))
la->la_mode &= ~S_ISGID;
} else {
la->la_gid = tmp_la->la_gid;
if (((uc->mu_fsuid != tmp_la->la_uid) ||
((la->la_gid != tmp_la->la_gid) &&
- !mdd_in_group_p(uc, la->la_gid))) &&
+ !lustre_in_group_p(uc, la->la_gid))) &&
!mdd_capable(uc, CAP_CHOWN))
RETURN(-EPERM);
static int mdd_dir_page_build(const struct lu_env *env, int first,
void *area, int nob, struct dt_it_ops *iops,
- struct dt_it *it, __u32 *start, __u32 *end,
+ struct dt_it *it, __u64 *start, __u64 *end,
struct lu_dirent **last)
{
struct lu_fid *fid = &mdd_env_info(env)->mti_fid2;
char *name;
int len;
int recsize;
- __u32 hash;
+ __u64 hash;
name = (char *)iops->key(env, it);
len = iops->key_size(env, it);
hash = iops->store(env, it);
*end = hash;
- CDEBUG(D_INFO, "%p %p %d "DFID": %#8.8x (%d) \"%*.*s\"\n",
+ CDEBUG(D_INFO, "%p %p %d "DFID": "LPU64" (%d) \"%*.*s\"\n",
name, ent, nob, PFID(fid), hash, len, len, len, name);
if (nob >= recsize) {
int i;
int rc;
int nob;
- __u32 hash_start;
- __u32 hash_end;
+ __u64 hash_start;
+ __u64 hash_end;
LASSERT(rdpg->rp_pages != NULL);
LASSERT(next->do_index_ops != NULL);
*/
iops = &next->do_index_ops->dio_it;
it = iops->init(env, next, 0, mdd_object_capa(env, obj));
- if (it == NULL)
- return -ENOMEM;
+ if (IS_ERR(it))
+ return PTR_ERR(it);
rc = iops->load(env, it, rdpg->rp_hash);