diff options
author | phk <phk@FreeBSD.org> | 2001-02-02 22:54:41 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2001-02-02 22:54:41 +0000 |
commit | 99d7a44ee708f2b68daee896b373bbe48bee3be2 (patch) | |
tree | 839ebcdae96778168f02769a8f496685c8a8eaa5 /sys/fs/devfs/devfs_vnops.c | |
parent | d910e1e092d50ac6ba390e09d8dc116d633410d6 (diff) | |
download | FreeBSD-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.c | 15 |
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; } |