RETURN(0);
}
- mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
-
/*
* We need to return the existing object's fid back, so it is done here,
* after preparing the reply.
else
repbody->valid |= OBD_MD_FLEASIZE;
}
+ mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
RETURN(0);
}
}
rc = mdt_mfd_open(info, p, o, flags, created);
+ if (!rc)
+ mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
+
RETURN(rc);
}
GOTO(out, rc);
}
mdt_set_disposition(info, rep, (DISP_IT_EXECD |
- DISP_LOOKUP_EXECD |
- DISP_LOOKUP_POS));
+ DISP_LOOKUP_EXECD));
if (flags & FMODE_WRITE)
lm = LCK_CW;
}
}
- if (flags & MDS_OPEN_LOCK)
- mdt_set_disposition(info, rep, DISP_OPEN_LOCK);
rc = mdt_finish_open(info, parent, o, flags, 0, rep);
if (!(flags & MDS_OPEN_LOCK) || rc)
mdt_object_unlock(info, o, lhc, 1);
+ if (!rc) {
+ mdt_set_disposition(info, rep, DISP_LOOKUP_POS);
+ if (flags & MDS_OPEN_LOCK)
+ mdt_set_disposition(info, rep, DISP_OPEN_LOCK);
+ }
+
GOTO(out, rc);
out:
mdt_object_put(env, o);
created, ldlm_rep);
if (rc) {
result = rc;
- if (lustre_handle_is_used(&lhc->mlh_reg_lh))
+ if (lustre_handle_is_used(&lhc->mlh_reg_lh)) {
/* openlock was acquired and mdt_finish_open failed -
drop the openlock */
mdt_object_unlock(info, child, lhc, 1);
+ mdt_clear_disposition(info, ldlm_rep, DISP_OPEN_LOCK);
+ }
if (created) {
ma->ma_need = 0;
ma->ma_valid = 0;
&info->mti_attr);
if (rc != 0)
CERROR("Error in cleanup of open\n");
+ mdt_clear_disposition(info, ldlm_rep, DISP_OPEN_CREATE);
}
}
EXIT;