Module Name:src
Committed By: martin
Date: Thu Aug 29 16:14:37 UTC 2019
Modified Files:
src/sys/miscfs/kernfs [netbsd-7-1]: kernfs_vnops.c
src/sys/miscfs/procfs [netbsd-7-1]: procfs_vnops.c
Log Message:
Pull up following revision(s) (requested by hannken in ticket #1703):
sys/miscfs/kernfs/kernfs_vnops.c: revision 1.161
sys/miscfs/procfs/procfs_vnops.c: revision 1.207
Add missing operation VOP_GETPAGES() returning EFAULT.
Without this operation posix_fadvise(..., POSIX_FADV_WILLNEED)
would leave the v_interlock held.
Observed by maxv@
To generate a diff of this commit:
cvs rdiff -u -r1.154 -r1.154.10.1 src/sys/miscfs/kernfs/kernfs_vnops.c
cvs rdiff -u -r1.191 -r1.191.8.1 src/sys/miscfs/procfs/procfs_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.154 src/sys/miscfs/kernfs/kernfs_vnops.c:1.154.10.1
--- src/sys/miscfs/kernfs/kernfs_vnops.c:1.154 Fri Jul 25 08:20:52 2014
+++ src/sys/miscfs/kernfs/kernfs_vnops.c Thu Aug 29 16:14:37 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: kernfs_vnops.c,v 1.154 2014/07/25 08:20:52 dholland Exp $ */
+/* $NetBSD: kernfs_vnops.c,v 1.154.10.1 2019/08/29 16:14:37 martin Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -39,7 +39,7 @@
*/
#include
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.154 2014/07/25 08:20:52 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.154.10.1 2019/08/29 16:14:37 martin Exp $");
#include
#include
@@ -172,6 +172,7 @@ int kernfs_print(void *);
int kernfs_pathconf(void *);
#define kernfs_advlock genfs_einval
#define kernfs_bwrite genfs_eopnotsupp
+int kernfs_getpages(void *);
#define kernfs_putpages genfs_putpages
static int kernfs_xread(struct kernfs_node *, int, char **,
@@ -219,6 +220,7 @@ const struct vnodeopv_entry_desc kernfs_
{ &vop_pathconf_desc, kernfs_pathconf }, /* pathconf */
{ &vop_advlock_desc, kernfs_advlock }, /* advlock */
{ &vop_bwrite_desc, kernfs_bwrite }, /* bwrite */
+ { &vop_getpages_desc, kernfs_getpages }, /* getpages */
{ &vop_putpages_desc, kernfs_putpages }, /* putpages */
{ NULL, NULL }
};
@@ -1171,3 +1173,23 @@ kernfs_symlink(void *v)
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
+
+int
+kernfs_getpages(void *v)
+{
+ struct vop_getpages_args /* {
+ struct vnode *a_vp;
+ voff_t a_offset;
+ struct vm_page **a_m;
+ int *a_count;
+ int a_centeridx;
+ vm_prot_t a_access_type;
+ int a_advice;
+ int a_flags;
+ } */ *ap = v;
+
+ if ((ap->a_flags & PGO_LOCKED) == 0)
+ mutex_exit(ap->a_vp->v_interlock);
+
+ return (EFAULT);
+}
Index: src/sys/miscfs/procfs/procfs_vnops.c
diff -u src/sys/miscfs/procfs/procfs_vnops.c:1.191 src/sys/miscfs/procfs/procfs_vnops.c:1.191.8.1
--- src/sys/miscfs/procfs/procfs_vnops.c:1.191 Sun Jul 27 16:47:26 2014
+++ src/sys/miscfs/procfs/procfs_vnops.c Thu Aug 29 16:14:37 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: procfs_vnops.c,v 1.191 2014/07/27 16:47:26 hannken Exp $ */
+/* $NetBSD: procfs_vnops.c,v 1.191.8.1 2019/08/29 16:14:37 martin Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -105,7 +105,7 @@
*/
#include
-__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.191 2014/07/27 16:47:26 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.191.8.1 2019/08/29 16:14:37 martin Exp $");
#include
#include
@@ -239,6 +239,7 @@ int procfs_pathconf(void *);
#define procfs_islocked genfs_islocked
#define procfs_advlock genfs_einval
#define procfs_bwrite genfs_eopnotsupp
+int procfs_getpages(void *);
#define procfs_putpages genfs_null_putpages
static int atoi(const char *, size_t);
@@ -286,6 +287,7 @@ const struct vnodeopv_entry_desc procfs_
{ &vop_islocked_desc, procfs_islocked }, /* islocked */
{ &vop_pathconf_desc, procfs_pathconf }, /* pathconf */
{ &vop_advlock_desc, procfs_advlock }, /* advlock */
+ { &vop_getpages_desc, procfs_getpages }, /* getpages */
{ &vop_putpages_desc, procfs_putpages }, /* putpages */
{ NULL, NULL }
};
@@ -1709,6 +1711,26 @@ procfs_readlink(void *v)
return error;
}
+int
+procfs_getpages(void *v)
+{
+ struct vop_getpages_args /* {
+ struct vnode *a_vp;
+ voff_t a_offset;
+ struct vm_page **a_m;
+ int *a_count;
+ int a_centeridx;
+ vm_prot_t a_access_type;
+ int a_advice;
+ int a_flags;
+ } */ *ap = v;
+
+ if ((ap->a_flags & PGO_LOCKED) == 0)
+ mutex_exit(ap->a_vp->v_interlock);
+
+ return (EFAULT);
+}
+
/*
* convert decimal ascii to int
*/