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.
55 lines
1.9 KiB
55 lines
1.9 KiB
7 years ago
|
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
|
||
|
|