Whamcloud - gitweb
LU-12026 mdt: MDS stores atime|mtime|ctime during close
[fs/lustre-release.git] / lustre / mdt / mdt_open.c
index c7cfc1a..b89abc9 100644 (file)
@@ -2389,15 +2389,17 @@ int mdt_mfd_close(struct mdt_thread_info *info, struct mdt_file_data *mfd)
        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)