int niocount, struct niobuf_local *lnb,
unsigned long granted, int old_rc)
{
+ struct ofd_thread_info *info = ofd_info(env);
struct filter_export_data *fed = &exp->exp_filter_data;
struct ofd_object *fo;
struct dt_object *o;
GOTO(out_unlock, rc);
}
- if (la->la_valid) {
+ /* Don't update timestamps if this write is older than a
+ * setattr which modifies the timestamps. b=10150 */
+ if (la->la_valid && tgt_fmd_check(exp, fid, info->fti_xid)) {
rc = dt_attr_set(env, o, la, th);
if (rc)
GOTO(out_unlock, rc);
if (cmd == OBD_BRW_WRITE) {
struct lu_nodemap *nodemap;
- /* Don't update timestamps if this write is older than a
- * setattr which modifies the timestamps. b=10150 */
- valid = OBD_MD_FLUID | OBD_MD_FLGID | OBD_MD_FLPROJID;
- if (tgt_fmd_check(exp, fid, info->fti_xid))
- valid |= OBD_MD_FLATIME | OBD_MD_FLMTIME |
- OBD_MD_FLCTIME;
-
+ valid = OBD_MD_FLUID | OBD_MD_FLGID | OBD_MD_FLPROJID |
+ OBD_MD_FLATIME | OBD_MD_FLMTIME | OBD_MD_FLCTIME;
la_from_obdo(&info->fti_attr, oa, valid);
rc = ofd_commitrw_write(env, exp, ofd, fid, &info->fti_attr,
if (!ofd_object_exists(fo))
GOTO(out, rc = -ENOENT);
- if (la->la_valid & (LA_ATIME | LA_MTIME | LA_CTIME))
- tgt_fmd_update(info->fti_exp, &fo->ofo_header.loh_fid,
- info->fti_xid);
-
/* VBR: version recovery check */
rc = ofd_version_get_check(info, fo);
if (rc)
if (!ofd_object_exists(fo))
GOTO(unlock, rc = -ENOENT);
+ /* serialize vs ofd_commitrw_write() */
+ if (la->la_valid & (LA_ATIME | LA_MTIME | LA_CTIME))
+ tgt_fmd_update(info->fti_exp, &fo->ofo_header.loh_fid,
+ info->fti_xid);
+
rc = dt_attr_set(env, ofd_object_child(fo), la, th);
if (rc)
GOTO(unlock, rc);
error "mtime is lost on close: $mtime2, " \
"should be $mtime1"
- cancel_lru_locks $OSC
+ cancel_lru_locks
if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
done
lctl set_param fail_loc=0
[ "$mtime2" = $TEST_39_MTIME ] || \
error "mtime is lost on close: $mtime2, should be $TEST_39_MTIME"
- cancel_lru_locks osc
+ cancel_lru_locks
if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
done
}