diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fuse/file.c | 2 | ||||
-rw-r--r-- | fs/fuse/fuse_i.h | 3 | ||||
-rw-r--r-- | fs/fuse/inode.c | 5 |
3 files changed, 9 insertions, 1 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index f28cf8b46f80..8092f0d9fd1f 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -804,6 +804,8 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req, | |||
804 | if (offset == PAGE_CACHE_SIZE) | 804 | if (offset == PAGE_CACHE_SIZE) |
805 | offset = 0; | 805 | offset = 0; |
806 | 806 | ||
807 | if (!fc->big_writes) | ||
808 | break; | ||
807 | } while (iov_iter_count(ii) && count < fc->max_write && | 809 | } while (iov_iter_count(ii) && count < fc->max_write && |
808 | req->num_pages < FUSE_MAX_PAGES_PER_REQ && offset == 0); | 810 | req->num_pages < FUSE_MAX_PAGES_PER_REQ && offset == 0); |
809 | 811 | ||
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index dadffa21a206..bae948657c4f 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h | |||
@@ -404,6 +404,9 @@ struct fuse_conn { | |||
404 | /** Is bmap not implemented by fs? */ | 404 | /** Is bmap not implemented by fs? */ |
405 | unsigned no_bmap : 1; | 405 | unsigned no_bmap : 1; |
406 | 406 | ||
407 | /** Do multi-page cached writes */ | ||
408 | unsigned big_writes : 1; | ||
409 | |||
407 | /** The number of requests waiting for completion */ | 410 | /** The number of requests waiting for completion */ |
408 | atomic_t num_waiting; | 411 | atomic_t num_waiting; |
409 | 412 | ||
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 79b615873838..fb77e0962132 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -576,6 +576,8 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req) | |||
576 | fc->no_lock = 1; | 576 | fc->no_lock = 1; |
577 | if (arg->flags & FUSE_ATOMIC_O_TRUNC) | 577 | if (arg->flags & FUSE_ATOMIC_O_TRUNC) |
578 | fc->atomic_o_trunc = 1; | 578 | fc->atomic_o_trunc = 1; |
579 | if (arg->flags & FUSE_BIG_WRITES) | ||
580 | fc->big_writes = 1; | ||
579 | } else { | 581 | } else { |
580 | ra_pages = fc->max_read / PAGE_CACHE_SIZE; | 582 | ra_pages = fc->max_read / PAGE_CACHE_SIZE; |
581 | fc->no_lock = 1; | 583 | fc->no_lock = 1; |
@@ -599,7 +601,8 @@ static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req) | |||
599 | arg->major = FUSE_KERNEL_VERSION; | 601 | arg->major = FUSE_KERNEL_VERSION; |
600 | arg->minor = FUSE_KERNEL_MINOR_VERSION; | 602 | arg->minor = FUSE_KERNEL_MINOR_VERSION; |
601 | arg->max_readahead = fc->bdi.ra_pages * PAGE_CACHE_SIZE; | 603 | arg->max_readahead = fc->bdi.ra_pages * PAGE_CACHE_SIZE; |
602 | arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC; | 604 | arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC | |
605 | FUSE_BIG_WRITES; | ||
603 | req->in.h.opcode = FUSE_INIT; | 606 | req->in.h.opcode = FUSE_INIT; |
604 | req->in.numargs = 1; | 607 | req->in.numargs = 1; |
605 | req->in.args[0].size = sizeof(*arg); | 608 | req->in.args[0].size = sizeof(*arg); |