History

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.

Nick Piggin committed 18 years ago

Commit 4b19de61 parent 6c1b7f63 files · +8 −1Browse files

Showing the changes to include/linux (1 of 3 files). Show all

Unified · Split

include/linux/ramfs.h+1−0
@@ -6,6 +6,7 @@ extern int ramfs_get_sb(struct file_system_type *fs_type, · 5 unmodified lines
6 int flags, const char *dev_name, void *data, struct vfsmount *mnt);6 int flags, const char *dev_name, void *data, struct vfsmount *mnt);
7 7
8#ifndef CONFIG_MMU8#ifndef CONFIG_MMU
9extern int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize);
9extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file,10extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file,
10 unsigned long addr,11 unsigned long addr,
11 unsigned long len,12 unsigned long len,