You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.9 KiB
54 lines
1.9 KiB
From a83b3ec1d7ce2d656a4c476d65486371d1a659b2 Mon Sep 17 00:00:00 2001 |
|
From: Carlos Maiolino <cmaiolino@redhat.com> |
|
Date: Tue, 2 May 2017 12:46:10 +0200 |
|
Subject: [PATCH] From 4f8f034a8969a48f210bf00be78a67cfb6964c72 Mon Sep 17 |
|
00:00:00 2001 From: Carlos Maiolino |
|
<cmaiolino-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Date: Thu, 20 Apr 2017 |
|
14:53:01 +0200 Subject: [PATCH] make buffer size match kernel max transfer |
|
size |
|
|
|
Currently libfuse has a hardcoded buffer limit to 128kib, while fuse |
|
kernel module has a limit up to 32 pages. |
|
|
|
This patch changes buffer limit to match the current page size, instead |
|
of assuming 4096 bytes pages, enabling architectures with bigger pages |
|
to use larger buffers, improving performance. |
|
|
|
Also, add a new macro (HEADER_SIZE) to specify the space needed to |
|
accommodate the header, making it easier to understand why those extra |
|
4096 bytes are needed |
|
|
|
Signed-off-by: Carlos Maiolino <cmaiolino-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> |
|
Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> |
|
--- |
|
lib/fuse_kern_chan.c | 8 +++++--- |
|
1 file changed, 5 insertions(+), 3 deletions(-) |
|
|
|
diff --git a/lib/fuse_kern_chan.c b/lib/fuse_kern_chan.c |
|
index 5f77bbf..4cc9b73 100644 |
|
--- a/lib/fuse_kern_chan.c |
|
+++ b/lib/fuse_kern_chan.c |
|
@@ -80,7 +80,10 @@ static void fuse_kern_chan_destroy(struct fuse_chan *ch) |
|
close(fuse_chan_fd(ch)); |
|
} |
|
|
|
-#define MIN_BUFSIZE 0x21000 |
|
+#define KERNEL_BUF_PAGES 32 |
|
+ |
|
+/* room needed in buffer to accommodate header */ |
|
+#define HEADER_SIZE 0x1000 |
|
|
|
struct fuse_chan *fuse_kern_chan_new(int fd) |
|
{ |
|
@@ -89,7 +92,6 @@ struct fuse_chan *fuse_kern_chan_new(int fd) |
|
.send = fuse_kern_chan_send, |
|
.destroy = fuse_kern_chan_destroy, |
|
}; |
|
- size_t bufsize = getpagesize() + 0x1000; |
|
- bufsize = bufsize < MIN_BUFSIZE ? MIN_BUFSIZE : bufsize; |
|
+ size_t bufsize = KERNEL_BUF_PAGES * getpagesize() + HEADER_SIZE; |
|
return fuse_chan_new(&op, fd, bufsize, NULL); |
|
} |
|
-- |
|
2.9.3 |
|
|
|
|