summaryrefslogtreecommitdiffstats
path: root/sys/fs/devfs/devfs_vnops.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2001-02-02 22:54:41 +0000
committerphk <phk@FreeBSD.org>2001-02-02 22:54:41 +0000
commit99d7a44ee708f2b68daee896b373bbe48bee3be2 (patch)
tree839ebcdae96778168f02769a8f496685c8a8eaa5 /sys/fs/devfs/devfs_vnops.c
parentd910e1e092d50ac6ba390e09d8dc116d633410d6 (diff)
downloadFreeBSD-src-99d7a44ee708f2b68daee896b373bbe48bee3be2.zip
FreeBSD-src-99d7a44ee708f2b68daee896b373bbe48bee3be2.tar.gz
At the point in time where most devices are created, we don't know what
time it is because boottime is not yet initialized. Finagle the relevant fields when we get the chance.
Diffstat (limited to 'sys/fs/devfs/devfs_vnops.c')
-rw-r--r--sys/fs/devfs/devfs_vnops.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index 1f41b51..e33ad8d 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -159,14 +159,29 @@ devfs_getattr(ap)
vap->va_size = 0;
vap->va_blocksize = DEV_BSIZE;
vap->va_type = vp->v_type;
+
+#define fix(aa) \
+ do { \
+ if ((aa).tv_sec == 0) { \
+ (aa).tv_sec = boottime.tv_sec; \
+ (aa).tv_nsec = boottime.tv_usec * 1000; \
+ } \
+ } while (0)
+
if (vp->v_type != VCHR) {
+ fix(de->de_atime);
vap->va_atime = de->de_atime;
+ fix(de->de_mtime);
vap->va_mtime = de->de_mtime;
+ fix(de->de_ctime);
vap->va_ctime = de->de_ctime;
} else {
dev = vp->v_rdev;
+ fix(dev->si_atime);
vap->va_atime = dev->si_atime;
+ fix(dev->si_mtime);
vap->va_mtime = dev->si_mtime;
+ fix(dev->si_ctime);
vap->va_ctime = dev->si_ctime;
vap->va_rdev = dev->si_udev;
}
OpenPOWER on IntegriCloud