[igt-dev] [PATCH i-g-t v2 2/2] igt/gem_fd_exhaustion: Modify fs.nr_open for duration of the test
Karol Krol
karol.krol at intel.com
Mon Mar 5 17:36:42 UTC 2018
We also need to adjust fs.nr_open to allow setting rlimit equal to
fs.file-max. Otherwise we're getting EPREM on setrlimit().
Signed-off-by: Karol Krol <karol.krol at intel.com>
---
I'm still working on getting rid of e-mail footer. I'll appreciate reviews.
---
tests/gem_fd_exhaustion.c | 49 ++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 42 insertions(+), 7 deletions(-)
diff --git a/tests/gem_fd_exhaustion.c b/tests/gem_fd_exhaustion.c
index fdcb7f36..d04cdd09 100644
--- a/tests/gem_fd_exhaustion.c
+++ b/tests/gem_fd_exhaustion.c
@@ -33,17 +33,44 @@
#include <fcntl.h>
#include <limits.h>
+unsigned int original_nr_open;
+
+static int read_sysctl(const char *path)
+{
+ unsigned int val;
+ FILE *f = fopen(path, "r");
+
+ if (f) {
+ igt_assert(fscanf(f, "%u", &val) == 1);
+ fclose(f);
+ return val;
+ }
+ return -errno;
+}
+
+static int write_sysctl(const char *path, unsigned int val)
+{
+ FILE *f = fopen(path, "w");
+
+ if (f) {
+ igt_assert(fprintf(f, "%u", val));
+ fclose(f);
+ return 0;
+ }
+ return -errno;
+}
+
static bool allow_unlimited_files(void)
{
+ unsigned int nofile_rlim = 1024*1024;
struct rlimit rlim;
- unsigned nofile_rlim = 1024*1024;
+ unsigned int buf;
- FILE *file = fopen("/proc/sys/fs/file-max", "r");
- if (file) {
- igt_assert(fscanf(file, "%u", &nofile_rlim) == 1);
- igt_info("System limit for open files is %u\n", nofile_rlim);
- fclose(file);
- }
+ buf = read_sysctl("/proc/sys/fs/file-max");
+ if (buf > 0)
+ nofile_rlim = buf;
+ original_nr_open = read_sysctl("/proc/sys/fs/nr_open");
+ igt_assert(write_sysctl("/proc/sys/fs/nr_open", nofile_rlim) == 0);
if (getrlimit(RLIMIT_NOFILE, &rlim))
return false;
@@ -53,6 +80,12 @@ static bool allow_unlimited_files(void)
return setrlimit(RLIMIT_NOFILE, &rlim) == 0;
}
+static void restore_original_sysctl(void)
+{
+ if (original_nr_open > 0)
+ write_sysctl("/proc/sys/fs/nr_open", original_nr_open);
+}
+
igt_simple_main
{
int fd;
@@ -61,6 +94,8 @@ igt_simple_main
fd = drm_open_driver(DRIVER_INTEL);
+ igt_install_exit_handler(restore_original_sysctl);
+
igt_fork(n, 1) {
igt_drop_root();
--
2.14.3
--------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP 957-07-52-316 | Kapital zakladowy 200.000 PLN.
Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i moze zawierac informacje poufne. W razie przypadkowego otrzymania tej wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; jakiekolwiek
przegladanie lub rozpowszechnianie jest zabronione.
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). If you are not the intended recipient, please contact the sender and delete all copies; any review or distribution by
others is strictly prohibited.
More information about the igt-dev
mailing list