* GPL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
obd->obd_last_committed = mdt->mdt_lut.lut_last_transno;
cfs_spin_unlock(&mdt->mdt_lut.lut_translock);
- mdt->mdt_lut.lut_mount_count = mount_count + 1;
- lsd->lsd_mount_count = mdt->mdt_lut.lut_mount_count;
+ obd->u.obt.obt_mount_count = mount_count + 1;
+ lsd->lsd_mount_count = obd->u.obt.obt_mount_count;
/* save it, so mount count and last_transno is current */
rc = mdt_server_data_update(env, mdt);
RETURN(PTR_ERR(th));
CDEBUG(D_SUPER, "MDS mount_count is "LPU64", last_transno is "LPU64"\n",
- mdt->mdt_lut.lut_mount_count, mdt->mdt_lut.lut_last_transno);
+ mdt->mdt_lut.lut_obd->u.obt.obt_mount_count,
+ mdt->mdt_lut.lut_last_transno);
cfs_spin_lock(&mdt->mdt_lut.lut_translock);
mdt->mdt_lut.lut_lsd.lsd_last_transno = mdt->mdt_lut.lut_last_transno;
LASSERT(ergo(mti->mti_transno == 0, rc != 0));
if (lustre_msg_get_opc(req->rq_reqmsg) == MDS_CLOSE ||
lustre_msg_get_opc(req->rq_reqmsg) == MDS_DONE_WRITING) {
- if (mti->mti_transno != 0)
+ if (mti->mti_transno != 0) {
+ if (lcd->lcd_last_close_transno > mti->mti_transno) {
+ LASSERT(req_is_replay(req));
+ CERROR("Trying to overwrite bigger transno:"
+ "on-disk: "LPU64", new: "LPU64"\n",
+ lcd->lcd_last_close_transno,
+ mti->mti_transno);
+ cfs_spin_lock(&req->rq_export->exp_lock);
+ req->rq_export->exp_vbr_failed = 1;
+ cfs_spin_unlock(&req->rq_export->exp_lock);
+ cfs_mutex_up(&ted->ted_lcd_lock);
+ RETURN(-EOVERFLOW);
+ }
lcd->lcd_last_close_transno = mti->mti_transno;
+ }
lcd->lcd_last_close_xid = req->rq_xid;
lcd->lcd_last_close_result = rc;
} else {
lcd->lcd_pre_versions[2] = pre_versions[2];
lcd->lcd_pre_versions[3] = pre_versions[3];
}
- if (mti->mti_transno != 0)
+ if (mti->mti_transno != 0) {
+ if (lcd->lcd_last_transno > mti->mti_transno) {
+ LASSERT(req_is_replay(req));
+ CERROR("Trying to overwrite bigger transno:"
+ "on-disk: "LPU64", new: "LPU64"\n",
+ lcd->lcd_last_transno,
+ mti->mti_transno);
+ cfs_spin_lock(&req->rq_export->exp_lock);
+ req->rq_export->exp_vbr_failed = 1;
+ cfs_spin_unlock(&req->rq_export->exp_lock);
+ cfs_mutex_up(&ted->ted_lcd_lock);
+ RETURN(-EOVERFLOW);
+ }
lcd->lcd_last_transno = mti->mti_transno;
+ }
lcd->lcd_last_xid = req->rq_xid;
lcd->lcd_last_result = rc;
/*XXX: save intent_disposition in mdt_thread_info?
cfs_spin_lock(&mdt->mdt_lut.lut_translock);
if (txn->th_result != 0) {
if (mti->mti_transno != 0) {
- CERROR("Replay transno "LPU64" failed: rc %i\n",
+ CERROR("Replay transno "LPU64" failed: rc %d\n",
mti->mti_transno, txn->th_result);
}
} else if (mti->mti_transno == 0) {
oldrep->rs_opc);
svc = oldrep->rs_service;
- cfs_spin_lock (&svc->srv_lock);
+ cfs_spin_lock (&svc->srv_rs_lock);
cfs_list_del_init (&oldrep->rs_exp_list);
ptlrpc_schedule_difficult_reply (oldrep);
cfs_spin_unlock(&oldrep->rs_lock);
- cfs_spin_unlock (&svc->srv_lock);
+ cfs_spin_unlock (&svc->srv_rs_lock);
break;
}
cfs_spin_unlock(&exp->exp_lock);