LASSERT(handle != NULL);
mfd = class_handle2object(handle->cookie);
/* during dw/setattr replay the mfd can be found by old handle */
- if (mfd == NULL &&
- lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) {
+ if (mfd == NULL && req_is_replay(req)) {
struct mdt_export_data *med = &req->rq_export->exp_mdt_data;
cfs_list_for_each_entry(mfd, &med->med_open_head, mfd_list) {
if (mfd->mfd_old_handle.cookie == handle->cookie)
mfd->mfd_xid = req->rq_xid;
/* replay handle */
- if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) {
+ if (req_is_replay(req)) {
struct mdt_file_data *old_mfd;
/* Check wheather old cookie already exist in
* the list, becasue when do recovery, client
PFID(rr->rr_fid2), create_flags,
ma->ma_attr.la_mode, msg_flags);
- if (msg_flags & MSG_REPLAY ||
+ if (req_is_replay(req) ||
(req->rq_export->exp_libclient && create_flags&MDS_OPEN_HAS_EA)) {
/* This is a replay request or from liblustre with ea. */
result = mdt_open_by_fid(info, ldlm_rep);
if (IS_ERR(parent))
GOTO(out, result = PTR_ERR(parent));
+ /* get and check version of parent */
+ result = mdt_version_get_check(info, parent, 0);
+ if (result)
+ GOTO(out_parent, result);
+
fid_zero(child_fid);
lname = mdt_name(info->mti_env, (char *)rr->rr_name, rr->rr_namelen);
-
result = mdo_lookup(info->mti_env, mdt_object_child(parent),
lname, child_fid, &info->mti_spec);
LASSERTF(ergo(result == 0, fid_is_sane(child_fid)),
if (IS_ERR(child))
GOTO(out_parent, result = PTR_ERR(child));
+ /** check version of child */
+ rc = mdt_version_get_check(info, child, 1);
+ if (rc)
+ GOTO(out_child, result = rc);
+
mdt_set_capainfo(info, 1, child_fid, BYPASS_CAPA);
if (result == -ENOENT) {
+ /* save versions in reply */
+ mdt_version_get_save(info, parent, 0);
+ mdt_version_get_save(info, child, 1);
+
+ /* version of child will be changed */
+ info->mti_mos = child;
+
/* Not found and with MDS_OPEN_CREAT: let's create it. */
mdt_set_disposition(info, ldlm_rep, DISP_OPEN_CREATE);
- info->mti_mos[0] = parent;
- info->mti_mos[1] = child;
- result = mdt_version_get_check(info, 0);
- if (result)
- GOTO(out_child, result);
-
/* Let lower layers know what is lock mode on directory. */
info->mti_spec.sp_cr_mode =
mdt_dlm_mode2mdl_mode(lh->mlh_pdo_mode);
LASSERT(!lustre_handle_is_used(&lhc->mlh_reg_lh));
/* get openlock if this is not replay and if a client requested it */
- if (!(msg_flags & MSG_REPLAY) && create_flags & MDS_OPEN_LOCK) {
+ if (!req_is_replay(req) && create_flags & MDS_OPEN_LOCK) {
ldlm_mode_t lm;
if (create_flags & FMODE_WRITE)