case OBD_NOTIFY_CONFIG:
rc = md_do_upcall(NULL, &mdd->mdd_md_dev, MD_LOV_CONFIG);
break;
+#ifdef HAVE_QUOTA_SUPPORT
+ case OBD_NOTIFY_QUOTA:
+ rc = md_do_upcall(NULL, &mdd->mdd_md_dev, MD_LOV_QUOTA);
+ break;
+#endif
default:
CDEBUG(D_INFO, "Unhandled notification %#x\n", ev);
}
*md_size = 0;
rc = 0;
} else if (rc < 0) {
- CERROR("Error %d reading eadata \n", rc);
+ CERROR("Error %d reading eadata - %d\n", rc, *md_size);
} else {
/* XXX: Convert lov EA but fixed after verification test. */
*md_size = rc;
RETURN(rc);
obd_free_memmd(lov_exp, &lsm);
- rc = mdd_xattr_set_txn(env, obj, buf, MDS_LOV_MD_NAME, 0, handle);
+ rc = mdd_xattr_set_txn(env, obj, buf, XATTR_NAME_LOV, 0, handle);
CDEBUG(D_INFO, "set lov ea of "DFID" rc %d \n", PFID(mdo2fid(obj)), rc);
RETURN(rc);
lum->lmm_stripe_offset == (typeof(lum->lmm_stripe_offset))(-1) &&
lum->lmm_magic != LOV_USER_MAGIC_V3) {
rc = mdd_xattr_set_txn(env, obj, &LU_BUF_NULL,
- MDS_LOV_MD_NAME, 0, handle);
+ XATTR_NAME_LOV, 0, handle);
if (rc == -ENODATA)
rc = 0;
CDEBUG(D_INFO, "delete lov ea of "DFID" rc %d \n",
rc = mdd_lov_set_stripe_md(env, child, buf, handle);
} else {
rc = mdd_xattr_set_txn(env, child, buf,
- MDS_LOV_MD_NAME, 0, handle);
+ XATTR_NAME_LOV, 0, handle);
}
} else if (S_ISDIR(mode)) {
if (lmmp == NULL && lmm_size == 0) {
/* Get parent dir stripe and set */
if (pobj != NULL)
rc = mdd_get_md_locked(env, pobj, lmm, &size,
- MDS_LOV_MD_NAME);
+ XATTR_NAME_LOV);
if (rc > 0) {
buf = mdd_buf_get(env, lmm, size);
rc = mdd_xattr_set_txn(env, child, buf,
- MDS_LOV_MD_NAME, 0, handle);
+ XATTR_NAME_LOV, 0, handle);
if (rc)
CERROR("error on copy stripe info: rc "
"= %d\n", rc);
return fid_flatten(fid);
}
-static void mdd_lov_update_objids(struct obd_device *obd, struct lov_mds_md *lmm)
+int mdd_lov_objid_prepare(struct mdd_device *mdd, struct lov_mds_md *lmm)
{
- struct mds_obd *mds = &obd->u.mds;
- int j;
- struct lov_ost_data_v1 *lmm_objects;
- ENTRY;
-
- /* if we create file without objects - lmm is NULL */
- if (lmm == NULL)
- return;
-
- if (le32_to_cpu(lmm->lmm_magic) == LOV_MAGIC_V3)
- lmm_objects = ((struct lov_mds_md_v3 *)lmm)->lmm_objects;
- else
- lmm_objects = lmm->lmm_objects;
-
- for (j = 0; j < le32_to_cpu(lmm->lmm_stripe_count); j++) {
- int i = le32_to_cpu(lmm_objects[j].l_ost_idx);
- obd_id id = le64_to_cpu(lmm_objects[j].l_object_id);
- int page = i / OBJID_PER_PAGE();
- int idx = i % OBJID_PER_PAGE();
- obd_id *data = mds->mds_lov_page_array[page];
-
- CDEBUG(D_INODE,"update last object for ost %d - new %llu"
- " old %llu\n", i, id, data[idx]);
- if (id > data[idx]) {
- data[idx] = id;
- cfs_bitmap_set(mds->mds_lov_page_dirty, page);
- }
- }
- EXIT;
+ /* copy mds_lov code is using wrong layer */
+ return mds_lov_prepare_objids(mdd->mdd_obd_dev, lmm);
}
void mdd_lov_objid_update(struct mdd_device *mdd, struct lov_mds_md *lmm)
{
- mdd_lov_update_objids(mdd->mdd_obd_dev, lmm);
+ /* copy mds_lov code is using wrong layer */
+ mds_lov_update_objids(mdd->mdd_obd_dev, lmm);
}
void mdd_lov_create_finish(const struct lu_env *env, struct mdd_device *mdd,
struct lov_mds_md *lmm, int lmm_size,
const struct md_op_spec *spec)
{
- if (lmm && !spec->u.sp_ea.no_lov_create)
+ if (lmm && !spec->no_create)
OBD_FREE(lmm, lmm_size);
}
int rc = 0;
ENTRY;
- if (!md_should_create(create_flags))
+ if (!md_should_create(create_flags)) {
+ *lmm_size = 0;
RETURN(0);
-
+ }
oti_init(oti, NULL);
/* replay case, has objects already, only get lov from eadata */
- if (spec->u.sp_ea.no_lov_create != 0) {
+ if (spec->no_create != 0) {
*lmm = (struct lov_mds_md *)spec->u.sp_ea.eadata;
*lmm_size = spec->u.sp_ea.eadatalen;
RETURN(0);
rc = mdd_get_md_locked(env, parent, _lmm,
&_lmm_size,
- MDS_LOV_MD_NAME);
+ XATTR_NAME_LOV);
if (rc > 0)
rc = obd_iocontrol(OBD_IOC_LOV_SETSTRIPE,
- lov_exp, 0, &lsm, _lmm);
+ lov_exp, *lmm_size,
+ &lsm, _lmm);
+
if (rc)
GOTO(out_oti, rc);
}
CERROR("Cannot pack lsm, err = %d\n", rc);
GOTO(out_oti, rc);
}
+ if (mdd_lov_objid_prepare(mdd, *lmm) != 0) {
+ CERROR("Not have memory for update objid\n");
+ OBD_FREE(*lmm, rc);
+ *lmm = NULL;
+ GOTO(out_oti, rc = -ENOMEM);
+ }
*lmm_size = rc;
rc = 0;
EXIT;
CDEBUG(D_INFO, "destroying OSS object %d/%d\n",
(int)oa->o_id, (int)oa->o_gr);
- rc = obd_destroy(lov_exp, oa, lsm, oti, NULL, BYPASS_CAPA);
+ rc = obd_destroy(lov_exp, oa, lsm, oti, NULL, NULL);
obd_free_memmd(lov_exp, &lsm);
RETURN(rc);
/* get lov ea */
rc = mdd_get_md_locked(env, obj, ma->ma_lmm, &ma->ma_lmm_size,
- MDS_LOV_MD_NAME);
+ XATTR_NAME_LOV);
if (rc <= 0) {
CWARN("Get lov ea failed for "DFID" rc = %d\n",
if ((ma->ma_cookie_size > 0) &&
(mdd_log_op_unlink(obd, ma->ma_lmm, ma->ma_lmm_size,
ma->ma_cookie, ma->ma_cookie_size) > 0)) {
+ CDEBUG(D_HA, "DEBUG: unlink log is added for object "DFID"\n",
+ PFID(mdd_object_fid(mdd_cobj)));
ma->ma_valid |= MA_COOKIE;
}
return 0;