ldesc = &mdd->mdd_obd_dev->u.mds.mds_lov_desc;
LASSERT(ldesc != NULL);
- if (!lmm)
+ if (!lmm) {
+ *size = 0;
RETURN(0);
+ }
lmm->lmm_magic = LOV_MAGIC_V1;
lmm->lmm_object_gr = LOV_OBJECT_GROUP_DEFAULT;
rc = mdd_get_md(env, mdd_obj, ma->ma_lmm, &ma->ma_lmm_size,
XATTR_NAME_LOV);
-
- if (rc == 0 && (ma->ma_need & MA_LOV_DEF)) {
+ if (rc == 0 && (ma->ma_need & MA_LOV_DEF))
rc = mdd_get_default_md(mdd_obj, ma->ma_lmm,
- &ma->ma_lmm_size);
- }
-
+ &ma->ma_lmm_size);
if (rc > 0) {
ma->ma_valid |= MA_LOV;
rc = 0;
void mdt_pack_attr2body(struct mdt_thread_info *info, struct mdt_body *b,
const struct lu_attr *attr, const struct lu_fid *fid)
{
- struct md_attr *ma = &info->mti_attr;
-
- /*XXX should pack the reply body according to lu_valid*/
- b->valid |= OBD_MD_FLCTIME | OBD_MD_FLUID |
- OBD_MD_FLGID | OBD_MD_FLTYPE |
- OBD_MD_FLMODE | OBD_MD_FLNLINK | OBD_MD_FLFLAGS |
- OBD_MD_FLATIME | OBD_MD_FLMTIME ;
-
- if (!S_ISREG(attr->la_mode))
- b->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS | OBD_MD_FLRDEV;
+ struct md_attr *ma = &info->mti_attr;
- /* if no object is allocated on osts, the size on mds is valid. b=22272 */
- if (ma->ma_lmm_size == 0)
- b->valid |= OBD_MD_FLSIZE;
+ LASSERT(ma->ma_valid & MA_INODE);
b->atime = attr->la_atime;
b->mtime = attr->la_mtime;
b->nlink = attr->la_nlink;
b->rdev = attr->la_rdev;
+ /*XXX should pack the reply body according to lu_valid*/
+ b->valid |= OBD_MD_FLCTIME | OBD_MD_FLUID |
+ OBD_MD_FLGID | OBD_MD_FLTYPE |
+ OBD_MD_FLMODE | OBD_MD_FLNLINK | OBD_MD_FLFLAGS |
+ OBD_MD_FLATIME | OBD_MD_FLMTIME ;
+
+ if (!S_ISREG(attr->la_mode)) {
+ b->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS | OBD_MD_FLRDEV;
+ } else if (ma->ma_need & MA_LOV && ma->ma_lmm_size == 0) {
+ /* means no objects are allocated on osts. */
+ LASSERT(!(ma->ma_valid & MA_LOV));
+ /* just ignore blocks occupied by extend attributes on MDS */
+ b->blocks = 0;
+ /* if no object is allocated on osts, the size on mds is valid. b=22272 */
+ b->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS;
+ }
+
if (fid) {
b->fid1 = *fid;
b->valid |= OBD_MD_FLID;
repbody->eadatasize = ma->ma_lmv_size;
repbody->valid |= (OBD_MD_FLDIREA|OBD_MD_MEA);
}
- if (!(ma->ma_valid & MA_LOV) && !(ma->ma_valid & MA_LMV)) {
- repbody->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS;
- }
} else if (S_ISLNK(la->la_mode) &&
reqbody->valid & OBD_MD_LINKNAME) {
buffer->lb_buf = ma->ma_lmm;
info->mti_attr.ma_valid = 0;
info->mti_attr.ma_lmm_size = info->mti_mdt->mdt_max_mdsize;
- OBD_ALLOC(info->mti_attr.ma_lmm, info->mti_attr.ma_lmm_size);
+ OBD_ALLOC(info->mti_attr.ma_lmm, info->mti_mdt->mdt_max_mdsize);
if (info->mti_attr.ma_lmm == NULL)
RETURN(-ENOMEM);
rc = mdt_mfd_close(info, mfd);
- OBD_FREE(info->mti_attr.ma_lmm, info->mti_attr.ma_lmm_size);
+ OBD_FREE(info->mti_attr.ma_lmm, info->mti_mdt->mdt_max_mdsize);
mdt_empty_transno(info);
RETURN(rc);
}
/* Close the found mfd, update attributes. */
ma->ma_lmm_size = info->mti_mdt->mdt_max_mdsize;
- OBD_ALLOC(ma->ma_lmm, ma->ma_lmm_size);
+ OBD_ALLOC(ma->ma_lmm, info->mti_mdt->mdt_max_mdsize);
if (ma->ma_lmm == NULL)
GOTO(out_put, rc = -ENOMEM);
mdt_mfd_close(info, mfd);
- OBD_FREE(ma->ma_lmm, ma->ma_lmm_size);
+ OBD_FREE(ma->ma_lmm, info->mti_mdt->mdt_max_mdsize);
} else {
rc = mdt_attr_set(info, mo, ma, rr->rr_flags);
if (rc)