summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpthread/nptl/linux_fsinfo.h5
-rw-r--r--libpthread/nptl/sem_open.c8
2 files changed, 10 insertions, 3 deletions
diff --git a/libpthread/nptl/linux_fsinfo.h b/libpthread/nptl/linux_fsinfo.h
index 8537581a2..4abe7920d 100644
--- a/libpthread/nptl/linux_fsinfo.h
+++ b/libpthread/nptl/linux_fsinfo.h
@@ -126,7 +126,10 @@
#define XENIX_SUPER_MAGIC 0x012ff7b4
/* Constant that identifies the `shm' filesystem. */
-#define SHMFS_SUPER_MAGIC 0x01021994
+/* Mount as tmpfs. */
+#define SHMFS_SUPER_MAGIC_WITH_MMU 0x01021994
+/* The kernel uses a ramfs file system for tmpfs. */
+#define SHMFS_SUPER_MAGIC_WITHOUT_MMU 0x858458f6
/* Constants that identify the `xfs' filesystem. */
#define XFS_SUPER_MAGIC 0x58465342
diff --git a/libpthread/nptl/sem_open.c b/libpthread/nptl/sem_open.c
index d811ec503..2746da1b7 100644
--- a/libpthread/nptl/sem_open.c
+++ b/libpthread/nptl/sem_open.c
@@ -72,7 +72,9 @@ __where_is_shmfs (void)
/* The canonical place is /dev/shm. This is at least what the
documentation tells everybody to do. */
- if (__statfs (defaultmount, &f) == 0 && f.f_type == SHMFS_SUPER_MAGIC)
+ if (__statfs (defaultmount, &f) == 0
+ && (f.f_type == SHMFS_SUPER_MAGIC_WITH_MMU
+ || f.f_type == SHMFS_SUPER_MAGIC_WITHOUT_MMU))
{
/* It is in the normal place. */
mountpoint.dir = (char *) defaultdir;
@@ -106,7 +108,9 @@ __where_is_shmfs (void)
/* First make sure this really is the correct entry. At least
some versions of the kernel give wrong information because
of the implicit mount of the shmfs for SysV IPC. */
- if (__statfs (mp->mnt_dir, &f) != 0 || f.f_type != SHMFS_SUPER_MAGIC)
+ if (__statfs (mp->mnt_dir, &f) != 0
+ || (f.f_type != SHMFS_SUPER_MAGIC_WITH_MMU
+ && f.f_type != SHMFS_SUPER_MAGIC_WITHOUT_MMU))
continue;
namelen = strlen (mp->mnt_dir);