From 2f5d55aac5bfe0931a92f222ebc68c1546b227d9 Mon Sep 17 00:00:00 2001 From: behlendo Date: Wed, 12 Mar 2008 21:33:28 +0000 Subject: [PATCH] Add copyin/copyout mapping Fix some vnode types git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@40 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c --- include/sys/sysmacros.h | 3 +++ include/sys/vmsystm.h | 3 +++ include/sys/vnode.h | 9 +++++---- modules/spl/spl-generic.c | 12 ++++++++++++ modules/spl/spl-vnode.c | 9 ++++++--- modules/splat/splat-vnode.c | 8 ++++---- 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h index 076f267849..e0a3eec0c2 100644 --- a/include/sys/sysmacros.h +++ b/include/sys/sysmacros.h @@ -113,9 +113,12 @@ extern "C" { /* Missing globals */ extern int p0; +extern char hw_serial[11]; /* Missing misc functions */ extern int highbit(unsigned long i); +extern int ddi_strtoul(const char *hw_serial, char **nptr, + int base, unsigned long *result); #define makedevice(maj,min) makedev(maj,min) #define zone_dataset_visible(x, y) (1) diff --git a/include/sys/vmsystm.h b/include/sys/vmsystm.h index e66872f0c0..bb23da965b 100644 --- a/include/sys/vmsystm.h +++ b/include/sys/vmsystm.h @@ -7,6 +7,9 @@ #define ptob(pages) (pages * PAGE_SIZE) #define membar_producer() smp_wmb() +#define copyin(from, to, size) copy_from_user(to, from, size) +#define copyout(from, to, size) copy_to_user(to, from, size) + #if 0 /* The approximate total number of free pages */ #define freemem 0 diff --git a/include/sys/vnode.h b/include/sys/vnode.h index 7583d04d42..0e5e401740 100644 --- a/include/sys/vnode.h +++ b/include/sys/vnode.h @@ -49,7 +49,8 @@ #define AT_SEQ 0x08000 #define AT_XVATTR 0x10000 -#define CRCREAT 0 +#define CRCREAT 0x01 +#define RMFILE 0x02 typedef enum vtype { VNON = 0, @@ -132,11 +133,11 @@ extern int vn_openat(const char *path, int seg, int flags, int mode, extern int vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off, int seg, int x1, rlim64_t x2, void *x3, ssize_t *residp); -extern int vn_close(vnode_t *vp, int flags, int x1, int x2, int x3, int x4); -extern int vn_remove(const char *path, int x1, int x2); +extern int vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4); +extern int vn_remove(const char *path, int seg, int flags); extern int vn_rename(const char *path1, const char *path2, int x1); extern int vn_getattr(vnode_t *vp, vattr_t *vap, int flags, int x3, void *x4); -extern int vn_fsync(vnode_t *vp, int flags, int x3, int x4); +extern int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4); #define VOP_CLOSE vn_close #define VN_RELE(vp) diff --git a/modules/spl/spl-generic.c b/modules/spl/spl-generic.c index 1f982f8bdc..52d06b827a 100644 --- a/modules/spl/spl-generic.c +++ b/modules/spl/spl-generic.c @@ -8,6 +8,9 @@ int p0 = 0; EXPORT_SYMBOL(p0); +char hw_serial[11]; +EXPORT_SYMBOL(hw_serial); + int highbit(unsigned long i) { @@ -39,8 +42,17 @@ highbit(unsigned long i) } EXPORT_SYMBOL(highbit); +int +ddi_strtoul(const char *str, char **nptr, int base, unsigned long *result) +{ + char *end; + return (*result = simple_strtoul(str, &end, base)); +} +EXPORT_SYMBOL(ddi_strtoul); + static int __init spl_init(void) { + strcpy(hw_serial, "007f0100"); /* loopback */ printk(KERN_INFO "spl: Loaded Solaris Porting Layer v%s\n", VERSION); return 0; } diff --git a/modules/spl/spl-vnode.c b/modules/spl/spl-vnode.c index 9024909b87..a1f6a680ea 100644 --- a/modules/spl/spl-vnode.c +++ b/modules/spl/spl-vnode.c @@ -159,7 +159,7 @@ vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off, EXPORT_SYMBOL(vn_rdwr); int -vn_close(vnode_t *vp, int flags, int x1, int x2, int x3, int x4) +vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4) { int rc; @@ -180,13 +180,16 @@ static struct dentry *lookup_hash(struct nameidata *nd) /* Modified do_unlinkat() from linux/fs/namei.c, only uses exported symbols */ int -vn_remove(const char *path, int x1, int x2) +vn_remove(const char *path, int seg, int flags) { struct dentry *dentry; struct nameidata nd; struct inode *inode = NULL; int rc = 0; + BUG_ON(seg != UIO_SYSSPACE); + BUG_ON(flags != RMFILE); + rc = path_lookup(path, LOOKUP_PARENT, &nd); if (rc) goto exit; @@ -348,7 +351,7 @@ vn_getattr(vnode_t *vp, vattr_t *vap, int flags, int x3, void *x4) } EXPORT_SYMBOL(vn_getattr); -int vn_fsync(vnode_t *vp, int flags, int x3, int x4) +int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4) { BUG_ON(!vp); BUG_ON(!vp->v_fp); diff --git a/modules/splat/splat-vnode.c b/modules/splat/splat-vnode.c index 188448db81..402872d6b9 100644 --- a/modules/splat/splat-vnode.c +++ b/modules/splat/splat-vnode.c @@ -147,7 +147,7 @@ splat_vnode_test3(struct file *file, void *arg) out: VOP_CLOSE(vp, 0, 0, 0, 0, 0); VN_RELE(vp); - vn_remove(SPLAT_VNODE_TEST_FILE_RW, 0, 0); + vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE); return rc; } /* splat_vnode_test3() */ @@ -226,8 +226,8 @@ out2: VOP_CLOSE(vp, 0, 0, 0, 0, 0); VN_RELE(vp); out: - vn_remove(SPLAT_VNODE_TEST_FILE_RW1, 0, 0); - vn_remove(SPLAT_VNODE_TEST_FILE_RW2, 0, 0); + vn_remove(SPLAT_VNODE_TEST_FILE_RW1, UIO_SYSSPACE, RMFILE); + vn_remove(SPLAT_VNODE_TEST_FILE_RW2, UIO_SYSSPACE, RMFILE); return rc; } /* splat_vnode_test4() */ @@ -312,7 +312,7 @@ splat_vnode_test6(struct file *file, void *arg) out: VOP_CLOSE(vp, 0, 0, 0, 0, 0); VN_RELE(vp); - vn_remove(SPLAT_VNODE_TEST_FILE_RW, 0, 0); + vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE); return rc; } /* splat_vnode_test4() */