Blame SOURCES/fuse2-0003-make-buffer-size-match-kernel-max-transfer-size.patch

25247e
From: Carlos Maiolino <cmaiolino-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
25247e
Date: Thu, 20 Apr 2017 14:53:01 +0200
25247e
Subject: [PATCH] make buffer size match kernel max transfer size
25247e
25247e
Currently libfuse has a hardcoded buffer limit to 128kib, while fuse
25247e
kernel module has a limit up to 32 pages.
25247e
25247e
This patch changes buffer limit to match the current page size, instead
25247e
of assuming 4096 bytes pages, enabling architectures with bigger pages
25247e
to use larger buffers, improving performance.
25247e
25247e
Also, add a new macro (HEADER_SIZE) to specify the space needed to
25247e
accommodate the header, making it easier to understand why those extra
25247e
4096 bytes are needed
25247e
25247e
Signed-off-by: Carlos Maiolino <cmaiolino-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
25247e
25247e
diff --git a/lib/fuse_kern_chan.c b/lib/fuse_kern_chan.c
25247e
index 4a9beb8..640b91a 100644
25247e
--- a/lib/fuse_kern_chan.c
25247e
+++ b/lib/fuse_kern_chan.c
25247e
@@ -83,7 +83,10 @@ static void fuse_kern_chan_destroy(struct fuse_chan *ch)
25247e
 		close(fd);
25247e
 }
25247e
 
25247e
-#define MIN_BUFSIZE 0x21000
25247e
+#define KERNEL_BUF_PAGES 32
25247e
+
25247e
+/* room needed in buffer to accommodate header */
25247e
+#define HEADER_SIZE 0x1000
25247e
 
25247e
 struct fuse_chan *fuse_kern_chan_new(int fd)
25247e
 {
25247e
@@ -92,7 +95,6 @@ struct fuse_chan *fuse_kern_chan_new(int fd)
25247e
 		.send = fuse_kern_chan_send,
25247e
 		.destroy = fuse_kern_chan_destroy,
25247e
 	};
25247e
-	size_t bufsize = getpagesize() + 0x1000;
25247e
-	bufsize = bufsize < MIN_BUFSIZE ? MIN_BUFSIZE : bufsize;
25247e
+	size_t bufsize = KERNEL_BUF_PAGES * getpagesize() + HEADER_SIZE;
25247e
 	return fuse_chan_new(&op, fd, bufsize, NULL);
25247e
 }