Module Name: src
Committed By: bouyer
Date: Tue Feb 15 17:52:52 UTC 2011
Modified Files:
src/sys/compat/netbsd32 [bouyer-quota2]: netbsd32.h
netbsd32_compat_50.c netbsd32_conv.h netbsd32_ioctl.h
netbsd32_netbsd.c
Log Message:
implement COMPAT_NETBSD32 quotactl syscalls (both new and COMPAT_50)
To generate a diff of this commit:
cvs rdiff -u -r1.84.8.1 -r1.84.8.2 src/sys/compat/netbsd32/netbsd32.h
cvs rdiff -u -r1.17 -r1.17.4.1 src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.24 -r1.24.4.1 src/sys/compat/netbsd32/netbsd32_conv.h
cvs rdiff -u -r1.29.4.1 -r1.29.4.2 src/sys/compat/netbsd32/netbsd32_ioctl.h
cvs rdiff -u -r1.168.4.2 -r1.168.4.3 \
src/sys/compat/netbsd32/netbsd32_netbsd.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/compat/netbsd32/netbsd32.h
diff -u src/sys/compat/netbsd32/netbsd32.h:1.84.8.1 src/sys/compat/netbsd32/netbsd32.h:1.84.8.2
--- src/sys/compat/netbsd32/netbsd32.h:1.84.8.1 Tue Feb 8 16:19:47 2011
+++ src/sys/compat/netbsd32/netbsd32.h Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32.h,v 1.84.8.1 2011/02/08 16:19:47 bouyer Exp $ */
+/* $NetBSD: netbsd32.h,v 1.84.8.2 2011/02/15 17:52:51 bouyer Exp $ */
/*
* Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -789,6 +789,12 @@
netbsd32_long stbcnt; /* stability limit exceeded (ro) */
};
+/* <prop/plistref.h> */
+struct netbsd32_plistref {
+ netbsd32_pointer_t pref_plist;
+ netbsd32_size_t pref_len;
+};
+
/* from <ufs/lfs/lfs.h> */
typedef netbsd32_pointer_t netbsd32_block_infop_t; /* XXX broken */
Index: src/sys/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.17 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.17.4.1
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.17 Sun May 30 19:31:39 2010
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_compat_50.c,v 1.17 2010/05/30 19:31:39 drochner Exp $ */
+/* $NetBSD: netbsd32_compat_50.c,v 1.17.4.1 2011/02/15 17:52:51 bouyer Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.17 2010/05/30 19:31:39 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.17.4.1 2011/02/15 17:52:51 bouyer Exp $");
#if defined(_KERNEL_OPT)
#include "opt_sysv.h"
@@ -1069,3 +1069,21 @@
return error;
}
#endif
+
+int
+compat_50_netbsd32_quotactl(struct lwp *l, const struct compat_50_netbsd32_quotactl_args *uap, register_t *retval)
+{
+ /* {
+ syscallarg(const netbsd32_charp) path;
+ syscallarg(int) cmd;
+ syscallarg(int) uid;
+ syscallarg(netbsd32_voidp) arg;
+ } */
+ struct compat_50_sys_quotactl_args ua;
+
+ NETBSD32TOP_UAP(path, const char);
+ NETBSD32TO64_UAP(cmd);
+ NETBSD32TO64_UAP(uid);
+ NETBSD32TOP_UAP(arg, void *);
+ return (compat_50_sys_quotactl(l, &ua, retval));
+}
Index: src/sys/compat/netbsd32/netbsd32_conv.h
diff -u src/sys/compat/netbsd32/netbsd32_conv.h:1.24 src/sys/compat/netbsd32/netbsd32_conv.h:1.24.4.1
--- src/sys/compat/netbsd32/netbsd32_conv.h:1.24 Sun Jan 16 23:21:16 2011
+++ src/sys/compat/netbsd32/netbsd32_conv.h Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_conv.h,v 1.24 2011/01/16 23:21:16 njoly Exp $ */
+/* $NetBSD: netbsd32_conv.h,v 1.24.4.1 2011/02/15 17:52:51 bouyer Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@@ -52,6 +52,8 @@
#include <compat/sys/dirent.h>
+#include <prop/plistref.h>
+
#include <compat/netbsd32/netbsd32.h>
/* converters for structures that we need */
@@ -756,4 +758,30 @@
return ((char *)(void *)odp) - buf;
}
+static inline int
+netbsd32_copyin_plistref(netbsd32_pointer_t n32p, struct plistref *p)
+{
+ struct netbsd32_plistref n32plist;
+ int error;
+
+ error = copyin(NETBSD32PTR64(n32p), &n32plist,
+ sizeof(struct netbsd32_plistref));
+ if (error)
+ return error;
+ p->pref_plist = NETBSD32PTR64(n32plist.pref_plist);
+ p->pref_len = n32plist.pref_len;
+ return 0;
+}
+
+static inline int
+netbsd32_copyout_plistref(netbsd32_pointer_t n32p, struct plistref *p)
+{
+ struct netbsd32_plistref n32plist;
+
+ NETBSD32PTR32(n32plist.pref_plist, p->pref_plist);
+ n32plist.pref_len = p->pref_len;
+ return copyout(&n32plist, NETBSD32PTR64(n32p),
+ sizeof(struct netbsd32_plistref));
+}
+
#endif /* _COMPAT_NETBSD32_NETBSD32_CONV_H_ */
Index: src/sys/compat/netbsd32/netbsd32_ioctl.h
diff -u src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29.4.1 src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29.4.2
--- src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29.4.1 Tue Feb 8 16:19:47 2011
+++ src/sys/compat/netbsd32/netbsd32_ioctl.h Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_ioctl.h,v 1.29.4.1 2011/02/08 16:19:47 bouyer Exp $ */
+/* $NetBSD: netbsd32_ioctl.h,v 1.29.4.2 2011/02/15 17:52:51 bouyer Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@@ -389,11 +389,6 @@
#define VNDIOCSET5032 _IOWR('F', 0, struct netbsd32_vnd_ioctl50)
#define VNDIOCCLR5032 _IOW('F', 1, struct netbsd32_vnd_ioctl50)
-struct netbsd32_plistref {
- netbsd32_voidp pref_plist; /* plist data */
- netbsd32_size_t pref_len; /* total length of plist data */
-};
-
#define ENVSYS_GETDICTIONARY32 _IOWR('E', 0, struct netbsd32_plistref)
#define ENVSYS_SETDICTIONARY32 _IOWR('E', 1, struct netbsd32_plistref)
#define ENVSYS_REMOVEPROPS32 _IOWR('E', 2, struct netbsd32_plistref)
Index: src/sys/compat/netbsd32/netbsd32_netbsd.c
diff -u src/sys/compat/netbsd32/netbsd32_netbsd.c:1.168.4.2 src/sys/compat/netbsd32/netbsd32_netbsd.c:1.168.4.3
--- src/sys/compat/netbsd32/netbsd32_netbsd.c:1.168.4.2 Wed Feb 9 16:09:55 2011
+++ src/sys/compat/netbsd32/netbsd32_netbsd.c Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_netbsd.c,v 1.168.4.2 2011/02/09 16:09:55 bouyer Exp $ */
+/* $NetBSD: netbsd32_netbsd.c,v 1.168.4.3 2011/02/15 17:52:51 bouyer Exp $ */
/*
* Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.168.4.2 2011/02/09 16:09:55 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.168.4.3 2011/02/15 17:52:51 bouyer Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ddb.h"
@@ -1185,40 +1185,39 @@
}
int
-compat_50_netbsd32_quotactl(struct lwp *l, const struct compat_50_netbsd32_quotactl_args *uap, register_t *retval)
+netbsd32___quotactl50(struct lwp *l, const struct netbsd32___quotactl50_args *uap, register_t *retval)
{
/* {
syscallarg(const netbsd32_charp) path;
- syscallarg(int) cmd;
- syscallarg(int) uid;
- syscallarg(netbsd32_voidp) arg;
+ syscallarg(netbsd32_voidp) v;
} */
- struct compat_50_sys_quotactl_args ua;
+ struct plistref pref;
+ int error;
+ struct vnode *vp;
+ struct mount *mp;
+ prop_dictionary_t dict;
- NETBSD32TOP_UAP(path, const char);
- NETBSD32TO64_UAP(cmd);
- NETBSD32TO64_UAP(uid);
- NETBSD32TOP_UAP(arg, void *);
- return (compat_50_sys_quotactl(l, &ua, retval));
-}
+ error = namei_simple_user(SCARG_P32(uap, path),
+ NSM_FOLLOW_TRYEMULROOT, &vp);
-int
-netbsd32___quotactl50(struct lwp *l, const struct netbsd32___quotactl50_args *uap, register_t *retval)
-{
- /* {
- syscallarg(const netbsd32_charp) path;
- syscallarg(void *) v;
- } */
- //struct sys___quotactl50_args ua;
+ if (error != 0)
+ return (error);
+ mp = vp->v_mount;
- return EOPNOTSUPP;
-#if 0
- NETBSD32TOP_UAP(path, const char);
- NETBSD32TO64_UAP(cmd);
- NETBSD32TO64_UAP(uid);
- NETBSD32TOP_UAP(arg, void *);
- return (sys_quotactl(l, &ua, retval));
-#endif
+ error = netbsd32_copyin_plistref(SCARG(uap, pref), &pref);
+ if (error)
+ return error;
+ error = prop_dictionary_copyin(&pref, &dict);
+ if (error)
+ return error;
+ error = VFS_QUOTACTL(mp, dict);
+ vrele(vp);
+ if (!error)
+ error = prop_dictionary_copyout(&pref, dict);
+ if (!error)
+ error = netbsd32_copyout_plistref(SCARG(uap, pref), &pref);
+ prop_object_release(dict);
+ return (error);
}
int