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 | |
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')
-rw-r--r-- | sys/fs/devfs/devfs_devs.c | 2 | ||||
-rw-r--r-- | sys/fs/devfs/devfs_vnops.c | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/sys/fs/devfs/devfs_devs.c b/sys/fs/devfs/devfs_devs.c index 30558ec..c7814a2 100644 --- a/sys/fs/devfs/devfs_devs.c +++ b/sys/fs/devfs/devfs_devs.c @@ -202,7 +202,7 @@ devfs_newdirent(char *name, int namelen) de->de_dirent->d_reclen = GENERIC_DIRSIZ(&d); bcopy(name, de->de_dirent->d_name, namelen); de->de_dirent->d_name[namelen] = '\0'; - nanotime(&de->de_ctime); + getnanotime(&de->de_ctime); de->de_mtime = de->de_atime = de->de_ctime; de->de_links = 1; return (de); 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; } |