max_write can be limited by se->op.init() and by the buffer size,
we use the minimum of these two.
Required se->bufsize is then set according to the determined
max_write. The current thread will have the old buffer size,
though, as it already had to the allocation to handle the
FUSE_INIT call (unless splice is used and ths variable
and related buffer is not used at all).
The given bufsize is just a hint for minimum size, allocation
could be actually larger (for example to get huge pages).
#include "fuse.h"
#include "fuse_lowlevel.h"
+#define MIN(a, b) \
+({ \
+ typeof(a) _a = (a); \
+ typeof(b) _b = (b); \
+ _a < _b ? _a : _b; \
+})
+
struct mount_opts;
struct fuse_req {
bufsize = FUSE_MIN_READ_BUFFER;
}
- if (se->conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE)
- se->conn.max_write = bufsize - FUSE_BUFFER_HEADER_SIZE;
- if (se->conn.max_write < bufsize - FUSE_BUFFER_HEADER_SIZE)
- bufsize = se->conn.max_write + FUSE_BUFFER_HEADER_SIZE;
- se->bufsize = bufsize;
+ se->conn.max_write = MIN(se->conn.max_write, bufsize - FUSE_BUFFER_HEADER_SIZE);
+ se->bufsize = se->conn.max_write + FUSE_BUFFER_HEADER_SIZE;
if (arg->flags & FUSE_MAX_PAGES) {
outarg.flags |= FUSE_MAX_PAGES;