summaryrefslogtreecommitdiffstats
path: root/fs/ramfs
diff options
context:
space:
mode:
authorNick Piggin2008-10-02 23:50:16 +0200
committerLinus Torvalds2008-10-03 00:53:13 +0200
commit4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e (patch)
tree3c570060d915cb1e140fbdbbfb4a9efde26a37ff /fs/ramfs
parentmemory hotplug: missing zone->lock in test_pages_isolated() (diff)
downloadkernel-qcow2-linux-4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e.tar.gz
kernel-qcow2-linux-4b19de6d1cb07c8bcb6778e771f9cfd5bcfdfd3e.tar.xz
kernel-qcow2-linux-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 'fs/ramfs')
-rw-r--r--fs/ramfs/file-nommu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ramfs/file-nommu.c b/fs/ramfs/file-nommu.c
index 52312ec93ff4..5145cb9125af 100644
--- a/fs/ramfs/file-nommu.c
+++ b/fs/ramfs/file-nommu.c
@@ -58,7 +58,7 @@ const struct inode_operations ramfs_file_inode_operations = {
* size 0 on the assumption that it's going to be used for an mmap of shared
* memory
*/
-static int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize)
+int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize)
{
struct pagevec lru_pvec;
unsigned long npages, xpages, loop, limit;