[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r5025 - in glibc-package/branches/glibc-branch-squeeze/debian: . patches patches/any



Author: aurel32
Date: 2011-10-30 19:09:46 +0000 (Sun, 30 Oct 2011)
New Revision: 5025

Added:
   glibc-package/branches/glibc-branch-squeeze/debian/patches/any/cvs-statvfs-mount-flags.diff
Modified:
   glibc-package/branches/glibc-branch-squeeze/debian/changelog
   glibc-package/branches/glibc-branch-squeeze/debian/patches/series
Log:
  * patches/any/cvs-statvfs-mount-flags.diff: get the mount flags directly
    from the kernel when possible instead of parsing /proc/mounts.  Closes: 
    #639897.



Modified: glibc-package/branches/glibc-branch-squeeze/debian/changelog
===================================================================
--- glibc-package/branches/glibc-branch-squeeze/debian/changelog	2011-10-30 18:57:23 UTC (rev 5024)
+++ glibc-package/branches/glibc-branch-squeeze/debian/changelog	2011-10-30 19:09:46 UTC (rev 5025)
@@ -52,6 +52,9 @@
     sometimes causes a deadlock when calling fork() from a thread.
   * patches/amd64/cvs-avx-detection.diff: do not use AVX if hardware support
     is present, but not enabled in the kernel.  Closes: #646549.
+  * patches/any/cvs-statvfs-mount-flags.diff: get the mount flags directly
+    from the kernel when possible instead of parsing /proc/mounts.  Closes: 
+    #639897.
 
  -- Aurelien Jarno <aurel32@debian.org>  Sat, 11 Jun 2011 18:12:35 +0200
 

Added: glibc-package/branches/glibc-branch-squeeze/debian/patches/any/cvs-statvfs-mount-flags.diff
===================================================================
--- glibc-package/branches/glibc-branch-squeeze/debian/patches/any/cvs-statvfs-mount-flags.diff	                        (rev 0)
+++ glibc-package/branches/glibc-branch-squeeze/debian/patches/any/cvs-statvfs-mount-flags.diff	2011-10-30 19:09:46 UTC (rev 5025)
@@ -0,0 +1,191 @@
+2011-02-28  Aurelien Jarno  <aurelien@aurel32.net>
+ 
+	* ports/sysdeps/unix/sysv/linux/alpha/bits/statfs.h (struct statfs,
+	struct statfs64): Add f_flags field.
+
+2010-08-12  Joseph Myers  <joseph@codesourcery.com>
+ 
+	* ports/sysdeps/unix/sysv/linux/mips/bits/statfs.h (struct statfs,
+	struct statfs64): Add f_flags field.
+
+2010-08-11  Ulrich Drepper  <drepper@redhat.com>
+ 
+	* sysdeps/unix/sysv/linux/bits/statfs.h (struct statfs): Add f_flags
+	field.
+	(struct statfs64): Likewise.
+	(_STATFS_F_FLAGS): Define.
+	* sysdeps/unix/sysv/linux/s390/bits/statfs.h: Likewise.
+	* sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
+	Don't define if __ASSUME_STATFS_F_FLAGS is defined.
+	(ST_VALID): Define locally.
+	(INTERNAL_STATVFS): If f_flags has ST_VALID set don't call
+	__statvfs_getflags, use the provided value.
+	* sysdeps/unix/sysv/linux/kernel-features.h: Define
+	__ASSUME_STATFS_F_FLAGS.
+
+---
+ ports/sysdeps/unix/sysv/linux/alpha/bits/statfs.h |    6 ++++--
+ ports/sysdeps/unix/sysv/linux/mips/bits/statfs.h  |    6 ++++--
+ sysdeps/unix/sysv/linux/bits/statfs.h             |    7 +++++--
+ sysdeps/unix/sysv/linux/internal_statvfs.c        |   22 +++++++++++++++++-----
+ sysdeps/unix/sysv/linux/kernel-features.h         |    5 +++++
+ sysdeps/unix/sysv/linux/s390/bits/statfs.h        |    7 +++++--
+ 6 files changed, 40 insertions(+), 13 deletions(-)
+
+--- a/sysdeps/unix/sysv/linux/bits/statfs.h
++++ b/sysdeps/unix/sysv/linux/bits/statfs.h
+@@ -42,7 +42,8 @@
+     __fsid_t f_fsid;
+     __SWORD_TYPE f_namelen;
+     __SWORD_TYPE f_frsize;
+-    __SWORD_TYPE f_spare[5];
++    __SWORD_TYPE f_flags;
++    __SWORD_TYPE f_spare[4];
+   };
+ 
+ #ifdef __USE_LARGEFILE64
+@@ -58,10 +59,12 @@
+     __fsid_t f_fsid;
+     __SWORD_TYPE f_namelen;
+     __SWORD_TYPE f_frsize;
+-    __SWORD_TYPE f_spare[5];
++    __SWORD_TYPE f_flags;
++    __SWORD_TYPE f_spare[4];
+   };
+ #endif
+ 
+ /* Tell code we have these members.  */
+ #define _STATFS_F_NAMELEN
+ #define _STATFS_F_FRSIZE
++#define _STATFS_F_FLAGS
+--- a/sysdeps/unix/sysv/linux/internal_statvfs.c
++++ b/sysdeps/unix/sysv/linux/internal_statvfs.c
+@@ -29,6 +29,11 @@
+ #include <sys/statfs.h>
+ #include <sys/statvfs.h>
+ #include "linux_fsinfo.h"
++#include "kernel-features.h"
++
++
++/* Special internal-only bit value.  */
++#define ST_VALID 0x0020
+ 
+ 
+ #ifndef STATFS
+@@ -37,6 +42,7 @@
+ # define INTERNAL_STATVFS __internal_statvfs
+ 
+ 
++# ifndef __ASSUME_STATFS_F_FLAGS
+ int
+ __statvfs_getflags (const char *name, int fstype, struct stat64 *st)
+ {
+@@ -193,6 +199,7 @@
+ 
+   return result;
+ }
++# endif
+ #else
+ extern int __statvfs_getflags (const char *name, int fstype,
+ 			       struct stat64 *st);
+@@ -234,9 +241,14 @@
+   /* XXX I have no idea how to compute f_favail.  Any idea???  */
+   buf->f_favail = buf->f_ffree;
+ 
+-  /* Determining the flags is tricky.  We have to read /proc/mounts or
+-     the /etc/mtab file and search for the entry which matches the given
+-     file.  The way we can test for matching filesystem is using the
+-     device number.  */
+-  buf->f_flag = __statvfs_getflags (name, fsbuf->f_type, st);
++#ifndef __ASSUME_STATFS_F_FLAGS
++  if ((fsbuf->f_flags & ST_VALID) == 0)
++    /* Determining the flags is tricky.  We have to read /proc/mounts or
++       the /etc/mtab file and search for the entry which matches the given
++       file.  The way we can test for matching filesystem is using the
++       device number.  */
++    buf->f_flag = __statvfs_getflags (name, fsbuf->f_type, st);
++  else
++#endif
++    buf->f_flag = fsbuf->f_flags ^ ST_VALID;
+ }
+--- a/sysdeps/unix/sysv/linux/kernel-features.h
++++ b/sysdeps/unix/sysv/linux/kernel-features.h
+@@ -565,3 +565,8 @@
+ #if __LINUX_KERNEL_VERSION >= 0x020620
+ # define __ASSUME_F_GETOWN_EX	1
+ #endif
++
++/* statfs fills in f_flags since 2.6.36.  */
++#if __LINUX_KERNEL_VERSION >= 0x020624
++# define __ASSUME_STATFS_F_FLAGS	1
++#endif
+--- a/sysdeps/unix/sysv/linux/s390/bits/statfs.h
++++ b/sysdeps/unix/sysv/linux/s390/bits/statfs.h
+@@ -42,7 +42,8 @@
+     __fsid_t f_fsid;
+     int f_namelen;
+     int f_frsize;
+-    int f_spare[5];
++    int f_flags;
++    int f_spare[4];
+   };
+ 
+ #ifdef __USE_LARGEFILE64
+@@ -58,10 +59,12 @@
+     __fsid_t f_fsid;
+     int f_namelen;
+     int f_frsize;
+-    int f_spare[5];
++    int f_flags;
++    int f_spare[4];
+   };
+ #endif
+ 
+ /* Tell code we have this member.  */
+ #define _STATFS_F_NAMELEN
+ #define _STATFS_F_FRSIZE
++#define _STATFS_F_FLAGS
+--- a/ports/sysdeps/unix/sysv/linux/mips/bits/statfs.h
++++ b/ports/sysdeps/unix/sysv/linux/mips/bits/statfs.h
+@@ -45,7 +45,8 @@
+ 	/* Linux specials */
+     __fsid_t f_fsid;
+     long int f_namelen;
+-    long int f_spare[6];
++    long int f_flags;
++    long int f_spare[5];
+   };
+ 
+ #ifdef __USE_LARGEFILE64
+@@ -64,7 +65,8 @@
+ 	/* Linux specials */
+     __fsid_t f_fsid;
+     long int f_namelen;
+-    long int f_spare[6];
++    long int f_flags;
++    long int f_spare[5];
+   };
+ #endif
+ 
+--- a/ports/sysdeps/unix/sysv/linux/alpha/bits/statfs.h
++++ b/ports/sysdeps/unix/sysv/linux/alpha/bits/statfs.h
+@@ -42,7 +42,8 @@
+     __fsid_t f_fsid;
+     int f_namelen;
+     int f_frsize;
+-    int f_spare[5];
++    int f_flags;
++    int f_spare[4];
+   };
+ 
+ #ifdef __USE_LARGEFILE64
+@@ -58,7 +59,8 @@
+     __fsid_t f_fsid;
+     int f_namelen;
+     int f_frsize;
+-    int f_spare[5];
++    int f_flags;
++    int f_spare[4];
+   };
+ #endif
+ 

Modified: glibc-package/branches/glibc-branch-squeeze/debian/patches/series
===================================================================
--- glibc-package/branches/glibc-branch-squeeze/debian/patches/series	2011-10-30 18:57:23 UTC (rev 5024)
+++ glibc-package/branches/glibc-branch-squeeze/debian/patches/series	2011-10-30 19:09:46 UTC (rev 5025)
@@ -267,3 +267,4 @@
 any/cvs-pthread-setgroups.diff
 any/cvs-dl_close-scope-handling.diff
 any/cvs-nptl-pthread-race.diff
+any/cvs-statvfs-mount-flags.diff


Reply to: