aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--example/passthrough_hp.cc3
-rw-r--r--lib/fuse_lowlevel.c16
2 files changed, 13 insertions, 6 deletions
diff --git a/example/passthrough_hp.cc b/example/passthrough_hp.cc
index 41904e5..d87ca5f 100644
--- a/example/passthrough_hp.cc
+++ b/example/passthrough_hp.cc
@@ -226,6 +226,9 @@ static void sfs_init(void *userdata, fuse_conn_info *conn) {
/* Disable the receiving and processing of FUSE_INTERRUPT requests */
conn->no_interrupt = 1;
+
+ /* Try a large IO by default */
+ conn->max_write = 4 * 1024 * 1024;
}
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 17bc816..9ebaaf0 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -3112,16 +3112,16 @@ pipe_retry:
struct fuse_bufvec dst = { .count = 1 };
if (!buf->mem) {
- buf->mem = buf_alloc(se->bufsize, internal);
+ buf->mem = buf_alloc(bufsize, internal);
if (!buf->mem) {
fuse_log(
FUSE_LOG_ERR,
"fuse: failed to allocate read buffer\n");
return -ENOMEM;
}
- buf->mem_size = se->bufsize;
+ buf->mem_size = bufsize;
}
- buf->size = se->bufsize;
+ buf->size = bufsize;
buf->flags = 0;
dst.buf[0] = *buf;
@@ -3151,14 +3151,18 @@ pipe_retry:
fallback:
#endif
+ bufsize = internal ? buf->mem_size : se->bufsize;
if (!buf->mem) {
- buf->mem = buf_alloc(se->bufsize, internal);
+ bufsize = se->bufsize; /* might have changed */
+ buf->mem = buf_alloc(bufsize, internal);
if (!buf->mem) {
fuse_log(FUSE_LOG_ERR,
"fuse: failed to allocate read buffer\n");
return -ENOMEM;
}
- buf->mem_size = se->bufsize;
+
+ if (internal)
+ buf->mem_size = bufsize;
}
restart:
@@ -3175,7 +3179,7 @@ restart:
if (fuse_session_exited(se))
return 0;
if (res == -1) {
- if (err == EINVAL && internal && se->bufsize > buf->mem_size) {
+ if (err == EINVAL && internal && se->bufsize > bufsize) {
/* FUSE_INIT might have increased the required bufsize */
bufsize = se->bufsize;
void *newbuf = buf_alloc(bufsize, internal);