aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>2008-03-12 21:33:28 +0000
committerbehlendo <behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>2008-03-12 21:33:28 +0000
commit2f5d55aac5bfe0931a92f222ebc68c1546b227d9 (patch)
tree04b9b97a5c0eba2005e77f88b422861c0036ad1a
parent4b17158506d5f3bb7e71111f5b6287f19bf20190 (diff)
Add copyin/copyout mapping
Fix some vnode types git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@40 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c
-rw-r--r--include/sys/sysmacros.h3
-rw-r--r--include/sys/vmsystm.h3
-rw-r--r--include/sys/vnode.h9
-rw-r--r--modules/spl/spl-generic.c12
-rw-r--r--modules/spl/spl-vnode.c9
-rw-r--r--modules/splat/splat-vnode.c8
6 files changed, 33 insertions, 11 deletions
diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h
index 076f26784..e0a3eec0c 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 e66872f0c..bb23da965 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 7583d04d4..0e5e40174 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 1f982f8bd..52d06b827 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 9024909b8..a1f6a680e 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 188448db8..402872d6b 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() */