We have at least two places in qemu where we're closing all possible file
descriptors, - in async-teardown.c and in net/tap.c. While async-teardown
one uses either close_range() or readdir(/proc/self/fd), the two calls in
net/tap.c loops from 3 to RLIMIT_NOFILE, which might be quite slow, and
it actually *is* slow on some systems (eg, just qemu-system-x86_64 startup
with a tap device is very slow on alpine linux).
While for net/tap.c, maybe the better fix is to get rid of this closing
entirely and use O_CLOEXEC instead, this needs to be prepared at first,
while we alredy have almost ready-to-be-used implementation which only
needs to be moved into a common place.
Michael Tokarev (2):
close_all_open_fd(): move to oslib-posix.c
net/tap: use os_close_all_open_fd() instead of open-coding it
include/sysemu/os-posix.h | 1 +
net/tap.c | 15 ++-------------
system/async-teardown.c | 37 +------------------------------------
util/oslib-posix.c | 36 ++++++++++++++++++++++++++++++++++++
4 files changed, 40 insertions(+), 49 deletions(-)
--
2.39.2