diff options
Diffstat (limited to 'libc/sysdeps/unix/sysv')
24 files changed, 663 insertions, 157 deletions
diff --git a/libc/sysdeps/unix/sysv/linux/Makefile b/libc/sysdeps/unix/sysv/linux/Makefile index ba572350a..84679c2e3 100644 --- a/libc/sysdeps/unix/sysv/linux/Makefile +++ b/libc/sysdeps/unix/sysv/linux/Makefile @@ -96,7 +96,7 @@ generated += syscall-list.h syscall-list.d endif ifeq ($(subdir),time) -sysdep_headers += sys/timex.h +sysdep_headers += sys/timex.h bits/timex.h sysdep_routines += ntp_gettime ntp_gettimex endif diff --git a/libc/sysdeps/unix/sysv/linux/Versions b/libc/sysdeps/unix/sysv/linux/Versions index c66e04fee..29099dc5c 100644 --- a/libc/sysdeps/unix/sysv/linux/Versions +++ b/libc/sysdeps/unix/sysv/linux/Versions @@ -154,6 +154,11 @@ libc { fanotify_init; fanotify_mark; } + GLIBC_2.14 { + clock_adjtime; + + name_to_handle_at; open_by_handle_at; + } GLIBC_PRIVATE { # functions used in other libraries __syscall_rt_sigqueueinfo; diff --git a/libc/sysdeps/unix/sysv/linux/bits/time.h b/libc/sysdeps/unix/sysv/linux/bits/time.h new file mode 100644 index 000000000..02a05114f --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/bits/time.h @@ -0,0 +1,93 @@ +/* System-dependent timing definitions. Linux version. + Copyright (C) 1996,1997,1999-2003,2010,2011 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* + * Never include this file directly; use <time.h> instead. + */ + +#if defined __need_timeval || defined __USE_GNU +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +# include <bits/types.h> + +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + __time_t tv_sec; /* Seconds. */ + __suseconds_t tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif + +#ifndef __need_timeval +# ifndef _BITS_TIME_H +# define _BITS_TIME_H 1 + +/* ISO/IEC 9899:1990 7.12.1: <time.h> + The macro `CLOCKS_PER_SEC' is the number per second of the value + returned by the `clock' function. */ +/* CAE XSH, Issue 4, Version 2: <time.h> + The value of CLOCKS_PER_SEC is required to be 1 million on all + XSI-conformant systems. */ +# define CLOCKS_PER_SEC 1000000l + +# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K +/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK + presents the real value for clock ticks per second for the system. */ +# include <bits/types.h> +extern long int __sysconf (int); +# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */ +# endif + +# ifdef __USE_POSIX199309 +/* Identifier for system-wide realtime clock. */ +# define CLOCK_REALTIME 0 +/* Monotonic system-wide clock. */ +# define CLOCK_MONOTONIC 1 +/* High-resolution timer from the CPU. */ +# define CLOCK_PROCESS_CPUTIME_ID 2 +/* Thread-specific CPU-time clock. */ +# define CLOCK_THREAD_CPUTIME_ID 3 +/* Monotonic system-wide clock, not adjusted for frequency scaling. */ +# define CLOCK_MONOTONIC_RAW 4 +/* Identifier for system-wide realtime clock, updated only on ticks. */ +# define CLOCK_REALTIME_COARSE 5 +/* Monotonic system-wide clock, updated only on ticks. */ +# define CLOCK_MONOTONIC_COARSE 6 + +/* Flag to indicate time is absolute. */ +# define TIMER_ABSTIME 1 +# endif + +# ifdef __USE_GNU +# include <bits/timex.h> + +__BEGIN_DECLS + +/* Tune a POSIX clock. */ +extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW; + +__END_DECLS +# endif /* use GNU */ + +# endif /* bits/time.h */ +#endif + +#undef __need_timeval diff --git a/libc/sysdeps/unix/sysv/linux/bits/timex.h b/libc/sysdeps/unix/sysv/linux/bits/timex.h new file mode 100644 index 000000000..67de67e1c --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/bits/timex.h @@ -0,0 +1,108 @@ +/* Copyright (C) 1995-1997,1999,2007,2009,2011 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _BITS_TIMEX_H +#define _BITS_TIMEX_H 1 + +/* These definitions from linux/timex.h as of 2.6.30. */ + +struct timex +{ + unsigned int modes; /* mode selector */ + long int offset; /* time offset (usec) */ + long int freq; /* frequency offset (scaled ppm) */ + long int maxerror; /* maximum error (usec) */ + long int esterror; /* estimated error (usec) */ + int status; /* clock command/status */ + long int constant; /* pll time constant */ + long int precision; /* clock precision (usec) (read only) */ + long int tolerance; /* clock frequency tolerance (ppm) (read only) */ + struct timeval time; /* (read only) */ + long int tick; /* (modified) usecs between clock ticks */ + + long int ppsfreq; /* pps frequency (scaled ppm) (ro) */ + long int jitter; /* pps jitter (us) (ro) */ + int shift; /* interval duration (s) (shift) (ro) */ + long int stabil; /* pps stability (scaled ppm) (ro) */ + long int jitcnt; /* jitter limit exceeded (ro) */ + long int calcnt; /* calibration intervals (ro) */ + long int errcnt; /* calibration errors (ro) */ + long int stbcnt; /* stability limit exceeded (ro) */ + + int tai; /* TAI offset (ro) */ + + /* ??? */ + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; int :32; + int :32; int :32; int :32; +}; + +/* Mode codes (timex.mode) */ +#define ADJ_OFFSET 0x0001 /* time offset */ +#define ADJ_FREQUENCY 0x0002 /* frequency offset */ +#define ADJ_MAXERROR 0x0004 /* maximum time error */ +#define ADJ_ESTERROR 0x0008 /* estimated time error */ +#define ADJ_STATUS 0x0010 /* clock status */ +#define ADJ_TIMECONST 0x0020 /* pll time constant */ +#define ADJ_TAI 0x0080 /* set TAI offset */ +#define ADJ_MICRO 0x1000 /* select microsecond resolution */ +#define ADJ_NANO 0x2000 /* select nanosecond resolution */ +#define ADJ_TICK 0x4000 /* tick value */ +#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ +#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ + +/* xntp 3.4 compatibility names */ +#define MOD_OFFSET ADJ_OFFSET +#define MOD_FREQUENCY ADJ_FREQUENCY +#define MOD_MAXERROR ADJ_MAXERROR +#define MOD_ESTERROR ADJ_ESTERROR +#define MOD_STATUS ADJ_STATUS +#define MOD_TIMECONST ADJ_TIMECONST +#define MOD_CLKB ADJ_TICK +#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ +#define MOD_TAI ADJ_TAI +#define MOD_MICRO ADJ_MICRO +#define MOD_NANO ADJ_NANO + + +/* Status codes (timex.status) */ +#define STA_PLL 0x0001 /* enable PLL updates (rw) */ +#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ +#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ +#define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ + +#define STA_INS 0x0010 /* insert leap (rw) */ +#define STA_DEL 0x0020 /* delete leap (rw) */ +#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ +#define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ + +#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ +#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ +#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ +#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ + +#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ +#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ +#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ +#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ + +/* Read-only bits */ +#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ + STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) + +#endif /* bits/timex.h */ diff --git a/libc/sysdeps/unix/sysv/linux/fallocate.c b/libc/sysdeps/unix/sysv/linux/fallocate.c index dc2b4e92c..a7d3ff079 100644 --- a/libc/sysdeps/unix/sysv/linux/fallocate.c +++ b/libc/sysdeps/unix/sysv/linux/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <fcntl.h> -#include <sysdep.h> +#include <sysdep-cancel.h> /* Reserve storage for the data of the file associated with FD. */ @@ -26,9 +26,21 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR (offset >> 31, offset), - __LONG_LONG_PAIR (len >> 31, len)); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/fallocate64.c b/libc/sysdeps/unix/sysv/linux/fallocate64.c index 751a7b227..5cfd76d39 100644 --- a/libc/sysdeps/unix/sysv/linux/fallocate64.c +++ b/libc/sysdeps/unix/sysv/linux/fallocate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <fcntl.h> -#include <sysdep.h> +#include <sysdep-cancel.h> /* Reserve storage for the data of the file associated with FD. */ @@ -26,11 +26,25 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 6, fd, mode, - __LONG_LONG_PAIR ((long int) (offset >> 32), - (long int) offset), - __LONG_LONG_PAIR ((long int) (len >> 32), - (long int) len)); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR ((long int) (offset >> 32), + (long int) offset), + __LONG_LONG_PAIR ((long int) (len >> 32), + (long int) len)); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 6, fd, mode, + __LONG_LONG_PAIR ((long int) (offset >> 32), + (long int) offset), + __LONG_LONG_PAIR ((long int) (len >> 32), + (long int) len)); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/i386/Makefile b/libc/sysdeps/unix/sysv/linux/i386/Makefile index f52ee89f0..fc5a524eb 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/Makefile +++ b/libc/sysdeps/unix/sysv/linux/i386/Makefile @@ -6,7 +6,10 @@ endif ifeq ($(subdir),elf) sysdep-others += lddlibc4 install-bin += lddlibc4 +endif +ifeq ($(subdir),io) +sysdep_routines += call_sync_file_range endif ifeq ($(subdir),resource) diff --git a/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h index 944a3209b..6ff59bc42 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -232,6 +233,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -248,20 +262,32 @@ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -278,6 +304,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.S b/libc/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S index 8544703d5..fb0ab492c 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.S +++ b/libc/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S @@ -1,5 +1,5 @@ /* Selective file content synch'ing. - Copyright (C) 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,7 +23,7 @@ .text -ENTRY (sync_file_range) +ENTRY (__call_sync_file_range) #ifdef __NR_sync_file_range pushl %ebx cfi_adjust_cfa_offset (4) @@ -69,4 +69,4 @@ ENTRY (sync_file_range) #endif L(pseudo_end): ret -PSEUDO_END (sync_file_range) +PSEUDO_END (__call_sync_file_range) diff --git a/libc/sysdeps/unix/sysv/linux/i386/fallocate.c b/libc/sysdeps/unix/sysv/linux/i386/fallocate.c index 1434a833f..33e20753d 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/fallocate.c +++ b/libc/sysdeps/unix/sysv/linux/i386/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <fcntl.h> -#include <sysdep.h> +#include <sysdep-cancel.h> extern int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) @@ -30,7 +30,17 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - int err = __call_fallocate (fd, mode, offset, len); + int err; + if (SINGLE_THREAD_P) + err = __call_fallocate (fd, mode, offset, len); + else + { + int oldtype = LIBC_CANCEL_ASYNC (); + + err = __call_fallocate (fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + } if (__builtin_expect (err, 0)) { __set_errno (err); diff --git a/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c b/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c index 063bab06e..83372a92f 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c +++ b/libc/sysdeps/unix/sysv/linux/i386/fallocate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <fcntl.h> -#include <sysdep.h> +#include <sysdep-cancel.h> extern int __call_fallocate (int fd, int mode, __off64_t offset, __off64_t len) @@ -30,7 +30,17 @@ int fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) { #ifdef __NR_fallocate - int err = __call_fallocate (fd, mode, offset, len); + int err; + if (SINGLE_THREAD_P) + err = __call_fallocate (fd, mode, offset, len); + else + { + int oldtype = LIBC_CANCEL_ASYNC (); + + err = __call_fallocate (fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + } if (__builtin_expect (err, 0)) { __set_errno (err); diff --git a/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c b/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c new file mode 100644 index 000000000..c10e99604 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/i386/sync_file_range.c @@ -0,0 +1,44 @@ +/* Selective file content synch'ing. + Copyright (C) 2006, 2007, 2011 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <fcntl.h> +#include <sysdep-cancel.h> + + +extern int __call_sync_file_range (int fd, off64_t offset, off64_t nbytes, + unsigned int flags) + attribute_hidden; + + +int +sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) +{ + if (SINGLE_THREAD_P) + return __call_sync_file_range (fd, from, to, flags); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = __call_sync_file_range (fd, from, to, flags); + + LIBC_CANCEL_RESET (oldtype); + + return result; +} diff --git a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c index 4ea1a2bf5..1f5d3b06b 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c +++ b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c @@ -231,6 +231,8 @@ intel_check_word (int name, unsigned int value, bool *has_level_2, assert (offset == 2); return (ebx & 0xfff) + 1; } + + ++round; } /* There is no other cache information anywhere else. */ break; diff --git a/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h index 2189a9722..72f4b6cea 100644 --- a/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/IA64. - Copyright (C) 1999, 2000, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1999, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 @@ -227,6 +228,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -238,25 +252,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -273,6 +302,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h index ea760f64a..e533ed1b6 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/PowerPC. - Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,7 @@ #ifdef __USE_GNU # define O_DIRECT 0400000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h index 05c7a3ba8..df039685a 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2000-2002,2004,2006,2007,2009,2010 + Copyright (C) 2000-2002,2004,2006,2007,2009,2010,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 @@ -253,6 +254,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -264,25 +278,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -299,6 +328,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h index df21f6af4..bf2aa83c1 100644 --- a/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h @@ -1,5 +1,5 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007, 2009, 2010 +/* O_*, F_*, FD_* bit values for Linux/SH. + Copyright (C) 1995-1998, 2000, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -233,6 +234,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -244,25 +258,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -279,6 +308,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h index bf8f3d60e..1271a12ce 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/SPARC. - Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010 + Copyright (C) 1995-1998, 2000, 2003, 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -52,6 +52,7 @@ #ifdef __USE_GNU # define O_DIRECT 0x100000 /* direct disk access hint */ # define O_NOATIME 0x200000 /* Do not set atime. */ +# define O_PATH 0x1000000 /* Resolve pathname but do not open file. */ #endif #ifdef __USE_LARGEFILE64 @@ -243,6 +244,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -254,7 +268,10 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); @@ -263,16 +280,25 @@ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -289,6 +315,19 @@ extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + #endif __END_DECLS diff --git a/libc/sysdeps/unix/sysv/linux/sync_file_range.c b/libc/sysdeps/unix/sysv/linux/sync_file_range.c index 41e08e028..1b20d6ce0 100644 --- a/libc/sysdeps/unix/sysv/linux/sync_file_range.c +++ b/libc/sysdeps/unix/sysv/linux/sync_file_range.c @@ -1,5 +1,5 @@ /* Selective file content synch'ing. - Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -21,7 +21,7 @@ #include <fcntl.h> #include <sys/types.h> -#include <sysdep.h> +#include <sysdep-cancel.h> #include <sys/syscall.h> @@ -29,18 +29,43 @@ int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - return INLINE_SYSCALL (sync_file_range, 6, fd, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (sync_file_range, 6, fd, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (sync_file_range, 6, fd, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to), + flags); + + LIBC_CANCEL_RESET (oldtype); + + return result; } #elif defined __NR_sync_file_range2 int sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) { - return INLINE_SYSCALL (sync_file_range2, 6, fd, flags, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (sync_file_range2, 6, fd, flags, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (sync_file_range2, 6, fd, flags, + __LONG_LONG_PAIR ((long) (from >> 32), (long) from), + __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); + + LIBC_CANCEL_RESET (oldtype); + + return result; } #else int diff --git a/libc/sysdeps/unix/sysv/linux/sys/timex.h b/libc/sysdeps/unix/sysv/linux/sys/timex.h index 13b94d6f4..de61bb54d 100644 --- a/libc/sysdeps/unix/sysv/linux/sys/timex.h +++ b/libc/sysdeps/unix/sysv/linux/sys/timex.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1997, 1999, 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1995-1997,1999,2007,2009,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -24,6 +24,8 @@ /* These definitions from linux/timex.h as of 2.6.30. */ +#include <bits/timex.h> + #define NTP_API 4 /* NTP API version */ struct ntptimeval @@ -39,90 +41,6 @@ struct ntptimeval long int __unused4; }; -struct timex -{ - unsigned int modes; /* mode selector */ - long int offset; /* time offset (usec) */ - long int freq; /* frequency offset (scaled ppm) */ - long int maxerror; /* maximum error (usec) */ - long int esterror; /* estimated error (usec) */ - int status; /* clock command/status */ - long int constant; /* pll time constant */ - long int precision; /* clock precision (usec) (read only) */ - long int tolerance; /* clock frequency tolerance (ppm) (read only) */ - struct timeval time; /* (read only) */ - long int tick; /* (modified) usecs between clock ticks */ - - long int ppsfreq; /* pps frequency (scaled ppm) (ro) */ - long int jitter; /* pps jitter (us) (ro) */ - int shift; /* interval duration (s) (shift) (ro) */ - long int stabil; /* pps stability (scaled ppm) (ro) */ - long int jitcnt; /* jitter limit exceeded (ro) */ - long int calcnt; /* calibration intervals (ro) */ - long int errcnt; /* calibration errors (ro) */ - long int stbcnt; /* stability limit exceeded (ro) */ - - int tai; /* TAI offset (ro) */ - - /* ??? */ - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; -}; - -/* Mode codes (timex.mode) */ -#define ADJ_OFFSET 0x0001 /* time offset */ -#define ADJ_FREQUENCY 0x0002 /* frequency offset */ -#define ADJ_MAXERROR 0x0004 /* maximum time error */ -#define ADJ_ESTERROR 0x0008 /* estimated time error */ -#define ADJ_STATUS 0x0010 /* clock status */ -#define ADJ_TIMECONST 0x0020 /* pll time constant */ -#define ADJ_TAI 0x0080 /* set TAI offset */ -#define ADJ_MICRO 0x1000 /* select microsecond resolution */ -#define ADJ_NANO 0x2000 /* select nanosecond resolution */ -#define ADJ_TICK 0x4000 /* tick value */ -#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ -#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ - -/* xntp 3.4 compatibility names */ -#define MOD_OFFSET ADJ_OFFSET -#define MOD_FREQUENCY ADJ_FREQUENCY -#define MOD_MAXERROR ADJ_MAXERROR -#define MOD_ESTERROR ADJ_ESTERROR -#define MOD_STATUS ADJ_STATUS -#define MOD_TIMECONST ADJ_TIMECONST -#define MOD_CLKB ADJ_TICK -#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ -#define MOD_TAI ADJ_TAI -#define MOD_MICRO ADJ_MICRO -#define MOD_NANO ADJ_NANO - - -/* Status codes (timex.status) */ -#define STA_PLL 0x0001 /* enable PLL updates (rw) */ -#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ -#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ -#define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ - -#define STA_INS 0x0010 /* insert leap (rw) */ -#define STA_DEL 0x0020 /* delete leap (rw) */ -#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ -#define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ - -#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ -#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ -#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ -#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ - -#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ -#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ -#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ -#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ - -/* Read-only bits */ -#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ - STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) - /* Clock states (time_state) */ #define TIME_OK 0 /* clock synchronized, no leap second */ #define TIME_INS 1 /* insert leap second */ diff --git a/libc/sysdeps/unix/sysv/linux/syscalls.list b/libc/sysdeps/unix/sysv/linux/syscalls.list index 0f3345490..051303f07 100644 --- a/libc/sysdeps/unix/sysv/linux/syscalls.list +++ b/libc/sysdeps/unix/sysv/linux/syscalls.list @@ -4,6 +4,7 @@ adjtimex adjtime adjtimex i:p __adjtimex adjtimex ntp_adjtime __adjtimex_interna bdflush EXTRA bdflush i:ii bdflush capget EXTRA capget i:pp capget capset EXTRA capset i:pp capset +clock_adjtime EXTRA clock_adjtime i:ip clock_adjtime creat - creat Ci:si __libc_creat creat create_module EXTRA create_module 3 create_module delete_module EXTRA delete_module 3 delete_module @@ -103,3 +104,6 @@ timerfd_settime EXTRA timerfd_settime i:iipp timerfd_settime timerfd_gettime EXTRA timerfd_gettime i:ip timerfd_gettime fanotify_init EXTRA fanotify_init i:ii fanotify_init + +name_to_handle_at EXTRA name_to_handle_at i:isppi name_to_handle_at +open_by_handle_at EXTRA open_by_handle_at Ci:ipi open_by_handle_at diff --git a/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c b/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c index 3e8954f0b..fc08b7be5 100644 --- a/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c +++ b/libc/sysdeps/unix/sysv/linux/wordsize-64/fallocate.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <fcntl.h> -#include <sysdep.h> +#include <sysdep-cancel.h> /* Reserve storage for the data of the file associated with FD. */ @@ -26,7 +26,17 @@ int fallocate (int fd, int mode, __off_t offset, __off_t len) { #ifdef __NR_fallocate - return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + int result; + int oldtype = LIBC_CANCEL_ASYNC (); + + result = INLINE_SYSCALL (fallocate, 4, fd, mode, offset, len); + + LIBC_CANCEL_RESET (oldtype); + + return result; #else __set_errno (ENOSYS); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list b/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list index fda3db1de..74732ab98 100644 --- a/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list +++ b/libc/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list @@ -14,7 +14,7 @@ getrlimit - getrlimit i:ip __getrlimit getrlimit getrlimit64 setrlimit - setrlimit i:ip __setrlimit setrlimit setrlimit64 readahead - readahead i:iii __readahead readahead sendfile - sendfile i:iipi sendfile sendfile64 -sync_file_range - sync_file_range i:iiii sync_file_range +sync_file_range - sync_file_range Ci:iiii sync_file_range creat - creat Ci:si __libc_creat creat creat64 open - open Ci:siv __libc_open __open open __open64 open64 prlimit EXTRA prlimit64 i:iipp prlimit prlimit64 diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h index ac029fdda..7f18562c1 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/x86-64. - Copyright (C) 2001,2002,2004,2006,2007,2009,2010 + Copyright (C) 2001,2002,2004,2006,2007,2009,2010,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -54,6 +54,7 @@ #ifdef __USE_GNU # define O_DIRECT 040000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_PATH 010000000 /* Resolve pathname but do not open file. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -247,6 +248,19 @@ struct f_owner_ex we splice from/to). */ # define SPLICE_F_MORE 4 /* Expect more data. */ # define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ + + +/* File handle structure. */ +struct file_handle +{ + unsigned int handle_bytes; + int handle_type; + /* File identifier. */ + unsigned char f_handle[0]; +}; + +/* Maximum handle size (for now). */ +# define MAX_HANDLE_SZ 128 #endif __BEGIN_DECLS @@ -258,25 +272,40 @@ extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) __THROW; -/* Selective file content synch'ing. */ +/* Selective file content synch'ing. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, unsigned int __flags); -/* Splice address range into a pipe. */ +/* Splice address range into a pipe. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, size_t __count, unsigned int __flags); -/* Splice two files together. */ +/* Splice two files together. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, __off64_t *__offout, size_t __len, unsigned int __flags); -/* In-kernel implementation of tee for pipe buffers. */ +/* In-kernel implementation of tee for pipe buffers. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ extern ssize_t tee (int __fdin, int __fdout, size_t __len, unsigned int __flags); -/* Reserve storage for the data of the file associated with FD. */ +/* Reserve storage for the data of the file associated with FD. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ # ifndef __USE_FILE_OFFSET64 extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else @@ -292,6 +321,20 @@ extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, extern int fallocate64 (int __fd, int __mode, __off64_t __offset, __off64_t __len); # endif -#endif + + +/* Map file name to file handle. */ +extern int name_to_handle_at (int __dfd, const char *__name, + struct file_handle *__handle, int *__mnt_id, + int __flags) __THROW; + +/* Open file using the file handle. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, + int __flags); + +#endif /* use GNU */ __END_DECLS |