99ab6fdf8c
Following discussions with some kernel folks at All Systems Go! it appears that file descriptors are not really as expensive as they used to be (both memory and performance-wise) and it should thus be OK to allow programs (including unprivileged ones) to have more of them without ill effects. Unfortunately we can't just raise the RLIMIT_NOFILE soft limit globally for all processes, as select() and friends can't handle fds >= 1024, and thus unexpecting programs might fail if they accidently get an fd outside of that range. We can however raise the hard limit, so that programs that need a lot of fds can opt-in into getting fds beyond the 1024 boundary, simply by bumping the soft limit to the now higher hard limit. This is useful for all our client code that accesses the journal, as the journal merging logic might need a lot of fds. Let's add a unified function for bumping the limit in a robust way.
25 lines
727 B
C
25 lines
727 B
C
/* SPDX-License-Identifier: LGPL-2.1+ */
|
|
#pragma once
|
|
|
|
#include <sys/resource.h>
|
|
|
|
#include "macro.h"
|
|
|
|
const char *rlimit_to_string(int i) _const_;
|
|
int rlimit_from_string(const char *s) _pure_;
|
|
int rlimit_from_string_harder(const char *s) _pure_;
|
|
|
|
int setrlimit_closest(int resource, const struct rlimit *rlim);
|
|
int setrlimit_closest_all(const struct rlimit * const *rlim, int *which_failed);
|
|
|
|
int rlimit_parse_one(int resource, const char *val, rlim_t *ret);
|
|
int rlimit_parse(int resource, const char *val, struct rlimit *ret);
|
|
|
|
int rlimit_format(const struct rlimit *rl, char **ret);
|
|
|
|
void rlimit_free_all(struct rlimit **rl);
|
|
|
|
#define RLIMIT_MAKE_CONST(lim) ((struct rlimit) { lim, lim })
|
|
|
|
int rlimit_nofile_bump(int limit);
|