diff options
Diffstat (limited to 'module/spl/spl-vnode.c')
-rw-r--r-- | module/spl/spl-vnode.c | 21 |
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) |