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