__u64 lov_merge_blocks(struct lov_stripe_md *lsm);
__u64 lov_merge_mtime(struct lov_stripe_md *lsm, __u64 current_time);
-int ll_validate_size(struct inode *inode, __u64 *size, __u64 *blocks)
+int ll_validate_size(struct inode *inode, __u64 *size, __u64 *blocks,
+ __u64 *mtime)
{
ldlm_policy_data_t extent = { .l_extent = { 0, OBD_OBJECT_EOF } };
struct obd_export *exp = ll_i2sbi(inode)->ll_dt_exp;
down(&lli->lli_size_sem);
*size = lov_merge_size(lli->lli_smd, 0);
*blocks = lov_merge_blocks(lli->lli_smd);
+ *mtime = lov_merge_mtime(lli->lli_smd, LTIME_S(inode->i_mtime));
+
up(&lli->lli_size_sem);
finish:
op_data->io_epoch = epoch;
op_data->flags |= MDS_BFLAG_DIRTY_EPOCH;
op_data->valid |= OBD_MD_FLFLAGS | OBD_MD_FLEPOCH;
- if (ll_validate_size(inode, &op_data->size, &op_data->blocks))
- op_data->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS;
+ if (ll_validate_size(inode, &op_data->size, &op_data->blocks,
+ &op_data->mtime))
+ op_data->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS | OBD_MD_FLMTIME;
}
rc = md_close(md_exp, op_data, och, &req);
down(&lli->lli_size_sem);
inode->i_size = lov_merge_size(lli->lli_smd, 0);
inode->i_blocks = lov_merge_blocks(lli->lli_smd);
- up(&lli->lli_size_sem);
-
LTIME_S(inode->i_mtime) = lov_merge_mtime(lli->lli_smd,
LTIME_S(inode->i_mtime));
+ up(&lli->lli_size_sem);
CDEBUG(D_DLMTRACE, "glimpse: size: "LPU64", blocks: "LPU64"\n",
(__u64)inode->i_size, (__u64)inode->i_blocks);
!(body->valid & OBD_MD_FLDIREA))
body->valid |= (OBD_MD_FLSIZE | OBD_MD_FLBLOCKS |
OBD_MD_FLATIME | OBD_MD_FLMTIME);
+
} else if (S_ISLNK(inode->i_mode) &&
(reqbody->valid & OBD_MD_LINKNAME) != 0) {
rc = mds_pack_link(dentry, req, body, reply_off);
/* XXX: quite a ugly hack, need to check old code
* drop FLSIZE/FLBLOCKS prior any checking to */
- body->valid &= ~(OBD_MD_FLSIZE | OBD_MD_FLBLOCKS);
+ body->valid &= ~(OBD_MD_FLSIZE | OBD_MD_FLBLOCKS|OBD_MD_FLMTIME);
if (obd->obd_recovering) {
CDEBUG(D_INODE, "size for "DLID4" is unknown yet (recovering)\n",
}
CDEBUG(D_INODE, "MDS returns "LPD64"/"LPD64" for"DLID4"\n",
body->size, body->blocks, OLID4(&body->id1));
- body->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS;
+ body->valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS | OBD_MD_FLMTIME;
RETURN(0);
}
lustre_swab_audit_attr);
msg = *p;
- CDEBUG(D_INFO, "Get new audit setting 0x%x\n", (__u32)msg.attr);
+ //CDEBUG(D_INFO, "Get new audit setting 0x%x\n", (__u32)msg.attr);
rc = obd_set_info(exp, keylen, key, sizeof(msg), &msg);
req->rq_repmsg->status = rc;
request_body->io_epoch);
i_size_write(inode, request_body->size);
inode->i_blocks = request_body->blocks;
+ LTIME_S(inode->i_mtime) = (request_body->mtime);
+
+ LTIME_S(iattr.ia_mtime) = request_body->mtime;
iattr.ia_size = inode->i_size;
- iattr.ia_valid |= ATTR_SIZE;
+ iattr.ia_valid |= ATTR_SIZE|ATTR_MTIME;
mds_inode_unset_attrs_old(inode);
}
}
__u64 lov_merge_size(struct lov_stripe_md *lsm, int kms);
__u64 lov_merge_blocks(struct lov_stripe_md *lsm);
+__u64 lov_merge_mtime(struct lov_stripe_md *lsm, __u64 current_time);
int mds_validate_size(struct obd_device *obd, struct inode *inode,
struct mds_body *body, struct iattr *iattr)
i_size_write(inode, lov_merge_size(lsm, 0));
inode->i_blocks = lov_merge_blocks(lsm);
+ LTIME_S(inode->i_mtime) = lov_merge_mtime(lsm, LTIME_S(inode->i_mtime));
iattr->ia_size = inode->i_size;
- iattr->ia_valid |= ATTR_SIZE;
+ LTIME_S(iattr->ia_mtime) = LTIME_S(inode->i_mtime);
+ iattr->ia_valid |= ATTR_SIZE | ATTR_MTIME;
+
DOWN_WRITE_I_ALLOC_SEM(inode);
mds_inode_unset_attrs_old(inode);
UP_WRITE_I_ALLOC_SEM(inode);