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

Reply via email to