Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/pgoyette-compat]: src/sys Convert the openat_10 hook to use the MP-safe ...
details: https://anonhg.NetBSD.org/src/rev/35401ac2a557
branches: pgoyette-compat
changeset: 830868:35401ac2a557
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Mon Oct 15 10:44:27 2018 +0000
description:
Convert the openat_10 hook to use the MP-safe mechanism
XXX Still to do: compat70_unp_addsockcred and sysvipc50_sysctl
diffstat:
sys/compat/common/vfs_syscalls_10.c | 15 ++++++++-------
sys/kern/compat_stub.c | 7 ++++++-
sys/kern/vfs_syscalls.c | 16 ++++++++--------
sys/sys/compat_stub.h | 8 +++++++-
sys/sys/vfs_syscalls.h | 4 +---
5 files changed, 30 insertions(+), 20 deletions(-)
diffs (164 lines):
diff -r 0d0697d5457b -r 35401ac2a557 sys/compat/common/vfs_syscalls_10.c
--- a/sys/compat/common/vfs_syscalls_10.c Mon Oct 15 09:51:33 2018 +0000
+++ b/sys/compat/common/vfs_syscalls_10.c Mon Oct 15 10:44:27 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_10.c,v 1.1.2.3 2018/09/22 04:56:28 pgoyette Exp $ */
+/* $NetBSD: vfs_syscalls_10.c,v 1.1.2.4 2018/10/15 10:44:27 pgoyette Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_10.c,v 1.1.2.3 2018/09/22 04:56:28 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_10.c,v 1.1.2.4 2018/10/15 10:44:27 pgoyette Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -40,11 +40,10 @@
#include <sys/systm.h>
#include <sys/namei.h>
#include <sys/vfs_syscalls.h>
+#include <sys/compat_stub.h>
#include <compat/common/compat_mod.h>
-static int (*orig_sys_openat_10)(struct pathbuf **);
-
static int
real_sys_openat_10(struct pathbuf **pb)
{
@@ -53,15 +52,17 @@
return (*pb == NULL ? ENOMEM : 0);
}
+MODULE_SET_HOOK(compat_10_openat_hook, "openat_10", real_sys_openat_10);
+MODULE_UNSET_HOOK(compat_10_openat_hook);
+
void vfs_syscalls_10_init(void)
{
- orig_sys_openat_10 = vec_sys_openat_10;
- vec_sys_openat_10 = real_sys_openat_10;
+ compat_10_openat_hook_set();
}
void vfs_syscalls_10_fini(void)
{
- vec_sys_openat_10 = orig_sys_openat_10;
+ compat_10_openat_hook_unset();
}
diff -r 0d0697d5457b -r 35401ac2a557 sys/kern/compat_stub.c
--- a/sys/kern/compat_stub.c Mon Oct 15 09:51:33 2018 +0000
+++ b/sys/kern/compat_stub.c Mon Oct 15 10:44:27 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.1.2.29 2018/10/15 09:51:33 pgoyette Exp $ */
+/* $NetBSD: compat_stub.c,v 1.1.2.30 2018/10/15 10:44:27 pgoyette Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -193,3 +193,8 @@
*/
struct compat_60_ioctl_hook_t compat_60_ioctl_hook;
+/*
+ * Hook for compat_10 openat
+ */
+struct compat_10_openat_hook_t compat_10_openat_hook;
+
diff -r 0d0697d5457b -r 35401ac2a557 sys/kern/vfs_syscalls.c
--- a/sys/kern/vfs_syscalls.c Mon Oct 15 09:51:33 2018 +0000
+++ b/sys/kern/vfs_syscalls.c Mon Oct 15 10:44:27 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls.c,v 1.518.2.1 2018/03/14 02:24:56 pgoyette Exp $ */
+/* $NetBSD: vfs_syscalls.c,v 1.518.2.2 2018/10/15 10:44:27 pgoyette Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.518.2.1 2018/03/14 02:24:56 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.518.2.2 2018/10/15 10:44:27 pgoyette Exp $");
#ifdef _KERNEL_OPT
#include "opt_fileassoc.h"
@@ -108,6 +108,7 @@
#include <sys/module.h>
#include <sys/buf.h>
#include <sys/event.h>
+#include <sys/compat_stub.h>
#include <miscfs/genfs/genfs.h>
#include <miscfs/specfs/specdev.h>
@@ -141,11 +142,6 @@
static int fd_nameiat_simple_user(struct lwp *, int, const char *,
namei_simple_flags_t, struct vnode **);
-/* Routine for COMPAT_10 handling of NULL pathbuf passed to do_sys_openat */
-
-static int stub_sys_openat_10(struct pathbuf **);
-int (*vec_sys_openat_10)(struct pathbuf **) = stub_sys_openat_10;
-
/*
* This table is used to maintain compatibility with 4.3BSD
* and NetBSD 0.9 mount syscalls - and possibly other systems.
@@ -1639,6 +1635,10 @@
return 0;
}
+MODULE_CALL_HOOK_DECL(compat_10_openat_hook, f, (struct pathbuf **));
+MODULE_CALL_HOOK(compat_10_openat_hook, f, (struct pathbuf **pb), (pb),
+ stub_sys_openat_10(pb));
+
static int
do_sys_openat(lwp_t *l, int fdat, const char *path, int flags,
int mode, int *fd)
@@ -1649,7 +1649,7 @@
int error;
if (path == NULL) {
- error = (*vec_sys_openat_10)(&pb);
+ error = compat_10_openat_hook_f_call(&pb);
if (error)
return error;
} else {
diff -r 0d0697d5457b -r 35401ac2a557 sys/sys/compat_stub.h
--- a/sys/sys/compat_stub.h Mon Oct 15 09:51:33 2018 +0000
+++ b/sys/sys/compat_stub.h Mon Oct 15 10:44:27 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.h,v 1.1.2.41 2018/10/15 09:51:34 pgoyette Exp $ */
+/* $NetBSD: compat_stub.h,v 1.1.2.42 2018/10/15 10:44:28 pgoyette Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -245,4 +245,10 @@
MODULE_HOOK2(compat_60_ioctl_hook, (dev_t, u_long, void *, int, struct lwp *),
(dev_t, u_long, void *, int, struct lwp *));
+/*
+ * Hook for compat_10 openat
+ */
+struct pathbuf;
+MODULE_HOOK(compat_10_openat_hook, (struct pathbuf **));
+
#endif /* _SYS_COMPAT_STUB_H */
diff -r 0d0697d5457b -r 35401ac2a557 sys/sys/vfs_syscalls.h
--- a/sys/sys/vfs_syscalls.h Mon Oct 15 09:51:33 2018 +0000
+++ b/sys/sys/vfs_syscalls.h Mon Oct 15 10:44:27 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls.h,v 1.23.2.2 2018/04/17 00:02:58 pgoyette Exp $ */
+/* $NetBSD: vfs_syscalls.h,v 1.23.2.3 2018/10/15 10:44:28 pgoyette Exp $ */
/*
* Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -86,6 +86,4 @@
extern const char *const mountcompatnames[];
extern const int nmountcompatnames;
-extern int (*vec_sys_openat_10)(struct pathbuf **);
-
#endif /* _SYS_VFS_SYSCALLS_H_ */
Home |
Main Index |
Thread Index |
Old Index