Module Name: src
Committed By: pgoyette
Date: Tue Jan 21 02:37:17 UTC 2020
Modified Files:
src/distrib/sets/lists/modules: mi
src/sys/compat/common: files.common vfs_syscalls_50.c
src/sys/kern: syscalls.master
src/sys/modules: Makefile
src/sys/modules/compat_50: Makefile
src/sys/sys: param.h
Added Files:
src/sys/compat/common: compat_50_quota.c
src/sys/modules/compat_50_quota: Makefile
Log Message:
Split the compat_50 module into two, separating the QUOTA-related
stuff from the rest of the module. This allows loading of the
(main) compat_50 module on kernels that don't include ``options
QUOTA''.
Welcome to 9.99.40 !
Addresses PR kern/54875
To generate a diff of this commit:
cvs rdiff -u -r1.130 -r1.131 src/distrib/sets/lists/modules/mi
cvs rdiff -u -r0 -r1.1 src/sys/compat/common/compat_50_quota.c
cvs rdiff -u -r1.5 -r1.6 src/sys/compat/common/files.common
cvs rdiff -u -r1.24 -r1.25 src/sys/compat/common/vfs_syscalls_50.c
cvs rdiff -u -r1.296 -r1.297 src/sys/kern/syscalls.master
cvs rdiff -u -r1.236 -r1.237 src/sys/modules/Makefile
cvs rdiff -u -r1.6 -r1.7 src/sys/modules/compat_50/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/modules/compat_50_quota/Makefile
cvs rdiff -u -r1.642 -r1.643 src/sys/sys/param.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/modules/mi
diff -u src/distrib/sets/lists/modules/mi:1.130 src/distrib/sets/lists/modules/mi:1.131
--- src/distrib/sets/lists/modules/mi:1.130 Sun Jan 19 01:25:03 2020
+++ src/distrib/sets/lists/modules/mi Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.130 2020/01/19 01:25:03 thorpej Exp $
+# $NetBSD: mi,v 1.131 2020/01/21 02:37:16 pgoyette Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -94,6 +94,8 @@
./@MODULEDIR@/compat_43/compat_43.kmod base-kernel-modules kmod
./@MODULEDIR@/compat_50 base-kernel-modules kmod
./@MODULEDIR@/compat_50/compat_50.kmod base-kernel-modules kmod
+./@MODULEDIR@/compat_50_quota base-kernel-modules kmod
+./@MODULEDIR@/compat_50_quota/compat_50_quota.kmod base-kernel-modules kmod
./@MODULEDIR@/compat_60 base-kernel-modules kmod
./@MODULEDIR@/compat_60/compat_60.kmod base-kernel-modules kmod
./@MODULEDIR@/compat_70 base-kernel-modules kmod
Index: src/sys/compat/common/files.common
diff -u src/sys/compat/common/files.common:1.5 src/sys/compat/common/files.common:1.6
--- src/sys/compat/common/files.common:1.5 Sun Sep 22 22:59:38 2019
+++ src/sys/compat/common/files.common Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
-# $NetBSD: files.common,v 1.5 2019/09/22 22:59:38 christos Exp $
+# $NetBSD: files.common,v 1.6 2020/01/21 02:37:16 pgoyette Exp $
#
# Generic utility files, used by various compat options.
@@ -80,6 +80,7 @@ file compat/common/kern_select_50.c com
file compat/common/rndpseudo_50.c compat_50
file compat/common/rtsock_50.c compat_50
file compat/common/vfs_syscalls_50.c compat_50
+file compat/common/compat_50_quota.c compat_50 & quota
file compat/common/uipc_syscalls_50.c compat_50
file compat/common/vnd_50.c compat_50
file compat/common/clockctl_50.c compat_50
Index: src/sys/compat/common/vfs_syscalls_50.c
diff -u src/sys/compat/common/vfs_syscalls_50.c:1.24 src/sys/compat/common/vfs_syscalls_50.c:1.25
--- src/sys/compat/common/vfs_syscalls_50.c:1.24 Sun Dec 15 16:48:26 2019
+++ src/sys/compat/common/vfs_syscalls_50.c Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_50.c,v 1.24 2019/12/15 16:48:26 tsutsui Exp $ */
+/* $NetBSD: vfs_syscalls_50.c,v 1.25 2020/01/21 02:37:16 pgoyette Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_50.c,v 1.24 2019/12/15 16:48:26 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_50.c,v 1.25 2020/01/21 02:37:16 pgoyette Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -62,12 +62,6 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls
#include <ufs/lfs/lfs_extern.h>
-#ifdef QUOTA
-#include <sys/quota.h>
-#include <sys/quotactl.h>
-#include <ufs/ufs/quota1.h>
-#endif
-
#include <compat/common/compat_util.h>
#include <compat/common/compat_mod.h>
#include <compat/sys/time.h>
@@ -88,9 +82,6 @@ static const struct syscall_package vfs_
{ SYS_compat_50_futimes, 0, (sy_call_t *)compat_50_sys_futimes },
{ SYS_compat_50_lutimes, 0, (sy_call_t *)compat_50_sys_lutimes },
{ SYS_compat_50_mknod, 0, (sy_call_t *)compat_50_sys_mknod },
-#ifdef QUOTA
- { SYS_compat_50_quotactl, 0, (sy_call_t *)compat_50_sys_quotactl },
-#endif
{ 0, 0, NULL }
};
@@ -339,118 +330,6 @@ compat_50_sys_mknod(struct lwp *l,
SCARG(uap, dev), UIO_USERSPACE);
}
-#ifdef QUOTA
-/* ARGSUSED */
-int
-compat_50_sys_quotactl(struct lwp *l, const struct compat_50_sys_quotactl_args *uap, register_t *retval)
-{
- /* {
- syscallarg(const char *) path;
- syscallarg(int) cmd;
- syscallarg(int) uid;
- syscallarg(void *) arg;
- } */
- struct vnode *vp;
- struct mount *mp;
- int q1cmd;
- int idtype;
- char *qfile;
- struct dqblk dqblk;
- struct quotakey key;
- struct quotaval blocks, files;
- struct quotastat qstat;
- int error;
-
- error = namei_simple_user(SCARG(uap, path),
- NSM_FOLLOW_TRYEMULROOT, &vp);
- if (error != 0)
- return (error);
-
- mp = vp->v_mount;
- q1cmd = SCARG(uap, cmd);
- idtype = quota_idtype_from_ufs(q1cmd & SUBCMDMASK);
-
- switch ((q1cmd & ~SUBCMDMASK) >> SUBCMDSHIFT) {
- case Q_QUOTAON:
- qfile = PNBUF_GET();
- error = copyinstr(SCARG(uap, arg), qfile, PATH_MAX, NULL);
- if (error != 0) {
- PNBUF_PUT(qfile);
- break;
- }
-
- error = vfs_quotactl_quotaon(mp, idtype, qfile);
-
- PNBUF_PUT(qfile);
- break;
-
- case Q_QUOTAOFF:
- error = vfs_quotactl_quotaoff(mp, idtype);
- break;
-
- case Q_GETQUOTA:
- key.qk_idtype = idtype;
- key.qk_id = SCARG(uap, uid);
-
- key.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
- error = vfs_quotactl_get(mp, &key, &blocks);
- if (error) {
- break;
- }
-
- key.qk_objtype = QUOTA_OBJTYPE_FILES;
- error = vfs_quotactl_get(mp, &key, &files);
- if (error) {
- break;
- }
-
- quotavals_to_dqblk(&blocks, &files, &dqblk);
- error = copyout(&dqblk, SCARG(uap, arg), sizeof(dqblk));
- break;
-
- case Q_SETQUOTA:
- error = copyin(SCARG(uap, arg), &dqblk, sizeof(dqblk));
- if (error) {
- break;
- }
- dqblk_to_quotavals(&dqblk, &blocks, &files);
-
- key.qk_idtype = idtype;
- key.qk_id = SCARG(uap, uid);
-
- key.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
- error = vfs_quotactl_put(mp, &key, &blocks);
- if (error) {
- break;
- }
-
- key.qk_objtype = QUOTA_OBJTYPE_FILES;
- error = vfs_quotactl_put(mp, &key, &files);
- break;
-
- case Q_SYNC:
- /*
- * not supported but used only to see if quota is supported,
- * emulate with stat
- *
- * XXX should probably be supported
- */
- (void)idtype; /* not used */
-
- error = vfs_quotactl_stat(mp, &qstat);
- break;
-
- case Q_SETUSE:
- default:
- error = EOPNOTSUPP;
- break;
- }
-
- vrele(vp);
- return error;
-}
-#endif
-
int
vfs_syscalls_50_init(void)
{
Index: src/sys/kern/syscalls.master
diff -u src/sys/kern/syscalls.master:1.296 src/sys/kern/syscalls.master:1.297
--- src/sys/kern/syscalls.master:1.296 Sun Sep 22 22:59:39 2019
+++ src/sys/kern/syscalls.master Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.296 2019/09/22 22:59:39 christos Exp $
+ $NetBSD: syscalls.master,v 1.297 2020/01/21 02:37:16 pgoyette Exp $
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
@@ -316,7 +316,8 @@
146 COMPAT_43 MODULAR compat_43 \
{ int|sys||killpg(int pgid, int signum); } okillpg
147 STD RUMP { int|sys||setsid(void); }
-148 COMPAT_50 MODULAR compat_50 { int|sys||quotactl(const char *path, \
+148 COMPAT_50 MODULAR compat_50_quota \
+ { int|sys||quotactl(const char *path, \
int cmd, int uid, void *arg); }
149 COMPAT_43 MODULAR compat_43 { int|sys||quota(void); } oquota
150 COMPAT_43 MODULAR compat_43 { int|sys||getsockname(int fdec, \
Index: src/sys/modules/Makefile
diff -u src/sys/modules/Makefile:1.236 src/sys/modules/Makefile:1.237
--- src/sys/modules/Makefile:1.236 Sun Jan 19 20:41:19 2020
+++ src/sys/modules/Makefile Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.236 2020/01/19 20:41:19 riastradh Exp $
+# $NetBSD: Makefile,v 1.237 2020/01/21 02:37:16 pgoyette Exp $
.include <bsd.own.mk>
@@ -14,6 +14,8 @@ SUBDIR+= compat_60 compat_70 compat_
SUBDIR+= compat_sysv_10 compat_sysv_14 compat_sysv_50
+SUBDIR+= compat_50_quota
+
SUBDIR+= compat_raid_50
SUBDIR+= compat_raid_80
Index: src/sys/modules/compat_50/Makefile
diff -u src/sys/modules/compat_50/Makefile:1.6 src/sys/modules/compat_50/Makefile:1.7
--- src/sys/modules/compat_50/Makefile:1.6 Thu Sep 26 02:00:27 2019
+++ src/sys/modules/compat_50/Makefile Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.6 2019/09/26 02:00:27 christos Exp $
+# $NetBSD: Makefile,v 1.7 2020/01/21 02:37:16 pgoyette Exp $
.include "../Makefile.inc"
@@ -7,7 +7,6 @@
KMOD= compat_50
CPPFLAGS+= -DCOMPAT_50 -DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80
-CPPFLAGS+= -DQUOTA
SRCS+= compat_50_mod.c
SRCS+= kern_50.c kern_time_50.c kern_select_50.c
Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.642 src/sys/sys/param.h:1.643
--- src/sys/sys/param.h:1.642 Fri Jan 17 20:11:03 2020
+++ src/sys/sys/param.h Tue Jan 21 02:37:16 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.642 2020/01/17 20:11:03 ad Exp $ */
+/* $NetBSD: param.h,v 1.643 2020/01/21 02:37:16 pgoyette Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1993
@@ -67,7 +67,7 @@
* 2.99.9 (299000900)
*/
-#define __NetBSD_Version__ 999003900 /* NetBSD 9.99.39 */
+#define __NetBSD_Version__ 999004000 /* NetBSD 9.99.40 */
#define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
(m) * 1000000) + (p) * 100) <= __NetBSD_Version__)
Added files:
Index: src/sys/compat/common/compat_50_quota.c
diff -u /dev/null src/sys/compat/common/compat_50_quota.c:1.1
--- /dev/null Tue Jan 21 02:37:17 2020
+++ src/sys/compat/common/compat_50_quota.c Tue Jan 21 02:37:16 2020
@@ -0,0 +1,181 @@
+/* $NetBSD: compat_50_quota.c,v 1.1 2020/01/21 02:37:16 pgoyette Exp $ */
+
+/*-
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: compat_50_quota.c,v 1.1 2020/01/21 02:37:16 pgoyette Exp $");
+
+#if defined(_KERNEL_OPT)
+#include "opt_compat_netbsd.h"
+#endif
+
+#include <sys/module.h>
+#include <sys/namei.h>
+#include <sys/param.h>
+#include <sys/quota.h>
+#include <sys/quotactl.h>
+#include <sys/systm.h>
+#include <sys/syscall.h>
+#include <sys/syscallvar.h>
+#include <sys/syscallargs.h>
+#include <sys/vfs_syscalls.h>
+#include <sys/vnode.h>
+
+#include <ufs/ufs/quota1.h>
+
+static const struct syscall_package vfs_syscalls_50_quota_syscalls[] = {
+ { SYS_compat_50_quotactl, 0, (sy_call_t *)compat_50_sys_quotactl },
+ { 0, 0, NULL }
+};
+
+/* ARGSUSED */
+int
+compat_50_sys_quotactl(struct lwp *l, const struct compat_50_sys_quotactl_args *uap, register_t *retval)
+{
+ /* {
+ syscallarg(const char *) path;
+ syscallarg(int) cmd;
+ syscallarg(int) uid;
+ syscallarg(void *) arg;
+ } */
+ struct vnode *vp;
+ struct mount *mp;
+ int q1cmd;
+ int idtype;
+ char *qfile;
+ struct dqblk dqblk;
+ struct quotakey key;
+ struct quotaval blocks, files;
+ struct quotastat qstat;
+ int error;
+
+ error = namei_simple_user(SCARG(uap, path),
+ NSM_FOLLOW_TRYEMULROOT, &vp);
+ if (error != 0)
+ return (error);
+
+ mp = vp->v_mount;
+ q1cmd = SCARG(uap, cmd);
+ idtype = quota_idtype_from_ufs(q1cmd & SUBCMDMASK);
+
+ switch ((q1cmd & ~SUBCMDMASK) >> SUBCMDSHIFT) {
+ case Q_QUOTAON:
+ qfile = PNBUF_GET();
+ error = copyinstr(SCARG(uap, arg), qfile, PATH_MAX, NULL);
+ if (error != 0) {
+ PNBUF_PUT(qfile);
+ break;
+ }
+
+ error = vfs_quotactl_quotaon(mp, idtype, qfile);
+
+ PNBUF_PUT(qfile);
+ break;
+
+ case Q_QUOTAOFF:
+ error = vfs_quotactl_quotaoff(mp, idtype);
+ break;
+
+ case Q_GETQUOTA:
+ key.qk_idtype = idtype;
+ key.qk_id = SCARG(uap, uid);
+
+ key.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
+ error = vfs_quotactl_get(mp, &key, &blocks);
+ if (error) {
+ break;
+ }
+
+ key.qk_objtype = QUOTA_OBJTYPE_FILES;
+ error = vfs_quotactl_get(mp, &key, &files);
+ if (error) {
+ break;
+ }
+
+ quotavals_to_dqblk(&blocks, &files, &dqblk);
+ error = copyout(&dqblk, SCARG(uap, arg), sizeof(dqblk));
+ break;
+
+ case Q_SETQUOTA:
+ error = copyin(SCARG(uap, arg), &dqblk, sizeof(dqblk));
+ if (error) {
+ break;
+ }
+ dqblk_to_quotavals(&dqblk, &blocks, &files);
+
+ key.qk_idtype = idtype;
+ key.qk_id = SCARG(uap, uid);
+
+ key.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
+ error = vfs_quotactl_put(mp, &key, &blocks);
+ if (error) {
+ break;
+ }
+
+ key.qk_objtype = QUOTA_OBJTYPE_FILES;
+ error = vfs_quotactl_put(mp, &key, &files);
+ break;
+
+ case Q_SYNC:
+ /*
+ * not supported but used only to see if quota is supported,
+ * emulate with stat
+ *
+ * XXX should probably be supported
+ */
+ (void)idtype; /* not used */
+
+ error = vfs_quotactl_stat(mp, &qstat);
+ break;
+
+ case Q_SETUSE:
+ default:
+ error = EOPNOTSUPP;
+ break;
+ }
+
+ vrele(vp);
+ return error;
+}
+
+MODULE(MODULE_CLASS_EXEC, compat_50_quota, "compat_60");
+
+static int
+compat_50_quota_modcmd(modcmd_t cmd, void *arg)
+{
+
+ switch (cmd) {
+ case MODULE_CMD_INIT:
+ return syscall_establish(NULL, vfs_syscalls_50_quota_syscalls);
+ case MODULE_CMD_FINI:
+ return syscall_disestablish(NULL, vfs_syscalls_50_quota_syscalls);
+ default:
+ return ENOTTY;
+ }
+}
Index: src/sys/modules/compat_50_quota/Makefile
diff -u /dev/null src/sys/modules/compat_50_quota/Makefile:1.1
--- /dev/null Tue Jan 21 02:37:17 2020
+++ src/sys/modules/compat_50_quota/Makefile Tue Jan 21 02:37:17 2020
@@ -0,0 +1,14 @@
+# $NetBSD: Makefile,v 1.1 2020/01/21 02:37:17 pgoyette Exp $
+
+.include "../Makefile.inc"
+
+.PATH: ${S}/compat/common
+
+KMOD= compat_50_quota
+
+CPPFLAGS+= -DCOMPAT_50 -DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80
+CPPFLAGS+= -DQUOTA
+
+SRCS+= compat_50_quota.c
+
+.include <bsd.kmodule.mk>