Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Nick Piggin
Date: Monday, September 22, 2008 - 10:32 pm

On Mon, Sep 22, 2008 at 03:54:09PM +0100, David Howells wrote:

The code how it is breaks tiny-shmem under all conditions. We have lock
ordering pretty well documented in mm/filemap.c and mm/rmap.c

 

OK what about the following patch? Either way, the shmem_zero_setup is
somewhat of a hack in the mmap code.

What really should happen is that the shmem zero setup should happen
before the get_unmapped_area, so the correct get_unmapped_area for
the file gets called to allocate contiguous pages. This could also
lift the whole file creation out from under mmap_sem (not that you would
need to call do_truncate there *anyway* in that case, but it still makes
the code cleaner).

For the ipc setup code, we do need something, though.



RFC Quick patch to fix nommu anonymous shared memory without breaking
locking...

---

Index: linux-2.6/include/linux/ramfs.h
===================================================================
--- linux-2.6.orig/include/linux/ramfs.h
+++ linux-2.6/include/linux/ramfs.h
@@ -6,6 +6,7 @@ extern int ramfs_get_sb(struct file_syst
 	 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,
Index: linux-2.6/mm/tiny-shmem.c
===================================================================
--- linux-2.6.orig/mm/tiny-shmem.c
+++ linux-2.6/mm/tiny-shmem.c
@@ -80,6 +80,12 @@ struct file *shmem_file_setup(char *name
         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:
Index: linux-2.6/fs/ramfs/file-nommu.c
===================================================================
--- linux-2.6.orig/fs/ramfs/file-nommu.c
+++ linux-2.6/fs/ramfs/file-nommu.c
@@ -58,7 +58,7 @@ const struct inode_operations ramfs_file
  * 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;
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[patch] x86: some lock annotations for user copy paths, Nick Piggin, (Wed Sep 10, 4:37 am)
Re: [patch] x86: some lock annotations for user copy paths, Peter Zijlstra, (Wed Sep 10, 4:41 am)
Re: [patch] x86: some lock annotations for user copy paths, Peter Zijlstra, (Wed Sep 10, 8:01 am)
[PATCH] sysfs: fix deadlock, Ingo Molnar, (Fri Sep 12, 2:24 am)
Re: [PATCH] sysfs: fix deadlock, Nick Piggin, (Sun Sep 14, 3:02 pm)
[patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Nick Piggin, (Sun Sep 14, 3:12 pm)
Re: [PATCH] sysfs: fix deadlock, Peter Zijlstra, (Mon Sep 15, 2:15 am)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Andrew Morton, (Wed Sep 17, 1:14 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Matt Mackall, (Wed Sep 17, 1:46 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Jeremy Fitzhardinge, (Thu Sep 18, 12:29 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Matt Mackall, (Thu Sep 18, 2:11 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Hugh Dickins, (Sat Sep 20, 9:12 am)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, David Howells, (Mon Sep 22, 7:54 am)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Nick Piggin, (Mon Sep 22, 10:32 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, David Howells, (Wed Sep 24, 11:18 am)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Matt Mackall, (Wed Sep 24, 11:29 am)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, David Howells, (Wed Sep 24, 11:56 am)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Matt Mackall, (Wed Sep 24, 12:11 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, David Howells, (Wed Sep 24, 12:26 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Hugh Dickins, (Wed Sep 24, 12:29 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Hugh Dickins, (Wed Sep 24, 12:41 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Andrew Morton, (Wed Sep 24, 12:47 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, David Howells, (Wed Sep 24, 12:59 pm)
Re: [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex, Hugh Dickins, (Wed Sep 24, 4:43 pm)