mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 07:50:04 +00:00
4b19de6d1c
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>
24 lines
784 B
C
24 lines
784 B
C
#ifndef _LINUX_RAMFS_H
|
|
#define _LINUX_RAMFS_H
|
|
|
|
struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev);
|
|
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,
|
|
unsigned long pgoff,
|
|
unsigned long flags);
|
|
|
|
extern int ramfs_nommu_mmap(struct file *file, struct vm_area_struct *vma);
|
|
#endif
|
|
|
|
extern const struct file_operations ramfs_file_operations;
|
|
extern struct vm_operations_struct generic_file_vm_ops;
|
|
extern int __init init_rootfs(void);
|
|
|
|
#endif
|