Handle the FAPPEND option in vn_rdwr().

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
Ricardo Correia 2010-04-23 12:19:10 -07:00 committed by Brian Behlendorf
parent 82a358d9c0
commit 663e02a135

View File

@ -181,7 +181,7 @@ EXPORT_SYMBOL(vn_openat);
int int
vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off, vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off,
uio_seg_t seg, int x1, rlim64_t x2, void *x3, ssize_t *residp) uio_seg_t seg, int ioflag, rlim64_t x2, void *x3, ssize_t *residp)
{ {
loff_t offset; loff_t offset;
mm_segment_t saved_fs; mm_segment_t saved_fs;
@ -193,12 +193,15 @@ vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off,
ASSERT(vp); ASSERT(vp);
ASSERT(vp->v_file); ASSERT(vp->v_file);
ASSERT(seg == UIO_SYSSPACE); ASSERT(seg == UIO_SYSSPACE);
ASSERT(x1 == 0); ASSERT((ioflag & ~FAPPEND) == 0);
ASSERT(x2 == RLIM64_INFINITY); ASSERT(x2 == RLIM64_INFINITY);
offset = off;
fp = vp->v_file; fp = vp->v_file;
offset = off;
if (ioflag & FAPPEND)
offset = fp->f_pos;
/* Writable user data segment must be briefly increased for this /* Writable user data segment must be briefly increased for this
* process so we can use the user space read call paths to write * process so we can use the user space read call paths to write
* in to memory allocated by the kernel. */ * in to memory allocated by the kernel. */