Module Name: src Committed By: bouyer Date: Sat Aug 27 13:13:31 UTC 2016
Modified Files: src/sys/miscfs/kernfs [netbsd-6]: kernfs_vnops.c Log Message: Pull up following revision(s) (requested by is in ticket #1367): sys/miscfs/kernfs/kernfs_vnops.c: revision 1.151 >From Ilya Zykov: Unbreak kernfs which was broken by this commit |Make the spec_node table implementation private to spec_vnops.c. |To retrieve a spec_node, two new lookup functions (by device or by mount) |are implemented. Both return a referenced vnode, for an opened block device |the opened vnode is returned so further diagnostic checks "vp == ... sd_bdevvp" |will not fire. Otherwise any vnode matching the criteria gets returned. |No objections on tech-kern. The effect was that ls /kernfs appeared empty in most cases. To generate a diff of this commit: cvs rdiff -u -r1.144 -r1.144.2.1 src/sys/miscfs/kernfs/kernfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/miscfs/kernfs/kernfs_vnops.c diff -u src/sys/miscfs/kernfs/kernfs_vnops.c:1.144 src/sys/miscfs/kernfs/kernfs_vnops.c:1.144.2.1 --- src/sys/miscfs/kernfs/kernfs_vnops.c:1.144 Mon Dec 12 19:11:22 2011 +++ src/sys/miscfs/kernfs/kernfs_vnops.c Sat Aug 27 13:13:31 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: kernfs_vnops.c,v 1.144 2011/12/12 19:11:22 njoly Exp $ */ +/* $NetBSD: kernfs_vnops.c,v 1.144.2.1 2016/08/27 13:13:31 bouyer Exp $ */ /* * Copyright (c) 1992, 1993 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.144 2011/12/12 19:11:22 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.144.2.1 2016/08/27 13:13:31 bouyer Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -63,6 +63,7 @@ __KERNEL_RCSID(0, "$NetBSD: kernfs_vnops #include <miscfs/genfs/genfs.h> #include <miscfs/kernfs/kernfs.h> +#include <miscfs/specfs/specdev.h> #ifdef IPSEC #include <sys/mbuf.h> @@ -859,6 +860,11 @@ kernfs_getattr(void *v) vap->va_bytes = vap->va_size = DEV_BSIZE; break; + case KFSdevice: + vap->va_nlink = 1; + vap->va_rdev = ap->a_vp->v_rdev; + break; + case KFSroot: vap->va_nlink = 1; vap->va_bytes = vap->va_size = DEV_BSIZE; @@ -876,7 +882,6 @@ kernfs_getattr(void *v) case KFSstring: case KFShostname: case KFSavenrun: - case KFSdevice: case KFSmsgbuf: #ifdef IPSEC case KFSipsecsa: @@ -1050,18 +1055,8 @@ kernfs_setdirentfileno_kt(struct dirent if ((error = kernfs_allocvp(ap->a_vp->v_mount, &vp, kt->kt_tag, kt, value)) != 0) return error; - if (kt->kt_tag == KFSdevice) { - struct vattr va; - - error = VOP_GETATTR(vp, &va, ap->a_cred); - if (error != 0) { - return error; - } - d->d_fileno = va.va_fileid; - } else { - kfs = VTOKERN(vp); - d->d_fileno = kfs->kfs_fileno; - } + kfs = VTOKERN(vp); + d->d_fileno = kfs->kfs_fileno; vput(vp); return 0; }