mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
2b3933b1e0
Introduce the capability to dynamically configure the max pages limit (FUSE_MAX_MAX_PAGES) through a sysctl. This allows system administrators to dynamically set the maximum number of pages that can be used for servicing requests in fuse. Previously, this is gated by FUSE_MAX_MAX_PAGES which is statically set to 256 pages. One result of this is that the buffer size for a write request is limited to 1 MiB on a 4k-page system. The default value for this sysctl is the original limit (256 pages). $ sysctl -a | grep max_pages_limit fs.fuse.max_pages_limit = 256 $ sysctl -n fs.fuse.max_pages_limit 256 $ echo 1024 | sudo tee /proc/sys/fs/fuse/max_pages_limit 1024 $ sysctl -n fs.fuse.max_pages_limit 1024 $ echo 65536 | sudo tee /proc/sys/fs/fuse/max_pages_limit tee: /proc/sys/fs/fuse/max_pages_limit: Invalid argument $ echo 0 | sudo tee /proc/sys/fs/fuse/max_pages_limit tee: /proc/sys/fs/fuse/max_pages_limit: Invalid argument $ echo 65535 | sudo tee /proc/sys/fs/fuse/max_pages_limit 65535 $ sysctl -n fs.fuse.max_pages_limit 65535 Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
41 lines
892 B
C
41 lines
892 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* linux/fs/fuse/fuse_sysctl.c
|
|
*
|
|
* Sysctl interface to fuse parameters
|
|
*/
|
|
#include <linux/sysctl.h>
|
|
|
|
#include "fuse_i.h"
|
|
|
|
static struct ctl_table_header *fuse_table_header;
|
|
|
|
/* Bound by fuse_init_out max_pages, which is a u16 */
|
|
static unsigned int sysctl_fuse_max_pages_limit = 65535;
|
|
|
|
static struct ctl_table fuse_sysctl_table[] = {
|
|
{
|
|
.procname = "max_pages_limit",
|
|
.data = &fuse_max_pages_limit,
|
|
.maxlen = sizeof(fuse_max_pages_limit),
|
|
.mode = 0644,
|
|
.proc_handler = proc_douintvec_minmax,
|
|
.extra1 = SYSCTL_ONE,
|
|
.extra2 = &sysctl_fuse_max_pages_limit,
|
|
},
|
|
};
|
|
|
|
int fuse_sysctl_register(void)
|
|
{
|
|
fuse_table_header = register_sysctl("fs/fuse", fuse_sysctl_table);
|
|
if (!fuse_table_header)
|
|
return -ENOMEM;
|
|
return 0;
|
|
}
|
|
|
|
void fuse_sysctl_unregister(void)
|
|
{
|
|
unregister_sysctl_table(fuse_table_header);
|
|
fuse_table_header = NULL;
|
|
}
|