tmpfs - Correct some timestamp update issues
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 8 Dec 2017 02:20:49 +0000 (18:20 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 8 Dec 2017 02:20:49 +0000 (18:20 -0800)
* write() was updating ACCESSED and MODIFIED when it should only
  be updating MODIFIED.

* unlink() (aka rm) was updating CHANGE, ACCESSED, and MODIFIED
  which would be visible if a file has multiple links.  It should
  only update the CHANGE time.

* rmdir() was doing the same thing as UNLINKED.  Fixed this too,
  but the bug would not be readily visible anyway since directories
  cannot be hardlinked.  However, fstat() on an open descriptor
  would still reveal it.

sys/vfs/tmpfs/tmpfs_vnops.c

index 34c7f51..5c5580c 100644 (file)
@@ -743,7 +743,7 @@ tmpfs_write(struct vop_write_args *ap)
         * flushing it.
         */
        if (vp->v_writecount) {
-               node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_MODIFIED;
+               node->tn_status |= TMPFS_NODE_MODIFIED;
        } else {
                node->tn_mtime = vp->v_lastwrite_ts.tv_sec;
                node->tn_mtimensec = vp->v_lastwrite_ts.tv_nsec;
@@ -939,8 +939,7 @@ tmpfs_nremove(struct vop_nremove_args *ap)
 
        if (node->tn_links > 0) {
                TMPFS_NODE_LOCK(node);
-               node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_CHANGED | \
-                       TMPFS_NODE_MODIFIED;
+               node->tn_status |= TMPFS_NODE_CHANGED;
                TMPFS_NODE_UNLOCK(node);
        }
 
@@ -1364,8 +1363,7 @@ tmpfs_nrmdir(struct vop_nrmdir_args *ap)
         * Must set parent linkage to NULL (tested by ncreate to disallow
         * the creation of new files/dirs in a deleted directory)
         */
-       node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_CHANGED |
-                          TMPFS_NODE_MODIFIED;
+       node->tn_status |= TMPFS_NODE_CHANGED;
 
        dnode->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_CHANGED |
                            TMPFS_NODE_MODIFIED;