Submit #2122 » 0032-Run-VFS_START-for-the-root-mount-point.patch
| sys/kern/vfs_conf.c | ||
|---|---|---|
|
char patt[32];
|
||
|
const char *cp, *ep;
|
||
|
char *mf;
|
||
|
struct proc *p;
|
||
|
struct vnode *vp;
|
||
|
vfsname = NULL;
|
||
|
devname = NULL;
|
||
| ... | ... | |
|
/* sanity check system clock against root fs timestamp */
|
||
|
inittodr(mp->mnt_time);
|
||
|
/* Get the vnode for '/'. Set p->p_fd->fd_cdir to reference it. */
|
||
|
mp = mountlist_boot_getfirst();
|
||
|
if (VFS_ROOT(mp, &vp))
|
||
|
panic("cannot find root vnode");
|
||
|
if (mp->mnt_ncmountpt.ncp == NULL) {
|
||
|
cache_allocroot(&mp->mnt_ncmountpt, mp, vp);
|
||
|
cache_unlock(&mp->mnt_ncmountpt); /* leave ref intact */
|
||
|
}
|
||
|
p = curproc;
|
||
|
p->p_fd->fd_cdir = vp;
|
||
|
vref(p->p_fd->fd_cdir);
|
||
|
p->p_fd->fd_rdir = vp;
|
||
|
vref(p->p_fd->fd_rdir);
|
||
|
vfs_cache_setroot(vp, cache_hold(&mp->mnt_ncmountpt));
|
||
|
vn_unlock(vp); /* leave ref intact */
|
||
|
cache_copy(&mp->mnt_ncmountpt, &p->p_fd->fd_ncdir);
|
||
|
cache_copy(&mp->mnt_ncmountpt, &p->p_fd->fd_nrdir);
|
||
|
vfs_unbusy(mp);
|
||
|
if (mp->mnt_syncer == NULL) {
|
||
|
error = vfs_allocate_syncvnode(mp);
|
||
| ... | ... | |
|
kprintf("Warning: no syncer vp for root!\n");
|
||
|
error = 0;
|
||
|
}
|
||
|
VFS_START( mp, 0 );
|
||
|
} else {
|
||
|
if (mp != NULL) {
|
||
|
vfs_unbusy(mp);
|
||