diff options
| -rw-r--r-- | fs/inotify.c | 49 | ||||
| -rw-r--r-- | include/linux/sysctl.h | 12 | ||||
| -rw-r--r-- | kernel/sysctl.c | 51 |
3 files changed, 62 insertions, 50 deletions
diff --git a/fs/inotify.c b/fs/inotify.c index e423bfe0c86f..fb4803131423 100644 --- a/fs/inotify.c +++ b/fs/inotify.c | |||
| @@ -45,8 +45,8 @@ static kmem_cache_t *event_cachep; | |||
| 45 | 45 | ||
| 46 | static struct vfsmount *inotify_mnt; | 46 | static struct vfsmount *inotify_mnt; |
| 47 | 47 | ||
| 48 | /* These are configurable via /proc/sys/inotify */ | 48 | /* these are configurable via /proc/sys/fs/inotify/ */ |
| 49 | int inotify_max_user_devices; | 49 | int inotify_max_user_instances; |
| 50 | int inotify_max_user_watches; | 50 | int inotify_max_user_watches; |
| 51 | int inotify_max_queued_events; | 51 | int inotify_max_queued_events; |
| 52 | 52 | ||
| @@ -125,6 +125,47 @@ struct inotify_watch { | |||
| 125 | u32 mask; /* event mask for this watch */ | 125 | u32 mask; /* event mask for this watch */ |
| 126 | }; | 126 | }; |
| 127 | 127 | ||
| 128 | #ifdef CONFIG_SYSCTL | ||
| 129 | |||
| 130 | #include <linux/sysctl.h> | ||
| 131 | |||
| 132 | static int zero; | ||
| 133 | |||
| 134 | ctl_table inotify_table[] = { | ||
| 135 | { | ||
| 136 | .ctl_name = INOTIFY_MAX_USER_INSTANCES, | ||
| 137 | .procname = "max_user_instances", | ||
| 138 | .data = &inotify_max_user_instances, | ||
| 139 | .maxlen = sizeof(int), | ||
| 140 | .mode = 0644, | ||
| 141 | .proc_handler = &proc_dointvec_minmax, | ||
| 142 | .strategy = &sysctl_intvec, | ||
| 143 | .extra1 = &zero, | ||
| 144 | }, | ||
| 145 | { | ||
| 146 | .ctl_name = INOTIFY_MAX_USER_WATCHES, | ||
| 147 | .procname = "max_user_watches", | ||
| 148 | .data = &inotify_max_user_watches, | ||
| 149 | .maxlen = sizeof(int), | ||
| 150 | .mode = 0644, | ||
| 151 | .proc_handler = &proc_dointvec_minmax, | ||
| 152 | .strategy = &sysctl_intvec, | ||
| 153 | .extra1 = &zero, | ||
| 154 | }, | ||
| 155 | { | ||
| 156 | .ctl_name = INOTIFY_MAX_QUEUED_EVENTS, | ||
| 157 | .procname = "max_queued_events", | ||
| 158 | .data = &inotify_max_queued_events, | ||
| 159 | .maxlen = sizeof(int), | ||
| 160 | .mode = 0644, | ||
| 161 | .proc_handler = &proc_dointvec_minmax, | ||
| 162 | .strategy = &sysctl_intvec, | ||
| 163 | .extra1 = &zero | ||
| 164 | }, | ||
| 165 | { .ctl_name = 0 } | ||
| 166 | }; | ||
| 167 | #endif /* CONFIG_SYSCTL */ | ||
| 168 | |||
| 128 | static inline void get_inotify_dev(struct inotify_device *dev) | 169 | static inline void get_inotify_dev(struct inotify_device *dev) |
| 129 | { | 170 | { |
| 130 | atomic_inc(&dev->count); | 171 | atomic_inc(&dev->count); |
| @@ -842,7 +883,7 @@ asmlinkage long sys_inotify_init(void) | |||
| 842 | 883 | ||
| 843 | user = get_uid(current->user); | 884 | user = get_uid(current->user); |
| 844 | 885 | ||
| 845 | if (unlikely(atomic_read(&user->inotify_devs) >= inotify_max_user_devices)) { | 886 | if (unlikely(atomic_read(&user->inotify_devs) >= inotify_max_user_instances)) { |
| 846 | ret = -EMFILE; | 887 | ret = -EMFILE; |
| 847 | goto out_err; | 888 | goto out_err; |
| 848 | } | 889 | } |
| @@ -979,7 +1020,7 @@ static int __init inotify_init(void) | |||
| 979 | inotify_mnt = kern_mount(&inotify_fs_type); | 1020 | inotify_mnt = kern_mount(&inotify_fs_type); |
| 980 | 1021 | ||
| 981 | inotify_max_queued_events = 8192; | 1022 | inotify_max_queued_events = 8192; |
| 982 | inotify_max_user_devices = 128; | 1023 | inotify_max_user_instances = 8; |
| 983 | inotify_max_user_watches = 8192; | 1024 | inotify_max_user_watches = 8192; |
| 984 | 1025 | ||
| 985 | atomic_set(&inotify_cookie, 0); | 1026 | atomic_set(&inotify_cookie, 0); |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index ce19a2aa0b21..bfbbe94b297d 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
| @@ -61,8 +61,7 @@ enum | |||
| 61 | CTL_DEV=7, /* Devices */ | 61 | CTL_DEV=7, /* Devices */ |
| 62 | CTL_BUS=8, /* Busses */ | 62 | CTL_BUS=8, /* Busses */ |
| 63 | CTL_ABI=9, /* Binary emulation */ | 63 | CTL_ABI=9, /* Binary emulation */ |
| 64 | CTL_CPU=10, /* CPU stuff (speed scaling, etc) */ | 64 | CTL_CPU=10 /* CPU stuff (speed scaling, etc) */ |
| 65 | CTL_INOTIFY=11 /* Inotify */ | ||
| 66 | }; | 65 | }; |
| 67 | 66 | ||
| 68 | /* CTL_BUS names: */ | 67 | /* CTL_BUS names: */ |
| @@ -71,12 +70,12 @@ enum | |||
| 71 | CTL_BUS_ISA=1 /* ISA */ | 70 | CTL_BUS_ISA=1 /* ISA */ |
| 72 | }; | 71 | }; |
| 73 | 72 | ||
| 74 | /* CTL_INOTIFY names: */ | 73 | /* /proc/sys/fs/inotify/ */ |
| 75 | enum | 74 | enum |
| 76 | { | 75 | { |
| 77 | INOTIFY_MAX_USER_DEVICES=1, /* max number of inotify device instances per user */ | 76 | INOTIFY_MAX_USER_INSTANCES=1, /* max instances per user */ |
| 78 | INOTIFY_MAX_USER_WATCHES=2, /* max number of inotify watches per user */ | 77 | INOTIFY_MAX_USER_WATCHES=2, /* max watches per user */ |
| 79 | INOTIFY_MAX_QUEUED_EVENTS=3 /* Max number of queued events per inotify device instance */ | 78 | INOTIFY_MAX_QUEUED_EVENTS=3 /* max queued events per instance */ |
| 80 | }; | 79 | }; |
| 81 | 80 | ||
| 82 | /* CTL_KERN names: */ | 81 | /* CTL_KERN names: */ |
| @@ -685,6 +684,7 @@ enum | |||
| 685 | FS_XFS=17, /* struct: control xfs parameters */ | 684 | FS_XFS=17, /* struct: control xfs parameters */ |
| 686 | FS_AIO_NR=18, /* current system-wide number of aio requests */ | 685 | FS_AIO_NR=18, /* current system-wide number of aio requests */ |
| 687 | FS_AIO_MAX_NR=19, /* system-wide maximum number of aio requests */ | 686 | FS_AIO_MAX_NR=19, /* system-wide maximum number of aio requests */ |
| 687 | FS_INOTIFY=20, /* inotify submenu */ | ||
| 688 | }; | 688 | }; |
| 689 | 689 | ||
| 690 | /* /proc/sys/fs/quota/ */ | 690 | /* /proc/sys/fs/quota/ */ |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index b240e2cb86fc..e60b9c36f1f0 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -67,12 +67,6 @@ extern int printk_ratelimit_jiffies; | |||
| 67 | extern int printk_ratelimit_burst; | 67 | extern int printk_ratelimit_burst; |
| 68 | extern int pid_max_min, pid_max_max; | 68 | extern int pid_max_min, pid_max_max; |
| 69 | 69 | ||
| 70 | #ifdef CONFIG_INOTIFY | ||
| 71 | extern int inotify_max_user_devices; | ||
| 72 | extern int inotify_max_user_watches; | ||
| 73 | extern int inotify_max_queued_events; | ||
| 74 | #endif | ||
| 75 | |||
| 76 | #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) | 70 | #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) |
| 77 | int unknown_nmi_panic; | 71 | int unknown_nmi_panic; |
| 78 | extern int proc_unknown_nmi_panic(ctl_table *, int, struct file *, | 72 | extern int proc_unknown_nmi_panic(ctl_table *, int, struct file *, |
| @@ -152,6 +146,9 @@ extern ctl_table random_table[]; | |||
| 152 | #ifdef CONFIG_UNIX98_PTYS | 146 | #ifdef CONFIG_UNIX98_PTYS |
| 153 | extern ctl_table pty_table[]; | 147 | extern ctl_table pty_table[]; |
| 154 | #endif | 148 | #endif |
| 149 | #ifdef CONFIG_INOTIFY | ||
| 150 | extern ctl_table inotify_table[]; | ||
| 151 | #endif | ||
| 155 | 152 | ||
| 156 | #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT | 153 | #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT |
| 157 | int sysctl_legacy_va_layout; | 154 | int sysctl_legacy_va_layout; |
| @@ -957,6 +954,14 @@ static ctl_table fs_table[] = { | |||
| 957 | .mode = 0644, | 954 | .mode = 0644, |
| 958 | .proc_handler = &proc_dointvec, | 955 | .proc_handler = &proc_dointvec, |
| 959 | }, | 956 | }, |
| 957 | #ifdef CONFIG_INOTIFY | ||
| 958 | { | ||
| 959 | .ctl_name = FS_INOTIFY, | ||
| 960 | .procname = "inotify", | ||
| 961 | .mode = 0555, | ||
| 962 | .child = inotify_table, | ||
| 963 | }, | ||
| 964 | #endif | ||
| 960 | #endif | 965 | #endif |
| 961 | { | 966 | { |
| 962 | .ctl_name = KERN_SETUID_DUMPABLE, | 967 | .ctl_name = KERN_SETUID_DUMPABLE, |
| @@ -966,40 +971,6 @@ static ctl_table fs_table[] = { | |||
| 966 | .mode = 0644, | 971 | .mode = 0644, |
| 967 | .proc_handler = &proc_dointvec, | 972 | .proc_handler = &proc_dointvec, |
| 968 | }, | 973 | }, |
| 969 | #ifdef CONFIG_INOTIFY | ||
| 970 | { | ||
| 971 | .ctl_name = INOTIFY_MAX_USER_DEVICES, | ||
| 972 | .procname = "max_user_devices", | ||
| 973 | .data = &inotify_max_user_devices, | ||
| 974 | .maxlen = sizeof(int), | ||
| 975 | .mode = 0644, | ||
| 976 | .proc_handler = &proc_dointvec_minmax, | ||
| 977 | .strategy = &sysctl_intvec, | ||
| 978 | .extra1 = &zero, | ||
| 979 | }, | ||
| 980 | |||
| 981 | { | ||
| 982 | .ctl_name = INOTIFY_MAX_USER_WATCHES, | ||
| 983 | .procname = "max_user_watches", | ||
| 984 | .data = &inotify_max_user_watches, | ||
| 985 | .maxlen = sizeof(int), | ||
| 986 | .mode = 0644, | ||
| 987 | .proc_handler = &proc_dointvec_minmax, | ||
| 988 | .strategy = &sysctl_intvec, | ||
| 989 | .extra1 = &zero, | ||
| 990 | }, | ||
| 991 | |||
| 992 | { | ||
| 993 | .ctl_name = INOTIFY_MAX_QUEUED_EVENTS, | ||
| 994 | .procname = "max_queued_events", | ||
| 995 | .data = &inotify_max_queued_events, | ||
| 996 | .maxlen = sizeof(int), | ||
| 997 | .mode = 0644, | ||
| 998 | .proc_handler = &proc_dointvec_minmax, | ||
| 999 | .strategy = &sysctl_intvec, | ||
| 1000 | .extra1 = &zero | ||
| 1001 | }, | ||
| 1002 | #endif | ||
| 1003 | { .ctl_name = 0 } | 974 | { .ctl_name = 0 } |
| 1004 | }; | 975 | }; |
| 1005 | 976 | ||
