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.
This commit is contained in:
Poul-Henning Kamp 2001-02-02 22:54:41 +00:00
parent a28f659d51
commit 4b1c62b3f2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=71945
2 changed files with 16 additions and 1 deletions

View File

@ -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);

View File

@ -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;
}