diff options
author | Nick Piggin <npiggin@suse.de> | 2008-10-02 14:50:16 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-02 15:53:13 -0700 |
commit | 4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e (patch) | |
tree | 3c570060d915cb1e140fbdbbfb4a9efde26a37ff /include | |
parent | 6c1b7f680dd4f550fa6f91f148cc6fa2c4bd0737 (diff) | |
download | linux-3.10-4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e.tar.gz linux-3.10-4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e.tar.bz2 linux-3.10-4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e.zip |
mm: tiny-shmem nommu fix
The previous patch db203d53d474aa068984e409d807628f5841da1b ("mm:
tiny-shmem fix lock ordering: mmap_sem vs i_mutex") to fix the lock
ordering in tiny-shmem breaks shared anonymous and IPC memory on NOMMU
architectures because it was using the expanding truncate to signal ramfs
to allocate a physically contiguous RAM backing the inode (otherwise it is
unusable for "memory mapping" it to userspace).
However do_truncate is what caused the lock ordering error, due to it
taking i_mutex. In this case, we can actually just call ramfs directly to
allocate memory for the mapping, rather than go via truncate.
Acked-by: David Howells <dhowells@redhat.com>
Acked-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: Matt Mackall <mpm@selenic.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ramfs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index b160fb18e8d..37aaf2b3986 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h @@ -6,6 +6,7 @@ extern int ramfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt); #ifndef CONFIG_MMU +extern int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize); extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, |