struct thandle *handle;
struct lov_mds_md *lmm = NULL;
struct llog_cookie *logcookies = NULL;
- int rc, lmm_size = 0, cookie_size = 0;
+ int rc, lmm_size = 0, cookie_size = 0, chlog_cnt;
struct lu_attr *la_copy = &mdd_env_info(env)->mti_la_for_fix;
-#ifdef HAVE_QUOTA_SUPPORT
struct obd_device *obd = mdd->mdd_obd_dev;
struct mds_obd *mds = &obd->u.mds;
+#ifdef HAVE_QUOTA_SUPPORT
unsigned int qnids[MAXQUOTAS] = { 0, 0 };
unsigned int qoids[MAXQUOTAS] = { 0, 0 };
int quota_opc = 0, block_count = 0;
ma->ma_attr.la_valid == LA_ATIME && la_copy->la_valid == 0)
RETURN(0);
- mdd_setattr_txn_param_build(env, obj, (struct md_attr *)ma,
- MDD_TXN_ATTR_SET_OP);
- handle = mdd_trans_start(env, mdd);
- if (IS_ERR(handle))
- RETURN(PTR_ERR(handle));
/*TODO: add lock here*/
/* start a log jounal handle if needed */
if (S_ISREG(mdd_object_type(mdd_obj)) &&
lmm_size = mdd_lov_mdsize(env, mdd);
lmm = mdd_max_lmm_get(env, mdd);
if (lmm == NULL)
- GOTO(cleanup, rc = -ENOMEM);
+ GOTO(no_trans, rc = -ENOMEM);
rc = mdd_get_md_locked(env, mdd_obj, lmm, &lmm_size,
XATTR_NAME_LOV);
if (rc < 0)
- GOTO(cleanup, rc);
+ GOTO(no_trans, rc);
}
+ chlog_cnt = 1;
+ if (la_copy->la_valid && !(la_copy->la_valid & LA_FLAGS) && lmm_size) {
+ chlog_cnt += (lmm->lmm_stripe_count >= 0) ?
+ lmm->lmm_stripe_count : mds->mds_lov_desc.ld_tgt_count;
+ }
+ mdd_setattr_txn_param_build(env, obj, (struct md_attr *)ma,
+ MDD_TXN_ATTR_SET_OP, chlog_cnt);
+ handle = mdd_trans_start(env, mdd);
+ if (IS_ERR(handle))
+ GOTO(no_trans, rc = PTR_ERR(handle));
+
if (ma->ma_attr.la_valid & (LA_MTIME | LA_CTIME))
CDEBUG(D_INODE, "setting mtime "LPU64", ctime "LPU64"\n",
ma->ma_attr.la_mtime, ma->ma_attr.la_ctime);
rc = mdd_attr_set_changelog(env, obj, handle,
ma->ma_attr.la_valid);
mdd_trans_stop(env, mdd, rc, handle);
+no_trans:
if (rc == 0 && (lmm != NULL && lmm_size > 0 )) {
/*set obd attr, if needed*/
rc = mdd_lov_setattr_async(env, mdd_obj, lmm, lmm_size,
if (rc)
RETURN(rc);
- mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP);
+ mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP, 1);
/* security-replated changes may require sync */
if (!strcmp(name, XATTR_NAME_ACL_ACCESS) &&
mdd->mdd_sync_permission == 1)
if (rc)
RETURN(rc);
- mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP);
+ mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP, 1);
handle = mdd_trans_start(env, mdd);
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
LASSERT(mdd_object_exists(mdd_obj) > 0);
- rc = mdd_log_txn_param_build(env, obj, ma, MDD_TXN_UNLINK_OP);
+ rc = mdd_log_txn_param_build(env, obj, ma, MDD_TXN_UNLINK_OP, 0);
if (rc)
RETURN(rc);
}
#endif
- mdd_txn_param_build(env, mdd, MDD_TXN_OBJECT_CREATE_OP);
+ mdd_txn_param_build(env, mdd, MDD_TXN_OBJECT_CREATE_OP, 0);
handle = mdd_trans_start(env, mdd);
if (IS_ERR(handle))
GOTO(out_pending, rc = PTR_ERR(handle));
int rc;
ENTRY;
- mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP);
+ mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP, 0);
handle = mdd_trans_start(env, mdd);
if (IS_ERR(handle))
RETURN(-ENOMEM);
if (mdd_obj->mod_count == 1 &&
(mdd_obj->mod_flags & (ORPHAN_OBJ | DEAD_OBJ)) != 0) {
again:
- rc = mdd_log_txn_param_build(env, obj, ma, MDD_TXN_UNLINK_OP);
+ rc = mdd_log_txn_param_build(env, obj, ma, MDD_TXN_UNLINK_OP, 0);
if (rc)
RETURN(rc);
handle = mdd_trans_start(env, mdo2mdd(obj));