diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-06 11:52:53 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-06 11:52:53 -0500 |
| commit | 48beb121f0600070184a4265bae77e7d8382f747 (patch) | |
| tree | 278de829018e6e28be16da8817c18dd92f45dc73 | |
| parent | dbf3b7ddbaaf65c7da9b99a686b25fd06fd75073 (diff) | |
| parent | 7b02190c27091f7b4614d9a655981ae20520d22c (diff) | |
Merge branch 'akpm' (patches from Andrew Morton)
Merge misc fixes from Andrew Morton:
"7 fixes"
* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
mm/debug_pagealloc: fix build failure on ppc and some other archs
nilfs2: fix deadlock of segment constructor over I_SYNC flag
MAINTAINERS: remove SUPERH website
memcg, shmem: fix shmem migration to use lrucare
mm: export "high_memory" symbol on !MMU
.mailmap: update Konstantin Khlebnikov's email address
mm: pagewalk: call pte_hole() for VM_PFNMAP during walk_page_range
| -rw-r--r-- | .mailmap | 1 | ||||
| -rw-r--r-- | MAINTAINERS | 1 | ||||
| -rw-r--r-- | arch/mn10300/include/asm/cacheflush.h | 7 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/cacheflush.h | 7 | ||||
| -rw-r--r-- | arch/s390/include/asm/cacheflush.h | 4 | ||||
| -rw-r--r-- | arch/sparc/include/asm/cacheflush_64.h | 5 | ||||
| -rw-r--r-- | fs/nilfs2/nilfs.h | 2 | ||||
| -rw-r--r-- | fs/nilfs2/segment.c | 44 | ||||
| -rw-r--r-- | fs/nilfs2/segment.h | 5 | ||||
| -rw-r--r-- | mm/memcontrol.c | 2 | ||||
| -rw-r--r-- | mm/nommu.c | 1 | ||||
| -rw-r--r-- | mm/pagewalk.c | 5 | ||||
| -rw-r--r-- | mm/shmem.c | 2 |
13 files changed, 52 insertions, 34 deletions
| @@ -73,6 +73,7 @@ Juha Yrjola <juha.yrjola@nokia.com> | |||
| 73 | Juha Yrjola <juha.yrjola@solidboot.com> | 73 | Juha Yrjola <juha.yrjola@solidboot.com> |
| 74 | Kay Sievers <kay.sievers@vrfy.org> | 74 | Kay Sievers <kay.sievers@vrfy.org> |
| 75 | Kenneth W Chen <kenneth.w.chen@intel.com> | 75 | Kenneth W Chen <kenneth.w.chen@intel.com> |
| 76 | Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> | ||
| 76 | Koushik <raghavendra.koushik@neterion.com> | 77 | Koushik <raghavendra.koushik@neterion.com> |
| 77 | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 78 | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| 78 | Leonid I Ananiev <leonid.i.ananiev@intel.com> | 79 | Leonid I Ananiev <leonid.i.ananiev@intel.com> |
diff --git a/MAINTAINERS b/MAINTAINERS index aaa039dee999..8d37ce11cc56 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -9241,7 +9241,6 @@ F: drivers/net/ethernet/dlink/sundance.c | |||
| 9241 | 9241 | ||
| 9242 | SUPERH | 9242 | SUPERH |
| 9243 | L: linux-sh@vger.kernel.org | 9243 | L: linux-sh@vger.kernel.org |
| 9244 | W: http://www.linux-sh.org | ||
| 9245 | Q: http://patchwork.kernel.org/project/linux-sh/list/ | 9244 | Q: http://patchwork.kernel.org/project/linux-sh/list/ |
| 9246 | S: Orphan | 9245 | S: Orphan |
| 9247 | F: Documentation/sh/ | 9246 | F: Documentation/sh/ |
diff --git a/arch/mn10300/include/asm/cacheflush.h b/arch/mn10300/include/asm/cacheflush.h index faed90240ded..6d6df839948f 100644 --- a/arch/mn10300/include/asm/cacheflush.h +++ b/arch/mn10300/include/asm/cacheflush.h | |||
| @@ -159,13 +159,6 @@ extern void flush_icache_range(unsigned long start, unsigned long end); | |||
| 159 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 159 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
| 160 | memcpy(dst, src, len) | 160 | memcpy(dst, src, len) |
| 161 | 161 | ||
| 162 | /* | ||
| 163 | * Internal debugging function | ||
| 164 | */ | ||
| 165 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
| 166 | extern void kernel_map_pages(struct page *page, int numpages, int enable); | ||
| 167 | #endif | ||
| 168 | |||
| 169 | #endif /* __ASSEMBLY__ */ | 162 | #endif /* __ASSEMBLY__ */ |
| 170 | 163 | ||
| 171 | #endif /* _ASM_CACHEFLUSH_H */ | 164 | #endif /* _ASM_CACHEFLUSH_H */ |
diff --git a/arch/powerpc/include/asm/cacheflush.h b/arch/powerpc/include/asm/cacheflush.h index 5b9312220e84..30b35fff2dea 100644 --- a/arch/powerpc/include/asm/cacheflush.h +++ b/arch/powerpc/include/asm/cacheflush.h | |||
| @@ -60,13 +60,6 @@ extern void flush_dcache_phys_range(unsigned long start, unsigned long stop); | |||
| 60 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 60 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
| 61 | memcpy(dst, src, len) | 61 | memcpy(dst, src, len) |
| 62 | 62 | ||
| 63 | |||
| 64 | |||
| 65 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
| 66 | /* internal debugging function */ | ||
| 67 | void kernel_map_pages(struct page *page, int numpages, int enable); | ||
| 68 | #endif | ||
| 69 | |||
| 70 | #endif /* __KERNEL__ */ | 63 | #endif /* __KERNEL__ */ |
| 71 | 64 | ||
| 72 | #endif /* _ASM_POWERPC_CACHEFLUSH_H */ | 65 | #endif /* _ASM_POWERPC_CACHEFLUSH_H */ |
diff --git a/arch/s390/include/asm/cacheflush.h b/arch/s390/include/asm/cacheflush.h index 3e20383d0921..58fae7d098cf 100644 --- a/arch/s390/include/asm/cacheflush.h +++ b/arch/s390/include/asm/cacheflush.h | |||
| @@ -4,10 +4,6 @@ | |||
| 4 | /* Caches aren't brain-dead on the s390. */ | 4 | /* Caches aren't brain-dead on the s390. */ |
| 5 | #include <asm-generic/cacheflush.h> | 5 | #include <asm-generic/cacheflush.h> |
| 6 | 6 | ||
| 7 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
| 8 | void kernel_map_pages(struct page *page, int numpages, int enable); | ||
| 9 | #endif | ||
| 10 | |||
| 11 | int set_memory_ro(unsigned long addr, int numpages); | 7 | int set_memory_ro(unsigned long addr, int numpages); |
| 12 | int set_memory_rw(unsigned long addr, int numpages); | 8 | int set_memory_rw(unsigned long addr, int numpages); |
| 13 | int set_memory_nx(unsigned long addr, int numpages); | 9 | int set_memory_nx(unsigned long addr, int numpages); |
diff --git a/arch/sparc/include/asm/cacheflush_64.h b/arch/sparc/include/asm/cacheflush_64.h index 38965379e350..68513c41e10d 100644 --- a/arch/sparc/include/asm/cacheflush_64.h +++ b/arch/sparc/include/asm/cacheflush_64.h | |||
| @@ -74,11 +74,6 @@ void flush_ptrace_access(struct vm_area_struct *, struct page *, | |||
| 74 | #define flush_cache_vmap(start, end) do { } while (0) | 74 | #define flush_cache_vmap(start, end) do { } while (0) |
| 75 | #define flush_cache_vunmap(start, end) do { } while (0) | 75 | #define flush_cache_vunmap(start, end) do { } while (0) |
| 76 | 76 | ||
| 77 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
| 78 | /* internal debugging function */ | ||
| 79 | void kernel_map_pages(struct page *page, int numpages, int enable); | ||
| 80 | #endif | ||
| 81 | |||
| 82 | #endif /* !__ASSEMBLY__ */ | 77 | #endif /* !__ASSEMBLY__ */ |
| 83 | 78 | ||
| 84 | #endif /* _SPARC64_CACHEFLUSH_H */ | 79 | #endif /* _SPARC64_CACHEFLUSH_H */ |
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h index 91093cd74f0d..385704027575 100644 --- a/fs/nilfs2/nilfs.h +++ b/fs/nilfs2/nilfs.h | |||
| @@ -141,7 +141,6 @@ enum { | |||
| 141 | * @ti_save: Backup of journal_info field of task_struct | 141 | * @ti_save: Backup of journal_info field of task_struct |
| 142 | * @ti_flags: Flags | 142 | * @ti_flags: Flags |
| 143 | * @ti_count: Nest level | 143 | * @ti_count: Nest level |
| 144 | * @ti_garbage: List of inode to be put when releasing semaphore | ||
| 145 | */ | 144 | */ |
| 146 | struct nilfs_transaction_info { | 145 | struct nilfs_transaction_info { |
| 147 | u32 ti_magic; | 146 | u32 ti_magic; |
| @@ -150,7 +149,6 @@ struct nilfs_transaction_info { | |||
| 150 | one of other filesystems has a bug. */ | 149 | one of other filesystems has a bug. */ |
| 151 | unsigned short ti_flags; | 150 | unsigned short ti_flags; |
| 152 | unsigned short ti_count; | 151 | unsigned short ti_count; |
| 153 | struct list_head ti_garbage; | ||
| 154 | }; | 152 | }; |
| 155 | 153 | ||
| 156 | /* ti_magic */ | 154 | /* ti_magic */ |
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 7ef18fc656c2..469086b9f99b 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
| @@ -305,7 +305,6 @@ static void nilfs_transaction_lock(struct super_block *sb, | |||
| 305 | ti->ti_count = 0; | 305 | ti->ti_count = 0; |
| 306 | ti->ti_save = cur_ti; | 306 | ti->ti_save = cur_ti; |
| 307 | ti->ti_magic = NILFS_TI_MAGIC; | 307 | ti->ti_magic = NILFS_TI_MAGIC; |
| 308 | INIT_LIST_HEAD(&ti->ti_garbage); | ||
| 309 | current->journal_info = ti; | 308 | current->journal_info = ti; |
| 310 | 309 | ||
| 311 | for (;;) { | 310 | for (;;) { |
| @@ -332,8 +331,6 @@ static void nilfs_transaction_unlock(struct super_block *sb) | |||
| 332 | 331 | ||
| 333 | up_write(&nilfs->ns_segctor_sem); | 332 | up_write(&nilfs->ns_segctor_sem); |
| 334 | current->journal_info = ti->ti_save; | 333 | current->journal_info = ti->ti_save; |
| 335 | if (!list_empty(&ti->ti_garbage)) | ||
| 336 | nilfs_dispose_list(nilfs, &ti->ti_garbage, 0); | ||
| 337 | } | 334 | } |
| 338 | 335 | ||
| 339 | static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci, | 336 | static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci, |
| @@ -746,6 +743,15 @@ static void nilfs_dispose_list(struct the_nilfs *nilfs, | |||
| 746 | } | 743 | } |
| 747 | } | 744 | } |
| 748 | 745 | ||
| 746 | static void nilfs_iput_work_func(struct work_struct *work) | ||
| 747 | { | ||
| 748 | struct nilfs_sc_info *sci = container_of(work, struct nilfs_sc_info, | ||
| 749 | sc_iput_work); | ||
| 750 | struct the_nilfs *nilfs = sci->sc_super->s_fs_info; | ||
| 751 | |||
| 752 | nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 0); | ||
| 753 | } | ||
| 754 | |||
| 749 | static int nilfs_test_metadata_dirty(struct the_nilfs *nilfs, | 755 | static int nilfs_test_metadata_dirty(struct the_nilfs *nilfs, |
| 750 | struct nilfs_root *root) | 756 | struct nilfs_root *root) |
| 751 | { | 757 | { |
| @@ -1900,8 +1906,8 @@ static int nilfs_segctor_collect_dirty_files(struct nilfs_sc_info *sci, | |||
| 1900 | static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci, | 1906 | static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci, |
| 1901 | struct the_nilfs *nilfs) | 1907 | struct the_nilfs *nilfs) |
| 1902 | { | 1908 | { |
| 1903 | struct nilfs_transaction_info *ti = current->journal_info; | ||
| 1904 | struct nilfs_inode_info *ii, *n; | 1909 | struct nilfs_inode_info *ii, *n; |
| 1910 | int defer_iput = false; | ||
| 1905 | 1911 | ||
| 1906 | spin_lock(&nilfs->ns_inode_lock); | 1912 | spin_lock(&nilfs->ns_inode_lock); |
| 1907 | list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) { | 1913 | list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) { |
| @@ -1912,9 +1918,24 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci, | |||
| 1912 | clear_bit(NILFS_I_BUSY, &ii->i_state); | 1918 | clear_bit(NILFS_I_BUSY, &ii->i_state); |
| 1913 | brelse(ii->i_bh); | 1919 | brelse(ii->i_bh); |
| 1914 | ii->i_bh = NULL; | 1920 | ii->i_bh = NULL; |
| 1915 | list_move_tail(&ii->i_dirty, &ti->ti_garbage); | 1921 | list_del_init(&ii->i_dirty); |
| 1922 | if (!ii->vfs_inode.i_nlink) { | ||
| 1923 | /* | ||
| 1924 | * Defer calling iput() to avoid a deadlock | ||
| 1925 | * over I_SYNC flag for inodes with i_nlink == 0 | ||
| 1926 | */ | ||
| 1927 | list_add_tail(&ii->i_dirty, &sci->sc_iput_queue); | ||
| 1928 | defer_iput = true; | ||
| 1929 | } else { | ||
| 1930 | spin_unlock(&nilfs->ns_inode_lock); | ||
| 1931 | iput(&ii->vfs_inode); | ||
