Make MIPS fallocate, fallocate64 and sync_file_range cancellation points.
authorJoseph Myers <joseph@codesourcery.com>
Fri, 1 Apr 2011 16:11:19 +0000 (16:11 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 1 Apr 2011 16:11:19 +0000 (16:11 +0000)
ChangeLog.mips
sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c
sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c
sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c
sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list
sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list

index c811fd7..04cab0c 100644 (file)
@@ -1,5 +1,16 @@
 2011-04-01  Joseph Myers  <joseph@codesourcery.com>
 
+       * sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c: Make
+       cancelable.
+       * sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c: Likewise.
+       * sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c: Likewise.
+       * sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list: Mark
+       sync_file_range as cancellation point.
+       * sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list: Mark
+       sync_file_range as cancellation point.
+
+2011-04-01  Joseph Myers  <joseph@codesourcery.com>
+
        * sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list: Add
        sync_file_range.
 
index 13a21b0..21da50e 100644 (file)
@@ -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
@@ -21,7 +21,7 @@
 #include <fcntl.h>
 #include <sys/types.h>
 
-#include <sysdep.h>
+#include <sysdep-cancel.h>
 #include <sys/syscall.h>
 
 
 int
 sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
 {
-  return INLINE_SYSCALL (sync_file_range, 7, fd, 0,
-                        __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, 7, fd, 0,
+                          __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, 7, fd, 0,
+                          __LONG_LONG_PAIR ((long) (from >> 32), (long) from),
+                          __LONG_LONG_PAIR ((long) (to >> 32), (long) to),
+                          flags);
+
+  LIBC_CANCEL_RESET (oldtype);
+
+  return result;
 }
 #else
 int
index f973250..0aecba1 100644 (file)
@@ -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;
index 1f37f91..670cb0e 100644 (file)
@@ -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
 fallocate64 (int fd, int mode, __off64_t offset, __off64_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;
index 87c1949..0d37a9b 100644 (file)
@@ -1,7 +1,7 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 readahead      -       readahead       i:iii   __readahead     readahead
-sync_file_range        -       sync_file_range i:iiii  sync_file_range
+sync_file_range        -       sync_file_range Ci:iiii sync_file_range
 ftruncate      -       ftruncate       i:ii    __ftruncate     ftruncate ftruncate64 __ftruncate64
 truncate       -       truncate        i:si    truncate        truncate64
 
index 2404709..8d70e45 100644 (file)
@@ -1,6 +1,6 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
-sync_file_range        -       sync_file_range i:iiii  sync_file_range
+sync_file_range        -       sync_file_range Ci:iiii sync_file_range
 
 prlimit                EXTRA   prlimit64       i:iipp  prlimit         prlimit64