else if (open_flags & MDS_FMODE_EXEC)
mdt_write_allow(o);
- /* Update atime on close only. */
+ /* Update atime|mtime|ctime on close. */
if ((open_flags & MDS_FMODE_EXEC || open_flags & MDS_FMODE_READ ||
open_flags & MDS_FMODE_WRITE) && (ma->ma_valid & MA_INODE) &&
- (ma->ma_attr.la_valid & LA_ATIME)) {
- /* Set the atime only. */
- ma->ma_valid = MA_INODE;
- ma->ma_attr.la_valid = LA_ATIME;
- rc = mo_attr_set(info->mti_env, next, ma);
- }
+ (ma->ma_attr.la_valid & LA_ATIME ||
+ ma->ma_attr.la_valid & LA_MTIME ||
+ ma->ma_attr.la_valid & LA_CTIME)) {
+ ma->ma_valid = MA_INODE;
+ ma->ma_attr_flags |= MDS_CLOSE_UPDATE_TIMES;
+ ma->ma_attr.la_valid &= (LA_ATIME | LA_MTIME | LA_CTIME);
+ rc = mo_attr_set(info->mti_env, next, ma);
+ }
/* If file data is modified, add the dirty flag. */
if (ma->ma_attr_flags & MDS_DATA_MODIFIED)