This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.16-ports-merge-263-g563c840


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  563c840564dce77de47b3912a741baa93bdd3b67 (commit)
      from  7efb4737dd729326e5339facbd785cee43fb53b3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=563c840564dce77de47b3912a741baa93bdd3b67

commit 563c840564dce77de47b3912a741baa93bdd3b67
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Fri Aug 17 13:01:28 2012 -0400

    alpha: add conditional fdatasync support
    
    While most arches have had the fdatasync syscall for a long time, the
    alpha port didn't add it until the 2.6.22 release.
    
    This is heavily based on Aurelien Jarno's initial work.
    
    Signed-off-by: Mike Frysinger <vapier@gentoo.org>

diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha
index 266f42d..19edf6f 100644
--- a/ports/ChangeLog.alpha
+++ b/ports/ChangeLog.alpha
@@ -1,3 +1,11 @@
+2012-08-27  Mike Frysinger  <vapier@gentoo.org>
+
+	[BZ #5400]
+	* sysdeps/unix/sysv/linux/alpha/Makefile (CFLAGS-fdatasync.c): Define.
+	* sysdeps/unix/sysv/linux/alpha/fdatasync.c: New file
+	* sysdeps/unix/sysv/linux/alpha/kernel-features.h
+	(__ASSUME_FDATASYNC): Define.
+
 2012-08-16  Carlos O'Donell  <carlos_odonell@mentor.com>
 
 	* sysdeps/alpha/ldsodefs.h (ARCH_PLTENTER_MEMBERS)
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/Makefile b/ports/sysdeps/unix/sysv/linux/alpha/Makefile
index f64f23f..9676fee 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/Makefile
+++ b/ports/sysdeps/unix/sysv/linux/alpha/Makefile
@@ -20,6 +20,7 @@ sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \
 # Support old ipc control
 sysdep_routines += oldmsgctl oldsemctl oldshmctl
 
+CFLAGS-fdatasync.c = -fexceptions
 CFLAGS-ioperm.c = -Wa,-mev6
 endif
 
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/fdatasync.c b/ports/sysdeps/unix/sysv/linux/alpha/fdatasync.c
new file mode 100644
index 0000000..10f5035
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/alpha/fdatasync.c
@@ -0,0 +1,65 @@
+/* fdatasync -- synchronize at least the data part of a file with
+   the underlying media. Linux version.
+
+   Copyright (C) 2007-2012 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <sysdep-cancel.h>
+#include <sys/syscall.h>
+#include <bp-checks.h>
+
+#include <kernel-features.h>
+
+static int
+do_fdatasync (int fd)
+{
+#ifdef __ASSUME_FDATASYNC
+  return INLINE_SYSCALL (fdatasync, 1, fd);
+#elif defined __NR_fdatasync
+  static int __have_no_fdatasync;
+
+  if (!__builtin_expect (__have_no_fdatasync, 0))
+    {
+      int result = INLINE_SYSCALL (fdatasync, 1, fd);
+      if (__builtin_expect (result, 0) != -1 || errno != ENOSYS)
+	return result;
+
+      __have_no_fdatasync = 1;
+    }
+#endif
+  return INLINE_SYSCALL (fsync, 1, fd);
+}
+
+int
+__fdatasync (int fd)
+{
+  if (SINGLE_THREAD_P)
+    return do_fdatasync (fd);
+
+  int oldtype = LIBC_CANCEL_ASYNC ();
+
+  int result = do_fdatasync (fd);
+
+  LIBC_CANCEL_RESET (oldtype);
+
+  return result;
+}
+
+weak_alias (__fdatasync, fdatasync)
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index ee349bc..9fb5379 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -82,4 +82,9 @@
 #undef __ASSUME_STATFS64
 #define __ASSUME_STATFS64 0
 
+/* Support for fsyncdata was added for alpha after 2.6.21.  */
+#if __LINUX_KERNEL_VERSION >= 0x020616
+# define __ASSUME_FDATASYNC	1
+#endif
+
 #endif /* _KERNEL_FEATURES_H */

-----------------------------------------------------------------------

Summary of changes:
 ports/ChangeLog.alpha                              |    8 ++++
 ports/sysdeps/unix/sysv/linux/alpha/Makefile       |    1 +
 .../linux/{generic/poll.c => alpha/fdatasync.c}    |   44 ++++++++++++-------
 .../unix/sysv/linux/alpha/kernel-features.h        |    5 ++
 4 files changed, 42 insertions(+), 16 deletions(-)
 copy ports/sysdeps/unix/sysv/linux/{generic/poll.c => alpha/fdatasync.c} (55%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]