summaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
Diffstat (limited to 'module')
-rw-r--r--module/spl/spl-vnode.c21
1 files changed, 4 insertions, 17 deletions
diff --git a/module/spl/spl-vnode.c b/module/spl/spl-vnode.c
index 0e4c386a3..19b3b76cd 100644
--- a/module/spl/spl-vnode.c
+++ b/module/spl/spl-vnode.c
@@ -211,35 +211,22 @@ int
vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off,
uio_seg_t seg, int ioflag, rlim64_t x2, void *x3, ssize_t *residp)
{
- loff_t offset;
- mm_segment_t saved_fs;
- struct file *fp;
+ struct file *fp = vp->v_file;
+ loff_t offset = off;
int rc;
ASSERT(uio == UIO_WRITE || uio == UIO_READ);
- ASSERT(vp);
- ASSERT(vp->v_file);
ASSERT(seg == UIO_SYSSPACE);
ASSERT((ioflag & ~FAPPEND) == 0);
- fp = vp->v_file;
-
- offset = off;
if (ioflag & FAPPEND)
offset = fp->f_pos;
- /* Writable user data segment must be briefly increased for this
- * process so we can use the user space read call paths to write
- * in to memory allocated by the kernel. */
- saved_fs = get_fs();
- set_fs(get_ds());
-
if (uio & UIO_WRITE)
- rc = vfs_write(fp, addr, len, &offset);
+ rc = spl_kernel_write(fp, addr, len, &offset);
else
- rc = vfs_read(fp, addr, len, &offset);
+ rc = spl_kernel_read(fp, addr, len, &offset);
- set_fs(saved_fs);
fp->f_pos = offset;
if (rc < 0)