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.
Showing the changes to include/linux (1 of 3 files). Show all
Unified · Split
| @@ -6,6 +6,7 @@ extern int ramfs_get_sb(struct file_system_type *fs_type, · 5 unmodified lines | ||
| 6 | 6 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); |
| 7 | 7 | |
| 8 | 8 | #ifndef CONFIG_MMU |
| 9 | +extern int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize); | |
| 9 | 10 | extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file, |
| 10 | 11 | unsigned long addr, |
| 11 | 12 | unsigned long len, |