svn commit: r320689 - releng/11.1/sys/fs/fuse
Mark Johnston
markj at FreeBSD.org
Wed Jul 5 17:29:08 UTC 2017
Author: markj
Date: Wed Jul 5 17:29:07 2017
New Revision: 320689
URL: https://svnweb.freebsd.org/changeset/base/320689
Log:
MFS r320684: MFC r320451 (by cem):
Complete support for the IO_APPEND flag in fuse.
Approved by: re (gjb)
Modified:
releng/11.1/sys/fs/fuse/fuse_io.c
Directory Properties:
releng/11.1/ (props changed)
Modified: releng/11.1/sys/fs/fuse/fuse_io.c
==============================================================================
--- releng/11.1/sys/fs/fuse/fuse_io.c Wed Jul 5 17:27:03 2017 (r320688)
+++ releng/11.1/sys/fs/fuse/fuse_io.c Wed Jul 5 17:29:07 2017 (r320689)
@@ -108,7 +108,7 @@ fuse_read_biobackend(struct vnode *vp, struct uio *uio
struct ucred *cred, struct fuse_filehandle *fufh);
static int
fuse_write_directbackend(struct vnode *vp, struct uio *uio,
- struct ucred *cred, struct fuse_filehandle *fufh);
+ struct ucred *cred, struct fuse_filehandle *fufh, int ioflag);
static int
fuse_write_biobackend(struct vnode *vp, struct uio *uio,
struct ucred *cred, struct fuse_filehandle *fufh, int ioflag);
@@ -156,7 +156,7 @@ fuse_io_dispatch(struct vnode *vp, struct uio *uio, in
if (directio) {
FS_DEBUG("direct write of vnode %ju via file handle %ju\n",
(uintmax_t)VTOILLU(vp), (uintmax_t)fufh->fh_id);
- err = fuse_write_directbackend(vp, uio, cred, fufh);
+ err = fuse_write_directbackend(vp, uio, cred, fufh, ioflag);
} else {
FS_DEBUG("buffered write of vnode %ju\n",
(uintmax_t)VTOILLU(vp));
@@ -318,7 +318,7 @@ out:
static int
fuse_write_directbackend(struct vnode *vp, struct uio *uio,
- struct ucred *cred, struct fuse_filehandle *fufh)
+ struct ucred *cred, struct fuse_filehandle *fufh, int ioflag)
{
struct fuse_vnode_data *fvdat = VTOFUD(vp);
struct fuse_write_in *fwi;
@@ -327,8 +327,10 @@ fuse_write_directbackend(struct vnode *vp, struct uio
int diff;
int err = 0;
- if (!uio->uio_resid)
+ if (uio->uio_resid == 0)
return (0);
+ if (ioflag & IO_APPEND)
+ uio_setoffset(uio, fvdat->filesize);
fdisp_init(&fdi, 0);
@@ -705,7 +707,7 @@ fuse_io_strategy(struct vnode *vp, struct buf *bp)
io.iov_base = (char *)bp->b_data + bp->b_dirtyoff;
uiop->uio_rw = UIO_WRITE;
- error = fuse_write_directbackend(vp, uiop, cred, fufh);
+ error = fuse_write_directbackend(vp, uiop, cred, fufh, 0);
if (error == EINTR || error == ETIMEDOUT
|| (!error && (bp->b_flags & B_NEEDCOMMIT))) {
More information about the svn-src-releng
mailing list