Okay, tmpfs8.diff is still deeply bogus wrt timestamps.

I've fixed some obvious problems with the following change

Tracking tn_status and tmpfs_update showed 3 cases where the mtime got
changed only during  the subsequent getattr, thus much too late for make.

Is the separation of the code just an optimization, or something more ?



diff -urp tmpfs0/tmpfs_specops.c tmpfs/tmpfs_specops.c
--- tmpfs0/tmpfs_specops.c      Tue May 14 11:51:12 2013
+++ tmpfs/tmpfs_specops.c       Tue May 14 12:21:52 2013
@@ -502,6 +512,7 @@ tmpfs_dir_attach(struct vnode *dvp, tmpfs_dirent_t *de
        TAILQ_INSERT_TAIL(&dnode->tn_spec.tn_dir.tn_dir, de, td_entries);
        dnode->tn_size += sizeof(tmpfs_dirent_t);
        dnode->tn_status |= TMPFS_NODE_STATUSALL;
+       tmpfs_update(dvp, NULL, NULL, 0);
        uvm_vnp_setsize(dvp, dnode->tn_size);
 
        if (node != TMPFS_NODE_WHITEOUT && node->tn_type == VDIR) {
@@ -572,6 +584,7 @@ tmpfs_dir_detach(struct vnode *dvp, tmpfs_dirent_t *de
 
        dnode->tn_size -= sizeof(tmpfs_dirent_t);
        dnode->tn_status |= TMPFS_NODE_STATUSALL;
+       tmpfs_update(dvp, NULL, NULL, 0);
        uvm_vnp_setsize(dvp, dnode->tn_size);
        VN_KNOTE(dvp, events);
 }
diff -urp tmpfs0/tmpfs_vnops.c tmpfs/tmpfs_vnops.c
--- tmpfs0/tmpfs_vnops.c        Tue May 14 11:51:12 2013
+++ tmpfs/tmpfs_vnops.c Tue May 14 12:47:44 2013
@@ -1774,6 +1782,7 @@ tmpfs_sane_rename(struct vnode *fdvp, struct component
 
                fde->td_node->tn_status |= TMPFS_NODE_CHANGED;
                tdnode->tn_status |= TMPFS_NODE_MODIFIED;
+               tmpfs_update(tdvp, NULL, NULL, 0);
        }
 
 success:

Reply via email to