patches/glibc/ports-2.12.1/490-alpha_alpha-add-fdatasync-support.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@2437
     1
2009-07-25  Aurelien Jarno  <aurelien@aurel32.net>
yann@2437
     2
yann@2437
     3
	* sysdeps/unix/sysv/linux/kernel-features.h: define 
yann@2437
     4
	__ASSUME_FDATASYNC. 
yann@2437
     5
	* sysdeps/unix/sysv/linux/fdatasync.c: New file.
yann@2437
     6
	* sysdeps/unix/sysv/linux/Makefile: compile fdatasync.c with
yann@2437
     7
	-fexceptions.
yann@2437
     8
	* sysdeps/unix/sysv/linux/syscalls.list: Remove fdatasync.
yann@2437
     9
yann@2437
    10
 sysdeps/unix/sysv/linux/Makefile          |    1 
yann@2437
    11
 sysdeps/unix/sysv/linux/fdatasync.c       |   69 ++++++++++++++++++++++++++++++
yann@2437
    12
 sysdeps/unix/sysv/linux/kernel-features.h |    6 ++
yann@2437
    13
 sysdeps/unix/sysv/linux/syscalls.list     |    1 
yann@2437
    14
 4 files changed, 76 insertions(+), 1 deletion(-)
yann@2437
    15
yann@2437
    16
diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.12.1/sysdeps/unix/sysv/linux/Makefile
yann@2437
    17
--- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/Makefile	2009-03-02 17:15:13.000000000 +0100
yann@2437
    18
+++ glibc-2.12.1/sysdeps/unix/sysv/linux/Makefile	2009-11-13 00:51:04.000000000 +0100
yann@2437
    19
@@ -20,6 +20,7 @@
yann@2437
    20
 		   setfsuid setfsgid makedev epoll_pwait signalfd \
yann@2437
    21
 		   eventfd eventfd_read eventfd_write
yann@2437
    22
 
yann@2437
    23
+CFLAGS-fdatasync.c = -fexceptions
yann@2437
    24
 CFLAGS-gethostid.c = -fexceptions
yann@2437
    25
 
yann@2437
    26
 sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
yann@2437
    27
diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.12.1/sysdeps/unix/sysv/linux/fdatasync.c
yann@2437
    28
--- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/fdatasync.c	1970-01-01 01:00:00.000000000 +0100
yann@2437
    29
+++ glibc-2.12.1/sysdeps/unix/sysv/linux/fdatasync.c	2009-11-13 00:51:04.000000000 +0100
yann@2437
    30
@@ -0,0 +1,69 @@
yann@2437
    31
+/* fdatasync -- synchronize at least the data part of a file with 
yann@2437
    32
+   the underlying media. Linux version. 
yann@2437
    33
+
yann@2437
    34
+   Copyright (C) 2007 Free Software Foundation, Inc.
yann@2437
    35
+   This file is part of the GNU C Library.
yann@2437
    36
+
yann@2437
    37
+   The GNU C Library is free software; you can redistribute it and/or
yann@2437
    38
+   modify it under the terms of the GNU Lesser General Public
yann@2437
    39
+   License as published by the Free Software Foundation; either
yann@2437
    40
+   version 2.1 of the License, or (at your option) any later version.
yann@2437
    41
+
yann@2437
    42
+   The GNU C Library is distributed in the hope that it will be useful,
yann@2437
    43
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
yann@2437
    44
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
yann@2437
    45
+   Lesser General Public License for more details.
yann@2437
    46
+
yann@2437
    47
+   You should have received a copy of the GNU Lesser General Public
yann@2437
    48
+   License along with the GNU C Library; if not, write to the Free
yann@2437
    49
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
yann@2437
    50
+   02111-1307 USA.  */
yann@2437
    51
+
yann@2437
    52
+#include <errno.h>
yann@2437
    53
+#include <unistd.h>
yann@2437
    54
+
yann@2437
    55
+#include <sysdep-cancel.h>
yann@2437
    56
+#include <sys/syscall.h>
yann@2437
    57
+#include <bp-checks.h>
yann@2437
    58
+
yann@2437
    59
+#include <kernel-features.h>
yann@2437
    60
+
yann@2437
    61
+#if defined __NR_fdatasync && !defined __ASSUME_FDATASYNC
yann@2437
    62
+static int __have_no_fdatasync;
yann@2437
    63
+#endif
yann@2437
    64
+
yann@2437
    65
+static int
yann@2437
    66
+do_fdatasync (int fd)
yann@2437
    67
+{
yann@2437
    68
+#ifdef __ASSUME_FDATASYNC
yann@2437
    69
+  return INLINE_SYSCALL (fdatasync, 1, fd);
yann@2437
    70
+#elif defined __NR_fdatasync
yann@2437
    71
+  if (!__builtin_expect (__have_no_fdatasync, 0))
yann@2437
    72
+    {
yann@2437
    73
+      int result = INLINE_SYSCALL (fdatasync, 1, fd);
yann@2437
    74
+      if (__builtin_expect (result, 0) != -1 || errno != ENOSYS)
yann@2437
    75
+	return result;
yann@2437
    76
+
yann@2437
    77
+      __have_no_fdatasync = 1;
yann@2437
    78
+    }
yann@2437
    79
+#endif
yann@2437
    80
+  return INLINE_SYSCALL (fsync, 1, fd);
yann@2437
    81
+}
yann@2437
    82
+
yann@2437
    83
+int
yann@2437
    84
+__fdatasync (int fd)
yann@2437
    85
+{
yann@2437
    86
+  if (SINGLE_THREAD_P)
yann@2437
    87
+    return do_fdatasync (fd);
yann@2437
    88
+
yann@2437
    89
+  int oldtype = LIBC_CANCEL_ASYNC ();
yann@2437
    90
+
yann@2437
    91
+  int result = do_fdatasync (fd);
yann@2437
    92
+
yann@2437
    93
+  LIBC_CANCEL_RESET (oldtype);
yann@2437
    94
+
yann@2437
    95
+  return result;
yann@2437
    96
+}
yann@2437
    97
+
yann@2437
    98
+weak_alias (__fdatasync, fdatasync)
yann@2437
    99
+
yann@2437
   100
diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h
yann@2437
   101
--- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h	2009-11-13 00:50:45.000000000 +0100
yann@2437
   102
+++ glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h	2009-11-13 00:51:04.000000000 +0100
yann@2437
   103
@@ -459,6 +459,12 @@
yann@2437
   104
 # define __ASSUME_FUTEX_LOCK_PI	1
yann@2437
   105
 #endif
yann@2437
   106
 
yann@2437
   107
+/* Support for fsyncdata syscall was added in 2.6.22 on alpha, but it
yann@2437
   108
+   was already present in 2.0 kernels on other architectures.  */
yann@2437
   109
+#if (!defined __alpha || __LINUX_KERNEL_VERSION >= 0x020616)
yann@2437
   110
+# define __ASSUME_FDATASYNC	1
yann@2437
   111
+#endif
yann@2437
   112
+
yann@2437
   113
 /* Support for utimensat syscall was added in 2.6.22, on SH
yann@2437
   114
    only after 2.6.22-rc1.  */
yann@2437
   115
 #if __LINUX_KERNEL_VERSION >= 0x020616 \
yann@2437
   116
diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/syscalls.list glibc-2.12.1/sysdeps/unix/sysv/linux/syscalls.list
yann@2437
   117
--- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/syscalls.list	2008-08-02 01:29:08.000000000 +0200
yann@2437
   118
+++ glibc-2.12.1/sysdeps/unix/sysv/linux/syscalls.list	2009-11-13 00:51:04.000000000 +0100
yann@2437
   119
@@ -11,7 +11,6 @@
yann@2437
   120
 epoll_create1	EXTRA	epoll_create1	i:i	epoll_create1
yann@2437
   121
 epoll_ctl	EXTRA	epoll_ctl	i:iiip	epoll_ctl
yann@2437
   122
 epoll_wait	EXTRA	epoll_wait	Ci:ipii	epoll_wait
yann@2437
   123
-fdatasync	-	fdatasync	Ci:i	fdatasync
yann@2437
   124
 flock		-	flock		i:ii	__flock		flock
yann@2437
   125
 fork		-	fork		i:	__libc_fork	__fork fork
yann@2437
   126
 get_kernel_syms	EXTRA	get_kernel_syms	i:p	get_kernel_syms