Re: [PATCH 1/2] open: add close_range()
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date: 2019-05-21 13:39:58
Also in:
linux-fsdevel, lkml
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date: 2019-05-21 13:39:58
Also in:
linux-fsdevel, lkml
On 21/05/2019 13.34, Christian Brauner wrote:
The performance is striking. For good measure, comparing the following
simple close_all_fds() userspace implementation that is essentially just
glibc's version in [6]:
static int close_all_fds(void)
{
DIR *dir;
struct dirent *direntp;
dir = opendir("/proc/self/fd");
if (!dir)
return -1;
while ((direntp = readdir(dir))) {
int fd;
if (strcmp(direntp->d_name, ".") == 0)
continue;
if (strcmp(direntp->d_name, "..") == 0)
continue;
fd = atoi(direntp->d_name);
if (fd == 0 || fd == 1 || fd == 2)
continue;
close(fd);
}
closedir(dir); /* cannot fail */
return 0;
}Before anybody copy-pastes this, please note that it lacks a check for fd == dirfd(dir). If all of /proc/self/fd is returned in the first getdents() syscall one won't notice, but... Rasmus