Add support for IO_APPEND flag in fuse
This make open(..., O_APPEND) actually works on fuse filesystem. Reviewed by: attilio
This commit is contained in:
parent
b8f699e9a8
commit
3d94054c30
@ -113,7 +113,7 @@ fuse_write_directbackend(struct vnode *vp, struct uio *uio,
|
||||
struct ucred *cred, struct fuse_filehandle *fufh);
|
||||
static int
|
||||
fuse_write_biobackend(struct vnode *vp, struct uio *uio,
|
||||
struct ucred *cred, struct fuse_filehandle *fufh);
|
||||
struct ucred *cred, struct fuse_filehandle *fufh, int ioflag);
|
||||
|
||||
int
|
||||
fuse_io_dispatch(struct vnode *vp, struct uio *uio, int ioflag,
|
||||
@ -162,7 +162,7 @@ fuse_io_dispatch(struct vnode *vp, struct uio *uio, int ioflag,
|
||||
} else {
|
||||
FS_DEBUG("buffered write of vnode %ju\n",
|
||||
(uintmax_t)VTOILLU(vp));
|
||||
err = fuse_write_biobackend(vp, uio, cred, fufh);
|
||||
err = fuse_write_biobackend(vp, uio, cred, fufh, ioflag);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -371,7 +371,7 @@ fuse_write_directbackend(struct vnode *vp, struct uio *uio,
|
||||
|
||||
static int
|
||||
fuse_write_biobackend(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 buf *bp;
|
||||
@ -390,6 +390,8 @@ fuse_write_biobackend(struct vnode *vp, struct uio *uio,
|
||||
return (EINVAL);
|
||||
if (uio->uio_resid == 0)
|
||||
return (0);
|
||||
if (ioflag & IO_APPEND)
|
||||
uio_setoffset(uio, fvdat->filesize);
|
||||
|
||||
/*
|
||||
* Find all of this file's B_NEEDCOMMIT buffers. If our writes
|
||||
|
Loading…
x
Reference in New Issue
Block a user