Here is a series of patches which introduce in total 11 new system calls
which take a file descriptor/filename pair instead of a single file name.
These functions, openat etc, have been discussed on numerous occasions.
They are needed to implement race-free filesystem traversal, they are
necessary to implement a virtual per-thread current working directory
(think multi-threaded backup software), etc.
We have in glibc today implementations of the interfaces which use the
/proc/self/fd magic. But this code is rather expensive. Here are some
results (similar to what Jim Meyering posted before):
The test creates a deep directory hierarchy on a tmpfs filesystem.
Then rm -fr is used to remove all directories. Without syscall support
I get this:
real 0m31.921s
user 0m0.688s
sys 0m31.234s
With syscall support the results are much better:
real 0m20.699s
user 0m0.536s
sys 0m20.149s
The implemenation is really small:
arch/i386/kernel/syscall_table.S | 11 ++
arch/x86_64/ia32/ia32entry.S | 11 ++
fs/compat.c | 48 +++++++++--
fs/exec.c | 2
fs/namei.c | 167 ++++++++++++++++++++++++++++++---------
fs/open.c | 60 +++++++++++---
fs/stat.c | 54 ++++++++++--
include/asm-i386/unistd.h | 13 ++-
include/asm-x86_64/ia32_unistd.h | 13 ++-
include/asm-x86_64/unistd.h | 24 +++++
include/linux/fcntl.h | 7 +
include/linux/fs.h | 7 +
include/linux/namei.h | 7 -
include/linux/time.h | 2
14 files changed, 355 insertions(+), 71 deletions(-)
I've split the patch in three parts. The first part is the actual
code change. It mostly consists of passing down an additional parameter
with a file descriptor and add wrapper functions which pass down the
default parameter AT_FDCWD. Three new constants are defined in
<linux/fcntl.h> which must correspond to the values already in use
in glibc. In a few cases I've modified some code which would not
necesarily need changing but the change makes it a bit more efficient
in presence of the wrapper functions.
The real change needed is the additional else-clause in what is now
do_path_lookup. That's it.
The other two patches contain the syscall definitions for x86 and x86-64.
I've tested the code on x86-64, including the ia32 compat code. Because
there is no architecture specific change all should work well on other
archs once the syscalls are added.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]