mm: tiny-shmem nommu fix
The previous patch db203d53d4
("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>
This commit is contained in:
committed by
Linus Torvalds
parent
6c1b7f680d
commit
4b19de6d1c
@@ -80,6 +80,12 @@ struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags)
|
||||
inode->i_nlink = 0; /* It is unlinked */
|
||||
init_file(file, shm_mnt, dentry, FMODE_WRITE | FMODE_READ,
|
||||
&ramfs_file_operations);
|
||||
|
||||
#ifndef CONFIG_MMU
|
||||
error = ramfs_nommu_expand_for_mapping(inode, size);
|
||||
if (error)
|
||||
goto close_file;
|
||||
#endif
|
||||
return file;
|
||||
|
||||
close_file:
|
||||
|
Reference in New Issue
Block a user