Add copyin/copyout mapping
Fix some vnode types git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@40 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c
This commit is contained in:
parent
4b17158506
commit
2f5d55aac5
|
@ -113,9 +113,12 @@ extern "C" {
|
||||||
|
|
||||||
/* Missing globals */
|
/* Missing globals */
|
||||||
extern int p0;
|
extern int p0;
|
||||||
|
extern char hw_serial[11];
|
||||||
|
|
||||||
/* Missing misc functions */
|
/* Missing misc functions */
|
||||||
extern int highbit(unsigned long i);
|
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 makedevice(maj,min) makedev(maj,min)
|
||||||
#define zone_dataset_visible(x, y) (1)
|
#define zone_dataset_visible(x, y) (1)
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
#define ptob(pages) (pages * PAGE_SIZE)
|
#define ptob(pages) (pages * PAGE_SIZE)
|
||||||
#define membar_producer() smp_wmb()
|
#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
|
#if 0
|
||||||
/* The approximate total number of free pages */
|
/* The approximate total number of free pages */
|
||||||
#define freemem 0
|
#define freemem 0
|
||||||
|
|
|
@ -49,7 +49,8 @@
|
||||||
#define AT_SEQ 0x08000
|
#define AT_SEQ 0x08000
|
||||||
#define AT_XVATTR 0x10000
|
#define AT_XVATTR 0x10000
|
||||||
|
|
||||||
#define CRCREAT 0
|
#define CRCREAT 0x01
|
||||||
|
#define RMFILE 0x02
|
||||||
|
|
||||||
typedef enum vtype {
|
typedef enum vtype {
|
||||||
VNON = 0,
|
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,
|
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,
|
offset_t off, int seg, int x1, rlim64_t x2,
|
||||||
void *x3, ssize_t *residp);
|
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_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4);
|
||||||
extern int vn_remove(const char *path, int x1, int x2);
|
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_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_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 VOP_CLOSE vn_close
|
||||||
#define VN_RELE(vp)
|
#define VN_RELE(vp)
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
int p0 = 0;
|
int p0 = 0;
|
||||||
EXPORT_SYMBOL(p0);
|
EXPORT_SYMBOL(p0);
|
||||||
|
|
||||||
|
char hw_serial[11];
|
||||||
|
EXPORT_SYMBOL(hw_serial);
|
||||||
|
|
||||||
int
|
int
|
||||||
highbit(unsigned long i)
|
highbit(unsigned long i)
|
||||||
{
|
{
|
||||||
|
@ -39,8 +42,17 @@ highbit(unsigned long i)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(highbit);
|
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)
|
static int __init spl_init(void)
|
||||||
{
|
{
|
||||||
|
strcpy(hw_serial, "007f0100"); /* loopback */
|
||||||
printk(KERN_INFO "spl: Loaded Solaris Porting Layer v%s\n", VERSION);
|
printk(KERN_INFO "spl: Loaded Solaris Porting Layer v%s\n", VERSION);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
EXPORT_SYMBOL(vn_rdwr);
|
||||||
|
|
||||||
int
|
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;
|
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 */
|
/* Modified do_unlinkat() from linux/fs/namei.c, only uses exported symbols */
|
||||||
int
|
int
|
||||||
vn_remove(const char *path, int x1, int x2)
|
vn_remove(const char *path, int seg, int flags)
|
||||||
{
|
{
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
struct nameidata nd;
|
struct nameidata nd;
|
||||||
struct inode *inode = NULL;
|
struct inode *inode = NULL;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
|
BUG_ON(seg != UIO_SYSSPACE);
|
||||||
|
BUG_ON(flags != RMFILE);
|
||||||
|
|
||||||
rc = path_lookup(path, LOOKUP_PARENT, &nd);
|
rc = path_lookup(path, LOOKUP_PARENT, &nd);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -348,7 +351,7 @@ vn_getattr(vnode_t *vp, vattr_t *vap, int flags, int x3, void *x4)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(vn_getattr);
|
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);
|
||||||
BUG_ON(!vp->v_fp);
|
BUG_ON(!vp->v_fp);
|
||||||
|
|
|
@ -147,7 +147,7 @@ splat_vnode_test3(struct file *file, void *arg)
|
||||||
out:
|
out:
|
||||||
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
|
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
|
||||||
VN_RELE(vp);
|
VN_RELE(vp);
|
||||||
vn_remove(SPLAT_VNODE_TEST_FILE_RW, 0, 0);
|
vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
} /* splat_vnode_test3() */
|
} /* splat_vnode_test3() */
|
||||||
|
@ -226,8 +226,8 @@ out2:
|
||||||
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
|
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
|
||||||
VN_RELE(vp);
|
VN_RELE(vp);
|
||||||
out:
|
out:
|
||||||
vn_remove(SPLAT_VNODE_TEST_FILE_RW1, 0, 0);
|
vn_remove(SPLAT_VNODE_TEST_FILE_RW1, UIO_SYSSPACE, RMFILE);
|
||||||
vn_remove(SPLAT_VNODE_TEST_FILE_RW2, 0, 0);
|
vn_remove(SPLAT_VNODE_TEST_FILE_RW2, UIO_SYSSPACE, RMFILE);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
} /* splat_vnode_test4() */
|
} /* splat_vnode_test4() */
|
||||||
|
@ -312,7 +312,7 @@ splat_vnode_test6(struct file *file, void *arg)
|
||||||
out:
|
out:
|
||||||
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
|
VOP_CLOSE(vp, 0, 0, 0, 0, 0);
|
||||||
VN_RELE(vp);
|
VN_RELE(vp);
|
||||||
vn_remove(SPLAT_VNODE_TEST_FILE_RW, 0, 0);
|
vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
} /* splat_vnode_test4() */
|
} /* splat_vnode_test4() */
|
||||||
|
|
Loading…
Reference in New Issue