lkml.org 
[lkml]   [2005]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 0/3] *at syscalls: Intro
Ulrich Drepper wrote:
> 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.

Definitely gets my ACK, for my own motivations: I want to create
race-free cp(1)/mv(1)/rm(1) utilities for my posixutils project.

It would be nice to add the additional argument to path_lookup(), rather
than calling do_path_lookup() everywhere.

Jeff



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-12-16 01:35    [from the cache]
©2003-2011 Jasper Spaans