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