svn commit: r349338 - projects/fuse2/sys/fs/fuse
Alan Somers
asomers at FreeBSD.org
Mon Jun 24 20:08:29 UTC 2019
Author: asomers
Date: Mon Jun 24 20:08:28 2019
New Revision: 349338
URL: https://svnweb.freebsd.org/changeset/base/349338
Log:
fusefs: refine the short read fix from r349332
b_fsprivate1 needs to be initialized even for write operations, probably
because a buffer can be used to read, write, and read again with the final
read serviced by cache.
Sponsored by: The FreeBSD Foundation
Modified:
projects/fuse2/sys/fs/fuse/fuse_io.c
Modified: projects/fuse2/sys/fs/fuse/fuse_io.c
==============================================================================
--- projects/fuse2/sys/fs/fuse/fuse_io.c Mon Jun 24 19:52:08 2019 (r349337)
+++ projects/fuse2/sys/fs/fuse/fuse_io.c Mon Jun 24 20:08:28 2019 (r349338)
@@ -164,6 +164,8 @@ fuse_io_clear_suid_on_write(struct vnode *vp, struct u
SDT_PROBE_DEFINE5(fusefs, , io, io_dispatch, "struct vnode*", "struct uio*",
"int", "struct ucred*", "struct fuse_filehandle*");
+SDT_PROBE_DEFINE5(fusefs, , io, io_dispatch_filehandles_closed, "struct vnode*",
+ "struct uio*", "int", "bool", "struct ucred*");
int
fuse_io_dispatch(struct vnode *vp, struct uio *uio, int ioflag, bool pages,
struct ucred *cred, pid_t pid)
@@ -186,6 +188,8 @@ fuse_io_dispatch(struct vnode *vp, struct uio *uio, in
closefufh = true;
}
else if (err) {
+ SDT_PROBE5(fusefs, , io, io_dispatch_filehandles_closed,
+ vp, uio, ioflag, pages, cred);
printf("FUSE: io dispatch: filehandles are closed\n");
return err;
}
@@ -860,6 +864,7 @@ fuse_io_strategy(struct vnode *vp, struct buf *bp)
fflag = bp->b_iocmd == BIO_READ ? FREAD : FWRITE;
cred = bp->b_iocmd == BIO_READ ? bp->b_rcred : bp->b_wcred;
error = fuse_filehandle_getrw(vp, fflag, &fufh, cred, pid);
+ bp->b_fsprivate1 = (void*)(intptr_t)0;
if (bp->b_iocmd == BIO_READ && error == EBADF) {
/*
* This may be a read-modify-write operation on a cached file
More information about the svn-src-projects
mailing list