extern kmem_cache_t *mds_file_cache;
extern inline struct mds_obd *mds_req2mds(struct ptlrpc_request *req);
-extern void mds_start_transno(struct mds_obd *mds);
-extern int mds_finish_transno(struct mds_obd *mds, void *handle,
- struct ptlrpc_request *req, int rc);
+int mds_finish_transno(struct mds_obd *mds, struct inode *i, void *handle,
+ struct ptlrpc_request *req, int rc, __u32 op_data);
extern int enqueue_ordered_locks(int lock_mode, struct obd_device *obd,
struct ldlm_res_id *p1_res_id,
struct ldlm_res_id *p2_res_id,
if ((rec->ur_flags & O_CREAT) && !dchild->d_inode) {
int err;
void *handle;
- mds_start_transno(mds);
rep->lock_policy_res1 |= IT_OPEN_CREATE;
handle = fsfilt_start(obd, parent->d_inode, FSFILT_OP_CREATE);
if (IS_ERR(handle)) {
rc = PTR_ERR(handle);
- mds_finish_transno(mds, handle, req, rc);
+ mds_finish_transno(mds, parent->d_inode, handle, req,
+ rc, rep->lock_policy_res1);
GOTO(out_step_3, rc);
}
rc = vfs_create(parent->d_inode, dchild, rec->ur_mode);
- rc = mds_finish_transno(mds, handle, req, rc);
- err = fsfilt_commit(obd, parent->d_inode, handle);
- if (rc || err) {
+ err = mds_finish_transno(mds, parent->d_inode, handle, req, rc,
+ rep->lock_policy_res1);
+ if (err) {
CERROR("error on commit: err = %d\n", err);
if (!rc)
rc = err;