Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+52 -34
+1
.mailmap
··· 73 73 Juha Yrjola <juha.yrjola@solidboot.com> 74 74 Kay Sievers <kay.sievers@vrfy.org> 75 75 Kenneth W Chen <kenneth.w.chen@intel.com> 76 + Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> 76 77 Koushik <raghavendra.koushik@neterion.com> 77 78 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 78 79 Leonid I Ananiev <leonid.i.ananiev@intel.com>
-1
MAINTAINERS
··· 9241 9241 9242 9242 SUPERH 9243 9243 L: linux-sh@vger.kernel.org 9244 - W: http://www.linux-sh.org 9245 9244 Q: http://patchwork.kernel.org/project/linux-sh/list/ 9246 9245 S: Orphan 9247 9246 F: Documentation/sh/
-7
arch/mn10300/include/asm/cacheflush.h
··· 159 159 #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ 160 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 162 #endif /* __ASSEMBLY__ */ 170 163 171 164 #endif /* _ASM_CACHEFLUSH_H */
-7
arch/powerpc/include/asm/cacheflush.h
··· 60 60 #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ 61 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 63 #endif /* __KERNEL__ */ 71 64 72 65 #endif /* _ASM_POWERPC_CACHEFLUSH_H */
-4
arch/s390/include/asm/cacheflush.h
··· 4 4 /* Caches aren't brain-dead on the s390. */ 5 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 7 int set_memory_ro(unsigned long addr, int numpages); 12 8 int set_memory_rw(unsigned long addr, int numpages); 13 9 int set_memory_nx(unsigned long addr, int numpages);
-5
arch/sparc/include/asm/cacheflush_64.h
··· 74 74 #define flush_cache_vmap(start, end) do { } while (0) 75 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 77 #endif /* !__ASSEMBLY__ */ 83 78 84 79 #endif /* _SPARC64_CACHEFLUSH_H */
-2
fs/nilfs2/nilfs.h
··· 141 141 * @ti_save: Backup of journal_info field of task_struct 142 142 * @ti_flags: Flags 143 143 * @ti_count: Nest level 144 - * @ti_garbage: List of inode to be put when releasing semaphore 145 144 */ 146 145 struct nilfs_transaction_info { 147 146 u32 ti_magic; ··· 149 150 one of other filesystems has a bug. */ 150 151 unsigned short ti_flags; 151 152 unsigned short ti_count; 152 - struct list_head ti_garbage; 153 153 }; 154 154 155 155 /* ti_magic */
+39 -5
fs/nilfs2/segment.c
··· 305 305 ti->ti_count = 0; 306 306 ti->ti_save = cur_ti; 307 307 ti->ti_magic = NILFS_TI_MAGIC; 308 - INIT_LIST_HEAD(&ti->ti_garbage); 309 308 current->journal_info = ti; 310 309 311 310 for (;;) { ··· 331 332 332 333 up_write(&nilfs->ns_segctor_sem); 333 334 current->journal_info = ti->ti_save; 334 - if (!list_empty(&ti->ti_garbage)) 335 - nilfs_dispose_list(nilfs, &ti->ti_garbage, 0); 336 335 } 337 336 338 337 static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci, ··· 741 744 for (pii = ivec; nv > 0; pii++, nv--) 742 745 iput(&(*pii)->vfs_inode); 743 746 } 747 + } 748 + 749 + static void nilfs_iput_work_func(struct work_struct *work) 750 + { 751 + struct nilfs_sc_info *sci = container_of(work, struct nilfs_sc_info, 752 + sc_iput_work); 753 + struct the_nilfs *nilfs = sci->sc_super->s_fs_info; 754 + 755 + nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 0); 744 756 } 745 757 746 758 static int nilfs_test_metadata_dirty(struct the_nilfs *nilfs, ··· 1906 1900 static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci, 1907 1901 struct the_nilfs *nilfs) 1908 1902 { 1909 - struct nilfs_transaction_info *ti = current->journal_info; 1910 1903 struct nilfs_inode_info *ii, *n; 1904 + int defer_iput = false; 1911 1905 1912 1906 spin_lock(&nilfs->ns_inode_lock); 1913 1907 list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) { ··· 1918 1912 clear_bit(NILFS_I_BUSY, &ii->i_state); 1919 1913 brelse(ii->i_bh); 1920 1914 ii->i_bh = NULL; 1921 - list_move_tail(&ii->i_dirty, &ti->ti_garbage); 1915 + list_del_init(&ii->i_dirty); 1916 + if (!ii->vfs_inode.i_nlink) { 1917 + /* 1918 + * Defer calling iput() to avoid a deadlock 1919 + * over I_SYNC flag for inodes with i_nlink == 0 1920 + */ 1921 + list_add_tail(&ii->i_dirty, &sci->sc_iput_queue); 1922 + defer_iput = true; 1923 + } else { 1924 + spin_unlock(&nilfs->ns_inode_lock); 1925 + iput(&ii->vfs_inode); 1926 + spin_lock(&nilfs->ns_inode_lock); 1927 + } 1922 1928 } 1923 1929 spin_unlock(&nilfs->ns_inode_lock); 1930 + 1931 + if (defer_iput) 1932 + schedule_work(&sci->sc_iput_work); 1924 1933 } 1925 1934 1926 1935 /* ··· 2604 2583 INIT_LIST_HEAD(&sci->sc_segbufs); 2605 2584 INIT_LIST_HEAD(&sci->sc_write_logs); 2606 2585 INIT_LIST_HEAD(&sci->sc_gc_inodes); 2586 + INIT_LIST_HEAD(&sci->sc_iput_queue); 2587 + INIT_WORK(&sci->sc_iput_work, nilfs_iput_work_func); 2607 2588 init_timer(&sci->sc_timer); 2608 2589 2609 2590 sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT; ··· 2632 2609 ret = nilfs_segctor_construct(sci, SC_LSEG_SR); 2633 2610 nilfs_transaction_unlock(sci->sc_super); 2634 2611 2612 + flush_work(&sci->sc_iput_work); 2613 + 2635 2614 } while (ret && retrycount-- > 0); 2636 2615 } 2637 2616 ··· 2658 2633 || sci->sc_seq_request != sci->sc_seq_done); 2659 2634 spin_unlock(&sci->sc_state_lock); 2660 2635 2636 + if (flush_work(&sci->sc_iput_work)) 2637 + flag = true; 2638 + 2661 2639 if (flag || !nilfs_segctor_confirm(sci)) 2662 2640 nilfs_segctor_write_out(sci); 2663 2641 ··· 2668 2640 nilfs_warning(sci->sc_super, __func__, 2669 2641 "dirty file(s) after the final construction\n"); 2670 2642 nilfs_dispose_list(nilfs, &sci->sc_dirty_files, 1); 2643 + } 2644 + 2645 + if (!list_empty(&sci->sc_iput_queue)) { 2646 + nilfs_warning(sci->sc_super, __func__, 2647 + "iput queue is not empty\n"); 2648 + nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 1); 2671 2649 } 2672 2650 2673 2651 WARN_ON(!list_empty(&sci->sc_segbufs));
+5
fs/nilfs2/segment.h
··· 26 26 #include <linux/types.h> 27 27 #include <linux/fs.h> 28 28 #include <linux/buffer_head.h> 29 + #include <linux/workqueue.h> 29 30 #include <linux/nilfs2_fs.h> 30 31 #include "nilfs.h" 31 32 ··· 93 92 * @sc_nblk_inc: Block count of current generation 94 93 * @sc_dirty_files: List of files to be written 95 94 * @sc_gc_inodes: List of GC inodes having blocks to be written 95 + * @sc_iput_queue: list of inodes for which iput should be done 96 + * @sc_iput_work: work struct to defer iput call 96 97 * @sc_freesegs: array of segment numbers to be freed 97 98 * @sc_nfreesegs: number of segments on @sc_freesegs 98 99 * @sc_dsync_inode: inode whose data pages are written for a sync operation ··· 138 135 139 136 struct list_head sc_dirty_files; 140 137 struct list_head sc_gc_inodes; 138 + struct list_head sc_iput_queue; 139 + struct work_struct sc_iput_work; 141 140 142 141 __u64 *sc_freesegs; 143 142 size_t sc_nfreesegs;
+1 -1
mm/memcontrol.c
··· 5773 5773 * mem_cgroup_migrate - migrate a charge to another page 5774 5774 * @oldpage: currently charged page 5775 5775 * @newpage: page to transfer the charge to 5776 - * @lrucare: both pages might be on the LRU already 5776 + * @lrucare: either or both pages might be on the LRU already 5777 5777 * 5778 5778 * Migrate the charge from @oldpage to @newpage. 5779 5779 *
+1
mm/nommu.c
··· 59 59 #endif 60 60 61 61 void *high_memory; 62 + EXPORT_SYMBOL(high_memory); 62 63 struct page *mem_map; 63 64 unsigned long max_mapnr; 64 65 unsigned long highest_memmap_pfn;
+4 -1
mm/pagewalk.c
··· 199 199 */ 200 200 if ((vma->vm_start <= addr) && 201 201 (vma->vm_flags & VM_PFNMAP)) { 202 - next = vma->vm_end; 202 + if (walk->pte_hole) 203 + err = walk->pte_hole(addr, next, walk); 204 + if (err) 205 + break; 203 206 pgd = pgd_offset(walk->mm, next); 204 207 continue; 205 208 }
+1 -1
mm/shmem.c
··· 1013 1013 */ 1014 1014 oldpage = newpage; 1015 1015 } else { 1016 - mem_cgroup_migrate(oldpage, newpage, false); 1016 + mem_cgroup_migrate(oldpage, newpage, true); 1017 1017 lru_cache_add_anon(newpage); 1018 1018 *pagep = newpage; 1019 1019 }