From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 10 Dec 2017 13:55:24 +0300 From: "Kirill A. Shutemov" To: Matthew Wilcox Cc: linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org, Ross Zwisler Subject: Re: [PATCH v3] mm: Add unmap_mapping_pages Message-ID: <20171210105524.k2jxa32dcmotmnzd@node.shutemov.name> References: <20171205154453.GD28760@bombadil.infradead.org> <20171206142627.GD32044@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171206142627.GD32044@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: On Wed, Dec 06, 2017 at 06:26:27AM -0800, Matthew Wilcox wrote: > v3: > - Fix compilation > (I forgot to git commit --amend) > - Added Ross' Reviewed-by > v2: > - Fix inverted mask in dax.c > - Pass 'false' instead of '0' for 'only_cows' > - nommu definition > > --- 8< --- > > From df142c51e111f7c386f594d5443530ea17abba5f Mon Sep 17 00:00:00 2001 > From: Matthew Wilcox > Date: Tue, 5 Dec 2017 00:15:54 -0500 > Subject: [PATCH v3] mm: Add unmap_mapping_pages > > Several users of unmap_mapping_range() would prefer to express their > range in pages rather than bytes. Unfortuately, on a 32-bit kernel, > you have to remember to cast your page number to a 64-bit type before > shifting it, and four places in the current tree didn't remember to > do that. That's a sign of a bad interface. > > Conveniently, unmap_mapping_range() actually converts from bytes into > pages, so hoist the guts of unmap_mapping_range() into a new function > unmap_mapping_pages() and convert the callers which want to use pages. > > Signed-off-by: Matthew Wilcox > Reported-by: "zhangyi (F)" > Reviewed-by: Ross Zwisler Looks good to me. Acked-by: Kirill A. Shutemov -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sat, 9 Dec 2017 10:42:20 +0800 From: Fengguang Wu To: Matthew Wilcox Cc: kbuild-all@01.org, linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org, Ye Xiaolong Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <20171209024220.bwvzswwckhvbr6qy@wfg-t540p.sh.intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> <201712080802.CQcwOznF%fengguang.wu@intel.com> <20171209013624.GA9717@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20171209013624.GA9717@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: CC Xiaolong. On Fri, Dec 08, 2017 at 05:36:24PM -0800, Matthew Wilcox wrote: >On Fri, Dec 08, 2017 at 10:38:55AM +0800, kbuild test robot wrote: >> Hi Matthew, >> >> I love your patch! Yet something to improve: > >You missed v3, kbuild robot? Yeah indeed. Something went wrong and the patch service log has not been updated for 3 days.. Let's check it. Thanks, Fengguang -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 8 Dec 2017 17:36:24 -0800 From: Matthew Wilcox To: kbuild test robot Cc: kbuild-all@01.org, linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <20171209013624.GA9717@bombadil.infradead.org> References: <20171205154453.GD28760@bombadil.infradead.org> <201712080802.CQcwOznF%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201712080802.CQcwOznF%fengguang.wu@intel.com> Sender: owner-linux-mm@kvack.org List-ID: On Fri, Dec 08, 2017 at 10:38:55AM +0800, kbuild test robot wrote: > Hi Matthew, > > I love your patch! Yet something to improve: You missed v3, kbuild robot? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 8 Dec 2017 10:38:55 +0800 From: kbuild test robot To: Matthew Wilcox Cc: kbuild-all@01.org, linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <201712080802.CQcwOznF%fengguang.wu@intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="XsQoSWH+UP9D9v3l" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: --XsQoSWH+UP9D9v3l Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi Matthew, I love your patch! Yet something to improve: [auto build test ERROR on mmotm/master] [also build test ERROR on v4.15-rc2 next-20171207] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox/mm-Add-unmap_mapping_pages/20171208-072634 base: git://git.cmpxchg.org/linux-mmotm.git master config: i386-randconfig-a0-201749 (attached as .config) compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): In file included from include/linux/memcontrol.h:29:0, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/x86/kernel/asm-offsets.c:13: include/linux/mm.h: In function 'unmap_shared_mapping_range': >> include/linux/mm.h:1328:2: error: implicit declaration of function 'unmap_mapping_range' [-Werror=implicit-function-declaration] unmap_mapping_range(mapping, holebegin, holelen, 0); ^ include/linux/mm.h: At top level: include/linux/mm.h:1347:6: warning: conflicting types for 'unmap_mapping_range' void unmap_mapping_range(struct address_space *mapping, ^ include/linux/mm.h:1328:2: note: previous implicit declaration of 'unmap_mapping_range' was here unmap_mapping_range(mapping, holebegin, holelen, 0); ^ cc1: some warnings being treated as errors make[2]: *** [arch/x86/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [sub-make] Error 2 vim +/unmap_mapping_range +1328 include/linux/mm.h e6473092b Matt Mackall 2008-02-04 1307 2165009bd Dave Hansen 2008-06-12 1308 int walk_page_range(unsigned long addr, unsigned long end, 2165009bd Dave Hansen 2008-06-12 1309 struct mm_walk *walk); 900fc5f19 Naoya Horiguchi 2015-02-11 1310 int walk_page_vma(struct vm_area_struct *vma, struct mm_walk *walk); 42b777281 Jan Beulich 2008-07-23 1311 void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, 3bf5ee956 Hugh Dickins 2005-04-19 1312 unsigned long end, unsigned long floor, unsigned long ceiling); ^1da177e4 Linus Torvalds 2005-04-16 1313 int copy_page_range(struct mm_struct *dst, struct mm_struct *src, ^1da177e4 Linus Torvalds 2005-04-16 1314 struct vm_area_struct *vma); 097963959 Ross Zwisler 2017-01-10 1315 int follow_pte_pmd(struct mm_struct *mm, unsigned long address, a4d1a8852 J�r�me Glisse 2017-08-31 1316 unsigned long *start, unsigned long *end, 097963959 Ross Zwisler 2017-01-10 1317 pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); 3b6748e2d Johannes Weiner 2009-06-16 1318 int follow_pfn(struct vm_area_struct *vma, unsigned long address, 3b6748e2d Johannes Weiner 2009-06-16 1319 unsigned long *pfn); d87fe6607 venkatesh.pallipadi@intel.com 2008-12-19 1320 int follow_phys(struct vm_area_struct *vma, unsigned long address, d87fe6607 venkatesh.pallipadi@intel.com 2008-12-19 1321 unsigned int flags, unsigned long *prot, resource_size_t *phys); 28b2ee20c Rik van Riel 2008-07-23 1322 int generic_access_phys(struct vm_area_struct *vma, unsigned long addr, 28b2ee20c Rik van Riel 2008-07-23 1323 void *buf, int len, int write); ^1da177e4 Linus Torvalds 2005-04-16 1324 ^1da177e4 Linus Torvalds 2005-04-16 1325 static inline void unmap_shared_mapping_range(struct address_space *mapping, ^1da177e4 Linus Torvalds 2005-04-16 1326 loff_t const holebegin, loff_t const holelen) ^1da177e4 Linus Torvalds 2005-04-16 1327 { ^1da177e4 Linus Torvalds 2005-04-16 @1328 unmap_mapping_range(mapping, holebegin, holelen, 0); ^1da177e4 Linus Torvalds 2005-04-16 1329 } ^1da177e4 Linus Torvalds 2005-04-16 1330 :::::: The code at line 1328 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds :::::: CC: Linus Torvalds --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --XsQoSWH+UP9D9v3l Content-Type: application/gzip Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --XsQoSWH+UP9D9v3l-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 8 Dec 2017 10:10:55 +0800 From: kbuild test robot To: Matthew Wilcox Cc: kbuild-all@01.org, linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <201712080802.7Qlq9cj1%fengguang.wu@intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi Matthew, I love your patch! Yet something to improve: [auto build test ERROR on mmotm/master] [also build test ERROR on v4.15-rc2 next-20171207] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox/mm-Add-unmap_mapping_pages/20171208-072634 base: git://git.cmpxchg.org/linux-mmotm.git master config: i386-tinyconfig (attached as .config) compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): In file included from include/linux/memcontrol.h:29:0, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/x86/kernel/asm-offsets.c:13: include/linux/mm.h: In function 'unmap_shared_mapping_range': >> include/linux/mm.h:1328:2: error: implicit declaration of function 'unmap_mapping_range'; did you mean 'unmap_shared_mapping_range'? [-Werror=implicit-function-declaration] unmap_mapping_range(mapping, holebegin, holelen, 0); ^~~~~~~~~~~~~~~~~~~ unmap_shared_mapping_range include/linux/mm.h: At top level: >> include/linux/mm.h:1347:6: warning: conflicting types for 'unmap_mapping_range' void unmap_mapping_range(struct address_space *mapping, ^~~~~~~~~~~~~~~~~~~ include/linux/mm.h:1328:2: note: previous implicit declaration of 'unmap_mapping_range' was here unmap_mapping_range(mapping, holebegin, holelen, 0); ^~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[2]: *** [arch/x86/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [sub-make] Error 2 vim +1328 include/linux/mm.h e6473092bd Matt Mackall 2008-02-04 1307 2165009bdf Dave Hansen 2008-06-12 1308 int walk_page_range(unsigned long addr, unsigned long end, 2165009bdf Dave Hansen 2008-06-12 1309 struct mm_walk *walk); 900fc5f197 Naoya Horiguchi 2015-02-11 1310 int walk_page_vma(struct vm_area_struct *vma, struct mm_walk *walk); 42b7772812 Jan Beulich 2008-07-23 1311 void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, 3bf5ee9564 Hugh Dickins 2005-04-19 1312 unsigned long end, unsigned long floor, unsigned long ceiling); ^1da177e4c Linus Torvalds 2005-04-16 1313 int copy_page_range(struct mm_struct *dst, struct mm_struct *src, ^1da177e4c Linus Torvalds 2005-04-16 1314 struct vm_area_struct *vma); 0979639595 Ross Zwisler 2017-01-10 1315 int follow_pte_pmd(struct mm_struct *mm, unsigned long address, a4d1a88525 J�r�me Glisse 2017-08-31 1316 unsigned long *start, unsigned long *end, 0979639595 Ross Zwisler 2017-01-10 1317 pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); 3b6748e2dd Johannes Weiner 2009-06-16 1318 int follow_pfn(struct vm_area_struct *vma, unsigned long address, 3b6748e2dd Johannes Weiner 2009-06-16 1319 unsigned long *pfn); d87fe6607c venkatesh.pallipadi@intel.com 2008-12-19 1320 int follow_phys(struct vm_area_struct *vma, unsigned long address, d87fe6607c venkatesh.pallipadi@intel.com 2008-12-19 1321 unsigned int flags, unsigned long *prot, resource_size_t *phys); 28b2ee20c7 Rik van Riel 2008-07-23 1322 int generic_access_phys(struct vm_area_struct *vma, unsigned long addr, 28b2ee20c7 Rik van Riel 2008-07-23 1323 void *buf, int len, int write); ^1da177e4c Linus Torvalds 2005-04-16 1324 ^1da177e4c Linus Torvalds 2005-04-16 1325 static inline void unmap_shared_mapping_range(struct address_space *mapping, ^1da177e4c Linus Torvalds 2005-04-16 1326 loff_t const holebegin, loff_t const holelen) ^1da177e4c Linus Torvalds 2005-04-16 1327 { ^1da177e4c Linus Torvalds 2005-04-16 @1328 unmap_mapping_range(mapping, holebegin, holelen, 0); ^1da177e4c Linus Torvalds 2005-04-16 1329 } ^1da177e4c Linus Torvalds 2005-04-16 1330 7caef26767 Kirill A. Shutemov 2013-09-12 1331 extern void truncate_pagecache(struct inode *inode, loff_t new); 2c27c65ed0 Christoph Hellwig 2010-06-04 1332 extern void truncate_setsize(struct inode *inode, loff_t newsize); 90a8020278 Jan Kara 2014-10-01 1333 void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to); 623e3db9f9 Hugh Dickins 2012-03-28 1334 void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); 750b4987b0 Nick Piggin 2009-09-16 1335 int truncate_inode_page(struct address_space *mapping, struct page *page); 2571873621 Andi Kleen 2009-09-16 1336 int generic_error_remove_page(struct address_space *mapping, struct page *page); 83f786680a Wu Fengguang 2009-09-16 1337 int invalidate_inode_page(struct page *page); 83f786680a Wu Fengguang 2009-09-16 1338 7ee1dd3fee David Howells 2006-01-06 1339 #ifdef CONFIG_MMU dcddffd41d Kirill A. Shutemov 2016-07-26 1340 extern int handle_mm_fault(struct vm_area_struct *vma, unsigned long address, dcddffd41d Kirill A. Shutemov 2016-07-26 1341 unsigned int flags); 5c723ba5b7 Peter Zijlstra 2011-07-27 1342 extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, 4a9e1cda27 Dominik Dingel 2016-01-15 1343 unsigned long address, unsigned int fault_flags, 4a9e1cda27 Dominik Dingel 2016-01-15 1344 bool *unlocked); dcd7006c23 Matthew Wilcox 2017-12-05 1345 void unmap_mapping_pages(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1346 pgoff_t start, pgoff_t nr, bool even_cows); dcd7006c23 Matthew Wilcox 2017-12-05 @1347 void unmap_mapping_range(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1348 loff_t const holebegin, loff_t const holelen, int even_cows); 7ee1dd3fee David Howells 2006-01-06 1349 #else dcddffd41d Kirill A. Shutemov 2016-07-26 1350 static inline int handle_mm_fault(struct vm_area_struct *vma, dcddffd41d Kirill A. Shutemov 2016-07-26 1351 unsigned long address, unsigned int flags) 7ee1dd3fee David Howells 2006-01-06 1352 { 7ee1dd3fee David Howells 2006-01-06 1353 /* should never happen if there's no MMU */ 7ee1dd3fee David Howells 2006-01-06 1354 BUG(); 7ee1dd3fee David Howells 2006-01-06 1355 return VM_FAULT_SIGBUS; 7ee1dd3fee David Howells 2006-01-06 1356 } 5c723ba5b7 Peter Zijlstra 2011-07-27 1357 static inline int fixup_user_fault(struct task_struct *tsk, 5c723ba5b7 Peter Zijlstra 2011-07-27 1358 struct mm_struct *mm, unsigned long address, 4a9e1cda27 Dominik Dingel 2016-01-15 1359 unsigned int fault_flags, bool *unlocked) 5c723ba5b7 Peter Zijlstra 2011-07-27 1360 { 5c723ba5b7 Peter Zijlstra 2011-07-27 1361 /* should never happen if there's no MMU */ 5c723ba5b7 Peter Zijlstra 2011-07-27 1362 BUG(); 5c723ba5b7 Peter Zijlstra 2011-07-27 1363 return -EFAULT; 5c723ba5b7 Peter Zijlstra 2011-07-27 1364 } dcd7006c23 Matthew Wilcox 2017-12-05 1365 static inline void unmap_mapping_pages(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1366 pgoff_t start, pgoff_t nr, bool even_cows) { } dcd7006c23 Matthew Wilcox 2017-12-05 1367 static inline void unmap_mapping_range(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1368 loff_t const holebegin, loff_t const holelen, int even_cows) { } 7ee1dd3fee David Howells 2006-01-06 1369 #endif f33ea7f404 Nick Piggin 2005-08-03 1370 :::::: The code at line 1328 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds :::::: CC: Linus Torvalds --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --vkogqOf2sHV7VnPd Content-Type: application/gzip Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 H4sICCjTKVoAAy5jb25maWcAjFxZc+M4kn6fX8Ho2djoeugqX+X2xIYfIBCUMCZINgFKsl8Y KplVpShb8uro7vr3mwmQ4pXw7ETMTBmZAHHk8WUioX/+458BOx13r6vjZr16efkZfKu21X51 rJ6Dr5uX6n+CMA2S1AQilOYjMMeb7envT5vru9vg5uPl548Xv+3Xl7+9vl4GD9V+W70EfLf9 uvl2giE2u+0//gldeJpEclre3kykCTaHYLs7Bofq+I+6fXl3W15f3f/s/N3+IRNt8oIbmSZl KHgairwlpoXJClNGaa6Yuf+levl6ffUbTu2XhoPlfAb9Ivfn/S+r/fr7p7/vbj+t7SwPdiHl c/XV/X3uF6f8IRRZqYssS3PTflIbxh9MzrgY05Qq2j/sl5ViWZknYQkr16WSyf3de3S2vL+8 pRl4qjJm/uM4PbbecIkQYamnZahYGYtkambtXKciEbnkpdQM6WPCbCHkdGaGq2OP5YzNRZnx Mgp5S80XWqhyyWdTFoYli6dpLs1MjcflLJaTnBkBZxSzx8H4M6ZLnhVlDrQlRWN8JspYJnAW 8km0HHZSWpgiKzOR2zFYLjrrspvRkISawF+RzLUp+axIHjx8GZsKms3NSE5EnjArqVmqtZzE YsCiC50JOCUPecESU84K+Eqm4KxmMGeKw24eiy2niSejb1ip1GWaGalgW0LQIdgjmUx9nKGY FFO7PBaD4Pc0ETSzjNnTYznVvu5FlqcT0SFHclkKlseP8HepROfcs6lhsG4QwLmI9f1V037W UDhNDZr86WXz5dPr7vn0Uh0+/VeRMCVQCgTT4tPHgarK/I9ykead45gUMg5h8aIUS/c93dNT MwNhwG2JUvif0jCNna2pmlrj94Lm6fQGLc2IefogkhKWo1XWNU7SlCKZw4bgzJU099fnNfEc TtkqpIST/uWX1hDWbaURmrKHcAQsnotcgyT1+nUJJStMSnS2ov8Agijicvoks4FS1JQJUK5o UvzUNQBdyvLJ1yP1EW6AcJ5+Z1bdiQ/pdm7vMeAMiZV3Zznukr4/4g0xIAglK2LQyFQblMD7 X37d7rbVh86J6Ec9lxknx3bnD+Kf5o8lM+A3ZiRfoQUYQd9RWlVjBThf+BYcf9xIKoh9cDh9 Ofw8HKvXVlLPphy0wuolYeWBpGfpgqbkQot87syYAnfbkXaggqvlYFGcBvVMis5YrgUytW0c 3ahOC+gDpsvwWZgOjVCXJWSG0Z3n4CdCdBMxQ+v7yGNiXVbj5+02DX0Njgd2JzH6XSK615KF /y60IfhUigYP59IchNm8VvsDdRazJ/QdMg0l78pkkiJFhrEg5cGSScoMfDCej11prrs8Dmdl xSezOvwIjjClYLV9Dg7H1fEQrNbr3Wl73Gy/tXMzkj84x8h5WiTGneX5U3jWdj9bMi3kMILU aWzlZTShnBeBHu8LjPZYAq37QfgTrDVsF2URtWPudteD/mjENY5CThNHB+QWx2h7VX+mPSaH ksSUT9ARkWzWuwDCSq5ovZcP7h8+jS4A0TqnBOgldJJHufkJKgwwFAmCO3D0ZRQXetZdNJ/m aZFpchpudPQSloleMYIuepHxA9i/ufVweUgfPT9DDDQLKOoWiCdcEEsfcvcBG0vA2sgEzI0e uJJChpedcAC128QgKVxk1kRZKD7ok3GdPcCEQCpxRi3VCVh3BxUYeAkWOKf3EACWAsEqa6NC Mz3qSL/LEc1Y4tN2gIKAlsYK3TLkMjEPHkmklXKwfrovQKkyKnwzLoxYkhSRpb59kNOExREt LHaBHpo1ux6anoEDJSlM0i6dhXMJS6vPg95TGHPC8lx6jh00hz9kKew7WluT5vTRPeD4j4r+ xCSL3pUJlDkLL/oLb7YEQ5JQhEPBhj7l2YV1zvvyogdgrPGtw/Gs2n/d7V9X23UViD+rLfgD Bp6Bo0cAv9VaZc/gdXCARJhzOVc2RiDXNFeuf2ldhk+gmxA1p4Vax2ziIRQUStJxOunOF/vD AedT0QA4n9YaiFERcpQAqWUk+ciHdXQwjWQ88IHdg0kdR8cQNS1loqST/u4k/12oDLDMRHiE w0VUNAjA79lUCgTWoHJo5DkXWvvmJiJYm8RjgTiq12PgdfB40bmBfy0nesGGsYMERUBXBJMz A9LDMAR0rbkwJAE8Ad3BtWKcFVGG3dHLFA4sl+GQCjs9aLHLsgPN0vRhQMRECPxt5LRICwIS QqRnQVoNdon8AxhXIyPAIhakEgxamDoAICfmwlCX3yoXM2mEjX7HWABC9EeIQBDjWm9kewyG zMVUgx8NXYaqPuGSZcM9wWVDq9PrAW22ALUUzNm+AU3JJQhOS9b2i0NvDVYN2k2RJ4BjYXNk N103tGHEic1YHiIgKjKYoBHc1MCCGoT4fmOm8noXwkINpdhuaqt/w10EDOjQWZSL8ZE6KSs1 iwSEAhlmuAYD1K0uVvfQwrTwJH8glixdHNXE/8TkteBoQ0swL2a0vVMAWllcTGXSs+KdZp+d AA67aajeduM7odiQBIebiB4SHXHA6RQx8zjYETeIdOoLMUbMntSHmWHgBjsk5yPL4rZYWhYn GlEOIf2QjQh7PCYlwXhX1Pk6TJ0N1SUN69PKBEfv0kkTp2ERg5VDeytilOOYsB2WAvqcqnFq c5w7HjCIJbgH0m71e931JSDNHhurZOKe/LSfhbnReQxMHk8Ka3Io/B+DxADq5A8LUPHOfFMI pgA61qnR6xGB2dx/T9Yg5oQgufVrUfSOq7STnuOq7bnTmBF5UhtQsLhJCuULGgH7mCm4MXII BjyL6XTqXix4ScPuToA8PDmmUoukF+U0bSPA73KePJ3/9mV1qJ6DHw4zvu13XzcvvXzBeXzk Lhtw00u0OPtTe0/nXWcCdaSTmcWoQyOEvL/swHGnEMTGNapiwBiDSU3BL3TXNUFXQXSzCW/4 UAbaXiTI1M9L1XQr6I7+Ho3su8jBXfs6d4n93v3MOTMpOvVcLQYcaBr+KESByQhYhM2E+Vny RcPQBnCwYU/98MaedbbfravDYbcPjj/fXI7oa7U6nvbVoXtV94TKGvbTrC10VnQ2AW8LIsHA +YOXROPq58IsXsOKWXCadQomIJI+cwMRBuhJSMN7/IpYGrAoeIHzXiBc33HIXL6XR4FzMs5l lBb9eCLH2SMgEIg/wUlNCzq7D5ZrkqbGXYu0KnBzd0uHqp/fIRhNB2JIU2pJKdStvVxtOcHo GlkoKemBzuT36fTWNtQbmvrgWdjD7572O7qd54VO6RBdWSchPGGdWsgE0ELGPROpydd0akKJ mHnGnYo0FNPl5TvUMqa9i+KPuVx693suGb8u6esRS/TsHYfYzdMLjZBXM2pz7rm1t4qAWbv6 KlbPZGTuP3dZ4ssBrTd8Bo4EDAGdMkQGtHKWyeZkdNFJ5iEZFKDfUEPs25thczrvtyiZSFUo CyYiCK3ix/68bXjETax0L3CHqWBchYhVxIBGKaQDI4KFdwaqg6HrZnu+vXqHhsJUSLCDCrEi HxMsBlXCMHKsQnHX3pqmDIJRm4ggDztUFGpL7M23Bmd9Xr8QKjMj/N+0z9MYcAbL6axyzeWV NtyETNI2zR5aX06cR+vkt153281xt3fApf1qJ+KEPQYDvvBsghVYAZDzERCjx+56CSYFEZ/Q LlPe0cATP5gL9AeRXPoy+QARQOpAy/z7ov3rgfOTVIoxSfE6aeCG6qYbOhKrqbc3VB5srnQW g5O87t0jta0ImT0b6liu6I+25P84wiU1L1u1kUKIIMz9xd/8wv1nYIYYZX/OkBfWXIKNyh+z YXImAmThqIyo9rCRvJ9sDUhzQYxXrR1rIWOUw7gBG3gBWoj7i3Ow8F7fZlKKJYXNQbRY5jwj RyMWXXfuj1ZaG+/6dfIp7XAQWpluiOtCYKEmfXjca64HHaUZmwhiWmSDHQul5hA8dgfux3o1 sHKVHclAY86TRlHJjJ2CNW43g9w09+eBZ49gQsIwL423mm0uc7CzKYbCvUIErQjmpsTARuXu 3jnM728u/nXbsStEssEfmLp0oZlBuLtgGaX33ZKmh57281iwxHprOhHjiQeesjSl89hPk4LG Tk96fI3QgP76+G0BUZNz7rkakVsvByLnCRvAjUxAX2eKee4YrF1EQFFOZIo1OnleZMNT75lo rInACHRxf9sRF2Vy2vDao3DZG+8EYAv8cZSLbgB40yx1CpC20k/l5cUFleV7Kq8+X/SU5qm8 7rMORqGHuYdhhgHSLMeKAvqeTCwFddKoTZKDkYOjzNE4Xw5tcy4wjWrzse/1t7ca0P9q0L2+ aZqHmr4q5Cq04frEJ79gWDG/H4eGustz8GP3V7UPAH6svlWv1fZoQ2rGMxns3rAAthdW10ku 2rbQkqIjOfomiH8Q7av/PVXb9c/gsF69DBCPBbW5+IPsKZ9fqiGztxjFCjKaDH3mw9u9LBbh aPDJ6dAsOvg14zKojuuPH3pIjFMgE1ptvW0sbL0ctjW1NWF12HzbLlb7KsC+fAf/0Ke3t90e 5lgfALSL7fPbbrM9Dr4Ffje0DvS9fCWVPnJlsPXlSbeDJ0OAkkeS0thTHAYiS8d/iTCfP1/Q kWPG0f35DcqjjiajUxF/V+vTcfXlpbL13IEFy8dD8CkQr6eX1UhGJ+A8lcH0M/mhmqx5LjPK /bmca1r08o91J2x+b1AlPfkMjF7xKoeKtpyOXw+rGevUmkwH3gP2d7RFYfXnBqKHcL/5092I t6Wgm3XdHKRjdS7cbfdMxJkvqhJzozJPehrMXhIyzIv7giU7fCRztQD37wqPSNZoAQrEQs8k 0NMubDUPtY+dueJFf5jLuXcxlkHMc09qzzFgPq8eBgw4BN708kBaO+ky2pE3RXdgeeCzkpM5 4i4X3gw1VY+d0Ja5YuoQtjCKiKwoWq5nKwS981WG3u40IqbhblewSv5cEw+grX4g0B6qaxrN IJkrMbRsanNYU9OCE1SPmFYmJwfAJ041JlYRswz3rN3+nNEOh1+RExQC9lUFh/MU2w9aSvmv a768HXUz1d+rQyC3h+P+9GqLTw7fwZo/B8f9anvAoQJwXlXwDGvdvOE/m9Wzl2O1XwVRNmVg uPavf6ETeN79tX3ZrZ4DVxse/IpecLOv4BNX/EPTVW6P1UsA6h/8d7CvXuxblkN/b1sWPHun 4g1NcxkRzfM0I1rbgWa7w9FL5Kv9M/UZL//u7Zyp10dYQaBaiPErT7X6MLRXOL/zcO3p8JkH /Cxjex3jJbKoaNQ49WQmkO2d2mVXolEvVstaljtHcXagWiLW6oWq2Oa7gVCMg1dP9aye4LgU Vm7fTsfxB1tfnmTFWMhncEpWzuSnNMAuffSGtbz/P823rL37d6YEqVcc1GG1BlGnNN0YOo8G xtBXFgekBx8NZwVwGT3BAPi0+5IpWbpyRc8Nx+K9uCaZ+8xKxu9+v779u5xmnrq9RHM/EWY0 dQGbP4NpOPzXg6IhmOLDu0InJ1ecFA9Pba/O6Ly8zhRNmGm6PcvGMpuZLFi/7NY/hsZKbC18 g3gHlQ0DDEAx+OQFQyC7IwAlVIb1accdjFcFx+9VsHp+3iBkWb24UQ8fe/BYJtzkdNiDxzBQ 6zNt4YGmmFMt2dxTw2qpGEXT+M/R8Vo0pgV+tvAVbZuZyBWj19E8OaCyQHrSfYXlbNRuu1kf Ar152ax322CyWv94e1lte8ES9CNGm3CAGJ3hWmA7yJk4v356OW6+nrZrPJ3GRj2fjXlr5aLQ IjbaBCIxT3UpaEmdGcQfEB9fe7s/CJV5ACWSlbm9/pfnOgnIWvnCFDZZfr64eH/qGE77buWA bGTJ1PX15yXe8LDQc8uJjMpjMVz5kfEgSyVCyZp7+NEBTfert+8oCoRlCPvXyA6q8Cz4lZ2e Nzvw2+cb9g+jl7COWYVBvPmyX+1/Bvvd6QiQp3fq3FtgA59Gb0vYX9s/2q9eq+DL6etXcCbh 2JlEtEJjSU5snVfMQ2pLzpzzKcOkmwfOp0VCXTMUoGjpDCN8aUwsMCSXrFPWhvTRQ1psPGff Z7wHDAo9jnGxzWLJ5z4kwvbs+88DvmwO4tVP9LJjPcOvgSGlvVKaWfqSCzknOZA6ZeHUY9oM hDi0+GLHIs6k1xcXC/rElPLog1Dam4RLBMSIIqS/5IpF5UTCIT0ShyhCxpuIGiL/ovPm1JJG B5iD9QFR7Tcofnlze3d5V1NaVTX4/oppT1CpGBH7ubhdMQjoyETbY8KxPtKT1CqWodSZ7+1L 4TEpNrPvA5zzzR5mQYkXdpMpnFp/2DrEW+93h93XYzD7+Vbtf5sH304VhBGE4XGxMtpD7wUA aOfU91DLXnPVdTBUMN2xPxDNiTOvp7Ju0ZQljQGtRTB6d9r3vFozevygc17Ku6vPnVI/aBVz Q7RO4vDc2h6fUSIGAOMp7J85jFhy9R8YlCnokogzh1H0czKhagbQN0+AIuNJSmf4ZKpU4fU9 efW6O1YY/FGyhPkUg/E2H3d8ez18I/tkSjdSOOqlYaRftX2fF6RbiEY2bx+Cw1u13nw9p77O 5pS9vuy+QbPe8aGlnewhKl/vXina5qNaUu1/nFYv0GXYpz2GIllKf6ICpl56tj+zIj7MgLfH tzRe8GFvVOlz85iFbDH2xZicWcNejmNdBuo3BTOq2LJM8m4VZEOZX5fSc7MlM6xc9vkLi6/t k4Y8jX3xW6TGooPOr/tMc5SA83lHgLflQ5ow9GVXXi4MUrIlK6/uEoUBEe29elw4nj9S4J6L M8XH0IAoD6Gsa87GJp1tn/e7zXOXDZBXnkoaM4fMk9H3xura0O3u8s/QKNAmxEbYD8JMYlWR Hl8eRU0uLRxrnAg9+eUmBQ0r8d1ahiKOy3xCG8yQhxPmK/JMp7E4f4LIIH7brzoZwF7CLMIb DSe3HScTuooziJA7L506m1I/umScDhvFEi0zsLkyBV/yyxZAI4fP5cIIddWIr54g0vaRjCfJ 8w5NOlrpfbkasXd6/1Gkhk6sWQo39L5gcj3SN6XnOiPCWj0PDV9sAdwakJ3ordbfB4GKHtUg OFU+VKfnnb3Fao+8tQzgFH2ftzQ+k3GYC/oksOzed02D73tpFOR+gOV9aumFa+7/QEo8A+B1 mJUy91aRZkri8ZbWLz+/r9Y/+m/+7c8WgW+KYjbVHdRue73tN9vjD5teen6tAEu0uLqdsE6t 0E/tD7g05Sv3v5/Li0HXsN5qxHHTNRR4S4QIHZDm6DdQ3JHuXt/glH+zv2MA4rH+cbDzWrv2 PQX53bBY+UMrtS3BKsHE4O9IZbngEMl63iM7VlXYH/oR5AsDVwqOo91fXlx1VodPNLKSaVV6 nwbj0wL7BaZp+18koEqYI1GT1POC2VW1LZJ3r+oi6rpsJvCiULuVjR/6auF+awuET2H6jFaJ AZPb1jTxZO/q2aT2Z0AEe2jKjzzQGUEQiHz/fqs3lHsk0wiuAsi8/xmE1ZfTt2/D2k/cp/9r 5Fp624Zh8F/pcYdhaNdh2NV2nEaNI7t+5NGLMQzB0MOKYm2B7d+PD9myZVLZbSsZ25IokhL5 fQQEaDQnHLAf6dNdlaYprebt+TF1SYji0KoDrTK9hxlUkXhukBBsC5it5RoNksgbGOPWNZrv Ya291JM2Xrw4HTg4BG2EM0Hk8a49ETkk4kOlr8UYsS6IlkYazCCODXoTFEVddR/s4qqAU+n7 C7uRzffnn/OTRrluA9Sp7NKX6FTlc1AIEcAyMYmodHgQL6gnNmdhI8AuK4MMRJKHDaIsxEMq tmIsurVUN8lith5kKlv4v2DK8Q3bPK+CXUGTi1Pud+XVh9eXp2cqRHy8+vX+dv5zhn9gi9Cn eZOQW0vhfiE0LySpiLYiHA6shCQBhypRMmrWpVwv4gHqch9P9+gBeEEaeclwh1bAlF34FngN 4bSbvFjrECl6KZjhiKSSTW2cB/cw7frIURvKD0EfjxQ6nW3yHHFVkUKgc1Ts6GIj1Vh2nFc2 lzSamDceIOgxG8lqGIttTSIkUkgnJIcVsgaNbejieiDKnFAJUY3/eoy+XsSo9ODceGyTOFav vtaD8jCRfV7XZQ3u4z7Xu6S5pVnUGRKcEaGvMGlSbFh3NvMcPyHQfZTe1Um1kXUG1gSRTGIu JHC4RCngxDsG0ELeCKfKQMX1hvI3MDlCiPx3P9wN0NxJRo4b3U+An0V9ZWcUDkujRaovyJvb 8+tbYLbUmoUbiggRZdvNY9LULxni03XLTAmxq8oJ1AAhq4+rsbv8+iXut+iTN/lR7WzjMUFi bu9cs57sEEhvC4qtcnVLCkTIJDdHkjw1rXZHQvKuUy6QSFpj+W/R8RyMVasQrg0D+y+0v/Nn rFTyL8jb1Mmm9NUyb47cN+/jSbKrZFi3B+Zv71azWhD+P5aTdmmTWHgypJTIJMb4c28vHgHB irbsrcZxRRrx/HdPYJKGOyjzWRkS6ymQkaZlw7AThWGNUQwRDi+qy7RounrB3OvE3Lhsssw1 ovMguTSuSIlcTt6sXLCAraqTDGF1S/HlpmRyXyqF9tfHb9c+TQ1lMMc3sozN1TPGzqUER7xd yOhl0w5uL1DO/qNGZHuMOjZo3R2n1EXA6SdOc/CsSpa+28lGkrwJaW+wWJCtKCWKEbjar5VA 3tkD+AiIviqWPVREHHsztsicf7z/fnr7K13AbPOTcoGWZ11t2hPErbyhMgXRWER1tTvGGeOS lsW2ENUxxUBc3LI5O1gl/3XJBMAWSuf8vXinq5Pv7megKndMNo86vVhqbFKfhMDCx6hls4j7 3chU1dY2q06wpuWOBu7HMVUpcqtIKW4wszVEj6UcsRRDJ30gCv7subGQ4oHYFavCzMnPsjrr s8y0sgWA9EYG2OLv2pvrlZGDL4pNCxmxJr2VS0ogkQkKQCC3PxUmpcdpvL+ZTFRALL6O9ZZR CwK63qdQdLi6/RzPfY6PyIofEfVpdi9aaoNLNwV68p/Qd4egzMaRws8SUFuWlVobQQVql1A7 hyEZVga+WsmXKsRorJJPOmCnJgwhiqG5NtR4ZWY8Qy5jlOb/H42ODCE2YQAA --vkogqOf2sHV7VnPd-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 6 Dec 2017 11:26:15 -0700 From: Ross Zwisler To: Matthew Wilcox Cc: linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org, Ross Zwisler Subject: Re: [PATCH v3] mm: Add unmap_mapping_pages Message-ID: <20171206182615.GA22533@linux.intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> <20171206142627.GD32044@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171206142627.GD32044@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: On Wed, Dec 06, 2017 at 06:26:27AM -0800, Matthew Wilcox wrote: > v3: > - Fix compilation > (I forgot to git commit --amend) > - Added Ross' Reviewed-by > v2: > - Fix inverted mask in dax.c > - Pass 'false' instead of '0' for 'only_cows' > - nommu definition > > --- 8< --- > > From df142c51e111f7c386f594d5443530ea17abba5f Mon Sep 17 00:00:00 2001 > From: Matthew Wilcox > Date: Tue, 5 Dec 2017 00:15:54 -0500 > Subject: [PATCH v3] mm: Add unmap_mapping_pages Just FYI, the above scissors doesn't allow me to apply the patch using git version 2.14.3: $ git am --scissors ~/patch/out.patch Patch is empty. When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". It's mad about the second set of mail headers in the body of your mail, and tries to separate into a second patch. You can get around this either by a) not having the second set of headers (From:, Date:, Subject:), or by including the extra info in a separate block below the --- line, i.e.: ... Signed-off-by: Matthew Wilcox Reported-by: "zhangyi (F)" Reviewed-by: Ross Zwisler --- v3: - Fix compilation (I forgot to git commit --amend) - Added Ross' Reviewed-by v2: - Fix inverted mask in dax.c - Pass 'false' instead of '0' for 'only_cows' - nommu definition --- fs/dax.c | 19 ++++++------------- include/linux/mm.h | 26 ++++++++++++++++---------- ... - Ross -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 6 Dec 2017 06:26:27 -0800 From: Matthew Wilcox To: linux-mm@kvack.org Cc: "zhangyi (F)" , linux-fsdevel@vger.kernel.org, Ross Zwisler Subject: [PATCH v3] mm: Add unmap_mapping_pages Message-ID: <20171206142627.GD32044@bombadil.infradead.org> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: v3: - Fix compilation (I forgot to git commit --amend) - Added Ross' Reviewed-by v2: - Fix inverted mask in dax.c - Pass 'false' instead of '0' for 'only_cows' - nommu definition --- 8< --- >>From df142c51e111f7c386f594d5443530ea17abba5f Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Tue, 5 Dec 2017 00:15:54 -0500 Subject: [PATCH v3] mm: Add unmap_mapping_pages Several users of unmap_mapping_range() would prefer to express their range in pages rather than bytes. Unfortuately, on a 32-bit kernel, you have to remember to cast your page number to a 64-bit type before shifting it, and four places in the current tree didn't remember to do that. That's a sign of a bad interface. Conveniently, unmap_mapping_range() actually converts from bytes into pages, so hoist the guts of unmap_mapping_range() into a new function unmap_mapping_pages() and convert the callers which want to use pages. Signed-off-by: Matthew Wilcox Reported-by: "zhangyi (F)" Reviewed-by: Ross Zwisler --- fs/dax.c | 19 ++++++------------- include/linux/mm.h | 26 ++++++++++++++++---------- mm/khugepaged.c | 3 +-- mm/memory.c | 43 +++++++++++++++++++++++++++++++------------ mm/nommu.c | 7 ------- mm/truncate.c | 23 +++++++---------------- 6 files changed, 61 insertions(+), 60 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 95981591977a..d0dc0278f067 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -44,6 +44,7 @@ /* The 'colour' (ie low bits) within a PMD of a page offset. */ #define PG_PMD_COLOUR ((PMD_SIZE >> PAGE_SHIFT) - 1) +#define PG_PMD_NR (PMD_SIZE >> PAGE_SHIFT) static wait_queue_head_t wait_table[DAX_WAIT_TABLE_ENTRIES]; @@ -375,8 +376,8 @@ static void *grab_mapping_entry(struct address_space *mapping, pgoff_t index, * unmapped. */ if (pmd_downgrade && dax_is_zero_entry(entry)) - unmap_mapping_range(mapping, - (index << PAGE_SHIFT) & PMD_MASK, PMD_SIZE, 0); + unmap_mapping_pages(mapping, index & ~PG_PMD_COLOUR, + PG_PMD_NR, false); err = radix_tree_preload( mapping_gfp_mask(mapping) & ~__GFP_HIGHMEM); @@ -538,12 +539,10 @@ static void *dax_insert_mapping_entry(struct address_space *mapping, if (dax_is_zero_entry(entry) && !(flags & RADIX_DAX_ZERO_PAGE)) { /* we are replacing a zero page with block mapping */ if (dax_is_pmd_entry(entry)) - unmap_mapping_range(mapping, - (vmf->pgoff << PAGE_SHIFT) & PMD_MASK, - PMD_SIZE, 0); + unmap_mapping_pages(mapping, index & ~PG_PMD_COLOUR, + PG_PMD_NR, false); else /* pte entry */ - unmap_mapping_range(mapping, vmf->pgoff << PAGE_SHIFT, - PAGE_SIZE, 0); + unmap_mapping_pages(mapping, vmf->pgoff, 1, false); } spin_lock_irq(&mapping->tree_lock); @@ -1269,12 +1268,6 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp, } #ifdef CONFIG_FS_DAX_PMD -/* - * The 'colour' (ie low bits) within a PMD of a page offset. This comes up - * more often than one might expect in the below functions. - */ -#define PG_PMD_COLOUR ((PMD_SIZE >> PAGE_SHIFT) - 1) - static int dax_pmd_load_hole(struct vm_fault *vmf, struct iomap *iomap, void *entry) { diff --git a/include/linux/mm.h b/include/linux/mm.h index ee073146aaa7..283d352c4e11 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1311,8 +1311,6 @@ void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, unsigned long end, unsigned long floor, unsigned long ceiling); int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma); -void unmap_mapping_range(struct address_space *mapping, - loff_t const holebegin, loff_t const holelen, int even_cows); int follow_pte_pmd(struct mm_struct *mm, unsigned long address, unsigned long *start, unsigned long *end, pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); @@ -1323,12 +1321,6 @@ int follow_phys(struct vm_area_struct *vma, unsigned long address, int generic_access_phys(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write); -static inline void unmap_shared_mapping_range(struct address_space *mapping, - loff_t const holebegin, loff_t const holelen) -{ - unmap_mapping_range(mapping, holebegin, holelen, 0); -} - extern void truncate_pagecache(struct inode *inode, loff_t new); extern void truncate_setsize(struct inode *inode, loff_t newsize); void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to); @@ -1343,6 +1335,10 @@ extern int handle_mm_fault(struct vm_area_struct *vma, unsigned long address, extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, unsigned long address, unsigned int fault_flags, bool *unlocked); +void unmap_mapping_pages(struct address_space *mapping, + pgoff_t start, pgoff_t nr, bool even_cows); +void unmap_mapping_range(struct address_space *mapping, + loff_t const holebegin, loff_t const holelen, int even_cows); #else static inline int handle_mm_fault(struct vm_area_struct *vma, unsigned long address, unsigned int flags) @@ -1359,10 +1355,20 @@ static inline int fixup_user_fault(struct task_struct *tsk, BUG(); return -EFAULT; } +static inline void unmap_mapping_pages(struct address_space *mapping, + pgoff_t start, pgoff_t nr, bool even_cows) { } +static inline void unmap_mapping_range(struct address_space *mapping, + loff_t const holebegin, loff_t const holelen, int even_cows) { } #endif -extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, - unsigned int gup_flags); +static inline void unmap_shared_mapping_range(struct address_space *mapping, + loff_t const holebegin, loff_t const holelen) +{ + unmap_mapping_range(mapping, holebegin, holelen, 0); +} + +extern int access_process_vm(struct task_struct *tsk, unsigned long addr, + void *buf, int len, unsigned int gup_flags); extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, void *buf, int len, unsigned int gup_flags); extern int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, diff --git a/mm/khugepaged.c b/mm/khugepaged.c index ea4ff259b671..1cd18e4347fe 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1399,8 +1399,7 @@ static void collapse_shmem(struct mm_struct *mm, } if (page_mapped(page)) - unmap_mapping_range(mapping, index << PAGE_SHIFT, - PAGE_SIZE, 0); + unmap_mapping_pages(mapping, index, 1, false); spin_lock_irq(&mapping->tree_lock); diff --git a/mm/memory.c b/mm/memory.c index 85e7a87da79f..1b783faffaec 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2791,9 +2791,38 @@ static inline void unmap_mapping_range_tree(struct rb_root_cached *root, } } +/** + * unmap_mapping_pages() - Unmap pages from processes. + * @mapping: The address space containing pages to be unmapped. + * @start: Index of first page to be unmapped. + * @nr: Number of pages to be unmapped. 0 to unmap to end of file. + * @even_cows: Whether to unmap even private COWed pages. + * + * Unmap the pages in this address space from any userspace process which + * has them mmaped. Generally, you want to remove COWed pages as well when + * a file is being truncated, but not when invalidating pages from the page + * cache. + */ +void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, + pgoff_t nr, bool even_cows) +{ + struct zap_details details = { }; + + details.check_mapping = even_cows ? NULL : mapping; + details.first_index = start; + details.last_index = start + nr - 1; + if (details.last_index < details.first_index) + details.last_index = ULONG_MAX; + + i_mmap_lock_write(mapping); + if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root))) + unmap_mapping_range_tree(&mapping->i_mmap, &details); + i_mmap_unlock_write(mapping); +} + /** * unmap_mapping_range - unmap the portion of all mmaps in the specified - * address_space corresponding to the specified page range in the underlying + * address_space corresponding to the specified byte range in the underlying * file. * * @mapping: the address space containing mmaps to be unmapped. @@ -2811,7 +2840,6 @@ static inline void unmap_mapping_range_tree(struct rb_root_cached *root, void unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows) { - struct zap_details details = { }; pgoff_t hba = holebegin >> PAGE_SHIFT; pgoff_t hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT; @@ -2823,16 +2851,7 @@ void unmap_mapping_range(struct address_space *mapping, hlen = ULONG_MAX - hba + 1; } - details.check_mapping = even_cows ? NULL : mapping; - details.first_index = hba; - details.last_index = hba + hlen - 1; - if (details.last_index < details.first_index) - details.last_index = ULONG_MAX; - - i_mmap_lock_write(mapping); - if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root))) - unmap_mapping_range_tree(&mapping->i_mmap, &details); - i_mmap_unlock_write(mapping); + unmap_mapping_pages(mapping, hba, hlen, even_cows); } EXPORT_SYMBOL(unmap_mapping_range); diff --git a/mm/nommu.c b/mm/nommu.c index 17c00d93de2e..4b9864b17cb0 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1788,13 +1788,6 @@ unsigned long arch_get_unmapped_area(struct file *file, unsigned long addr, return -ENOMEM; } -void unmap_mapping_range(struct address_space *mapping, - loff_t const holebegin, loff_t const holelen, - int even_cows) -{ -} -EXPORT_SYMBOL(unmap_mapping_range); - int filemap_fault(struct vm_fault *vmf) { BUG(); diff --git a/mm/truncate.c b/mm/truncate.c index e4b4cf0f4070..c34e2fd4f583 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -179,12 +179,8 @@ static void truncate_cleanup_page(struct address_space *mapping, struct page *page) { if (page_mapped(page)) { - loff_t holelen; - - holelen = PageTransHuge(page) ? HPAGE_PMD_SIZE : PAGE_SIZE; - unmap_mapping_range(mapping, - (loff_t)page->index << PAGE_SHIFT, - holelen, 0); + pgoff_t nr = PageTransHuge(page) ? HPAGE_PMD_NR : 1; + unmap_mapping_pages(mapping, page->index, nr, false); } if (page_has_private(page)) @@ -715,19 +711,15 @@ int invalidate_inode_pages2_range(struct address_space *mapping, /* * Zap the rest of the file in one hit. */ - unmap_mapping_range(mapping, - (loff_t)index << PAGE_SHIFT, - (loff_t)(1 + end - index) - << PAGE_SHIFT, - 0); + unmap_mapping_pages(mapping, index, + (1 + end - index), false); did_range_unmap = 1; } else { /* * Just zap this page */ - unmap_mapping_range(mapping, - (loff_t)index << PAGE_SHIFT, - PAGE_SIZE, 0); + unmap_mapping_pages(mapping, index, + 1, false); } } BUG_ON(page_mapped(page)); @@ -753,8 +745,7 @@ int invalidate_inode_pages2_range(struct address_space *mapping, * get remapped later. */ if (dax_mapping(mapping)) { - unmap_mapping_range(mapping, (loff_t)start << PAGE_SHIFT, - (loff_t)(end - start + 1) << PAGE_SHIFT, 0); + unmap_mapping_pages(mapping, start, end - start + 1, false); } out: cleancache_invalidate_inode(mapping); -- 2.15.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 5 Dec 2017 16:01:23 -0700 From: Ross Zwisler To: Matthew Wilcox Cc: linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <20171205230123.GB20978@linux.intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: On Tue, Dec 05, 2017 at 07:44:53AM -0800, Matthew Wilcox wrote: > v2: > - Fix inverted mask in dax.c > - Pass 'false' instead of '0' for 'only_cows' > - nommu definition > > >From ceee2e58548a5264b61000c02371956a1da3bee4 Mon Sep 17 00:00:00 2001 > From: Matthew Wilcox > Date: Tue, 5 Dec 2017 00:15:54 -0500 > Subject: [PATCH] mm: Add unmap_mapping_pages > > Several users of unmap_mapping_range() would much prefer to express > their range in pages rather than bytes. Unfortuately, on a 32-bit > kernel, you have to remember to cast your page number to a 64-bit type > before shifting it, and four places in the current tree didn't remember > to do that. That's a sign of a bad interface. > > Conveniently, unmap_mapping_range() actually converts from bytes into > pages, so hoist the guts of unmap_mapping_range() into the new function > unmap_mapping_pages() and convert the callers which want to use pages. > > Signed-off-by: Matthew Wilcox > Reported-by: "zhangyi (F)" Looks good. You can add: Reviewed-by: Ross Zwisler -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 5 Dec 2017 07:44:53 -0800 From: Matthew Wilcox To: linux-mm@kvack.org Cc: "zhangyi (F)" , linux-fsdevel@vger.kernel.org Subject: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: owner-linux-mm@kvack.org List-ID: v2: - Fix inverted mask in dax.c - Pass 'false' instead of '0' for 'only_cows' - nommu definition >>From ceee2e58548a5264b61000c02371956a1da3bee4 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Tue, 5 Dec 2017 00:15:54 -0500 Subject: [PATCH] mm: Add unmap_mapping_pages Several users of unmap_mapping_range() would much prefer to express their range in pages rather than bytes. Unfortuately, on a 32-bit kernel, you have to remember to cast your page number to a 64-bit type before shifting it, and four places in the current tree didn't remember to do that. That's a sign of a bad interface. Conveniently, unmap_mapping_range() actually converts from bytes into pages, so hoist the guts of unmap_mapping_range() into the new function unmap_mapping_pages() and convert the callers which want to use pages. Signed-off-by: Matthew Wilcox Reported-by: "zhangyi (F)" --- fs/dax.c | 19 ++++++------------- include/linux/mm.h | 14 ++++++++++---- mm/khugepaged.c | 3 +-- mm/memory.c | 43 +++++++++++++++++++++++++++++++------------ mm/nommu.c | 7 ------- mm/truncate.c | 23 +++++++---------------- 6 files changed, 55 insertions(+), 54 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 95981591977a..d0dc0278f067 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -44,6 +44,7 @@ /* The 'colour' (ie low bits) within a PMD of a page offset. */ #define PG_PMD_COLOUR ((PMD_SIZE >> PAGE_SHIFT) - 1) +#define PG_PMD_NR (PMD_SIZE >> PAGE_SHIFT) static wait_queue_head_t wait_table[DAX_WAIT_TABLE_ENTRIES]; @@ -375,8 +376,8 @@ static void *grab_mapping_entry(struct address_space *mapping, pgoff_t index, * unmapped. */ if (pmd_downgrade && dax_is_zero_entry(entry)) - unmap_mapping_range(mapping, - (index << PAGE_SHIFT) & PMD_MASK, PMD_SIZE, 0); + unmap_mapping_pages(mapping, index & ~PG_PMD_COLOUR, + PG_PMD_NR, false); err = radix_tree_preload( mapping_gfp_mask(mapping) & ~__GFP_HIGHMEM); @@ -538,12 +539,10 @@ static void *dax_insert_mapping_entry(struct address_space *mapping, if (dax_is_zero_entry(entry) && !(flags & RADIX_DAX_ZERO_PAGE)) { /* we are replacing a zero page with block mapping */ if (dax_is_pmd_entry(entry)) - unmap_mapping_range(mapping, - (vmf->pgoff << PAGE_SHIFT) & PMD_MASK, - PMD_SIZE, 0); + unmap_mapping_pages(mapping, index & ~PG_PMD_COLOUR, + PG_PMD_NR, false); else /* pte entry */ - unmap_mapping_range(mapping, vmf->pgoff << PAGE_SHIFT, - PAGE_SIZE, 0); + unmap_mapping_pages(mapping, vmf->pgoff, 1, false); } spin_lock_irq(&mapping->tree_lock); @@ -1269,12 +1268,6 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp, } #ifdef CONFIG_FS_DAX_PMD -/* - * The 'colour' (ie low bits) within a PMD of a page offset. This comes up - * more often than one might expect in the below functions. - */ -#define PG_PMD_COLOUR ((PMD_SIZE >> PAGE_SHIFT) - 1) - static int dax_pmd_load_hole(struct vm_fault *vmf, struct iomap *iomap, void *entry) { diff --git a/include/linux/mm.h b/include/linux/mm.h index ee073146aaa7..0359ee709434 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1311,8 +1311,6 @@ void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, unsigned long end, unsigned long floor, unsigned long ceiling); int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma); -void unmap_mapping_range(struct address_space *mapping, - loff_t const holebegin, loff_t const holelen, int even_cows); int follow_pte_pmd(struct mm_struct *mm, unsigned long address, unsigned long *start, unsigned long *end, pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); @@ -1343,6 +1341,10 @@ extern int handle_mm_fault(struct vm_area_struct *vma, unsigned long address, extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, unsigned long address, unsigned int fault_flags, bool *unlocked); +void unmap_mapping_pages(struct address_space *mapping, + pgoff_t start, pgoff_t nr, bool even_cows); +void unmap_mapping_range(struct address_space *mapping, + loff_t const holebegin, loff_t const holelen, int even_cows); #else static inline int handle_mm_fault(struct vm_area_struct *vma, unsigned long address, unsigned int flags) @@ -1359,10 +1361,14 @@ static inline int fixup_user_fault(struct task_struct *tsk, BUG(); return -EFAULT; } +static inline void unmap_mapping_pages(struct address_space *mapping, + pgoff_t start, pgoff_t nr, bool even_cows) { } +static inline void unmap_mapping_range(struct address_space *mapping, + loff_t const holebegin, loff_t const holelen, int even_cows) { } #endif -extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, - unsigned int gup_flags); +extern int access_process_vm(struct task_struct *tsk, unsigned long addr, + void *buf, int len, unsigned int gup_flags); extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, void *buf, int len, unsigned int gup_flags); extern int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, diff --git a/mm/khugepaged.c b/mm/khugepaged.c index ea4ff259b671..1cd18e4347fe 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1399,8 +1399,7 @@ static void collapse_shmem(struct mm_struct *mm, } if (page_mapped(page)) - unmap_mapping_range(mapping, index << PAGE_SHIFT, - PAGE_SIZE, 0); + unmap_mapping_pages(mapping, index, 1, false); spin_lock_irq(&mapping->tree_lock); diff --git a/mm/memory.c b/mm/memory.c index 85e7a87da79f..1b783faffaec 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2791,9 +2791,38 @@ static inline void unmap_mapping_range_tree(struct rb_root_cached *root, } } +/** + * unmap_mapping_pages() - Unmap pages from processes. + * @mapping: The address space containing pages to be unmapped. + * @start: Index of first page to be unmapped. + * @nr: Number of pages to be unmapped. 0 to unmap to end of file. + * @even_cows: Whether to unmap even private COWed pages. + * + * Unmap the pages in this address space from any userspace process which + * has them mmaped. Generally, you want to remove COWed pages as well when + * a file is being truncated, but not when invalidating pages from the page + * cache. + */ +void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, + pgoff_t nr, bool even_cows) +{ + struct zap_details details = { }; + + details.check_mapping = even_cows ? NULL : mapping; + details.first_index = start; + details.last_index = start + nr - 1; + if (details.last_index < details.first_index) + details.last_index = ULONG_MAX; + + i_mmap_lock_write(mapping); + if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root))) + unmap_mapping_range_tree(&mapping->i_mmap, &details); + i_mmap_unlock_write(mapping); +} + /** * unmap_mapping_range - unmap the portion of all mmaps in the specified - * address_space corresponding to the specified page range in the underlying + * address_space corresponding to the specified byte range in the underlying * file. * * @mapping: the address space containing mmaps to be unmapped. @@ -2811,7 +2840,6 @@ static inline void unmap_mapping_range_tree(struct rb_root_cached *root, void unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows) { - struct zap_details details = { }; pgoff_t hba = holebegin >> PAGE_SHIFT; pgoff_t hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT; @@ -2823,16 +2851,7 @@ void unmap_mapping_range(struct address_space *mapping, hlen = ULONG_MAX - hba + 1; } - details.check_mapping = even_cows ? NULL : mapping; - details.first_index = hba; - details.last_index = hba + hlen - 1; - if (details.last_index < details.first_index) - details.last_index = ULONG_MAX; - - i_mmap_lock_write(mapping); - if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root))) - unmap_mapping_range_tree(&mapping->i_mmap, &details); - i_mmap_unlock_write(mapping); + unmap_mapping_pages(mapping, hba, hlen, even_cows); } EXPORT_SYMBOL(unmap_mapping_range); diff --git a/mm/nommu.c b/mm/nommu.c index 17c00d93de2e..4b9864b17cb0 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1788,13 +1788,6 @@ unsigned long arch_get_unmapped_area(struct file *file, unsigned long addr, return -ENOMEM; } -void unmap_mapping_range(struct address_space *mapping, - loff_t const holebegin, loff_t const holelen, - int even_cows) -{ -} -EXPORT_SYMBOL(unmap_mapping_range); - int filemap_fault(struct vm_fault *vmf) { BUG(); diff --git a/mm/truncate.c b/mm/truncate.c index e4b4cf0f4070..c34e2fd4f583 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -179,12 +179,8 @@ static void truncate_cleanup_page(struct address_space *mapping, struct page *page) { if (page_mapped(page)) { - loff_t holelen; - - holelen = PageTransHuge(page) ? HPAGE_PMD_SIZE : PAGE_SIZE; - unmap_mapping_range(mapping, - (loff_t)page->index << PAGE_SHIFT, - holelen, 0); + pgoff_t nr = PageTransHuge(page) ? HPAGE_PMD_NR : 1; + unmap_mapping_pages(mapping, page->index, nr, false); } if (page_has_private(page)) @@ -715,19 +711,15 @@ int invalidate_inode_pages2_range(struct address_space *mapping, /* * Zap the rest of the file in one hit. */ - unmap_mapping_range(mapping, - (loff_t)index << PAGE_SHIFT, - (loff_t)(1 + end - index) - << PAGE_SHIFT, - 0); + unmap_mapping_pages(mapping, index, + (1 + end - index), false); did_range_unmap = 1; } else { /* * Just zap this page */ - unmap_mapping_range(mapping, - (loff_t)index << PAGE_SHIFT, - PAGE_SIZE, 0); + unmap_mapping_pages(mapping, index, + 1, false); } } BUG_ON(page_mapped(page)); @@ -753,8 +745,7 @@ int invalidate_inode_pages2_range(struct address_space *mapping, * get remapped later. */ if (dax_mapping(mapping)) { - unmap_mapping_range(mapping, (loff_t)start << PAGE_SHIFT, - (loff_t)(end - start + 1) << PAGE_SHIFT, 0); + unmap_mapping_pages(mapping, start, end - start + 1, false); } out: cleancache_invalidate_inode(mapping); -- 2.15.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f200.google.com (mail-pf0-f200.google.com [209.85.192.200]) by kanga.kvack.org (Postfix) with ESMTP id C6FC66B0033 for ; Tue, 5 Dec 2017 10:44:55 -0500 (EST) Received: by mail-pf0-f200.google.com with SMTP id f7so438632pfa.21 for ; Tue, 05 Dec 2017 07:44:55 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org. [65.50.211.133]) by mx.google.com with ESMTPS id o30si260269pli.8.2017.12.05.07.44.53 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Dec 2017 07:44:54 -0800 (PST) Date: Tue, 5 Dec 2017 07:44:53 -0800 From: Matthew Wilcox Subject: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: owner-linux-mm@kvack.org List-ID: To: linux-mm@kvack.org Cc: "zhangyi (F)" , linux-fsdevel@vger.kernel.org v2: - Fix inverted mask in dax.c - Pass 'false' instead of '0' for 'only_cows' - nommu definition From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl0-f72.google.com (mail-pl0-f72.google.com [209.85.160.72]) by kanga.kvack.org (Postfix) with ESMTP id 2EE776B025F for ; Wed, 6 Dec 2017 09:26:29 -0500 (EST) Received: by mail-pl0-f72.google.com with SMTP id 33so1095321pll.9 for ; Wed, 06 Dec 2017 06:26:29 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org. [65.50.211.133]) by mx.google.com with ESMTPS id 11si2049952plb.316.2017.12.06.06.26.27 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Dec 2017 06:26:27 -0800 (PST) Date: Wed, 6 Dec 2017 06:26:27 -0800 From: Matthew Wilcox Subject: [PATCH v3] mm: Add unmap_mapping_pages Message-ID: <20171206142627.GD32044@bombadil.infradead.org> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: To: linux-mm@kvack.org Cc: "zhangyi (F)" , linux-fsdevel@vger.kernel.org, Ross Zwisler v3: - Fix compilation (I forgot to git commit --amend) - Added Ross' Reviewed-by v2: - Fix inverted mask in dax.c - Pass 'false' instead of '0' for 'only_cows' - nommu definition --- 8< --- From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f69.google.com (mail-pg0-f69.google.com [74.125.83.69]) by kanga.kvack.org (Postfix) with ESMTP id ED0E06B0033 for ; Thu, 7 Dec 2017 21:11:48 -0500 (EST) Received: by mail-pg0-f69.google.com with SMTP id i7so6687326pgq.7 for ; Thu, 07 Dec 2017 18:11:48 -0800 (PST) Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id c23si1898490plk.478.2017.12.07.18.11.45 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Dec 2017 18:11:46 -0800 (PST) Date: Fri, 8 Dec 2017 10:10:55 +0800 From: kbuild test robot Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <201712080802.7Qlq9cj1%fengguang.wu@intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: To: Matthew Wilcox Cc: kbuild-all@01.org, linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi Matthew, I love your patch! Yet something to improve: [auto build test ERROR on mmotm/master] [also build test ERROR on v4.15-rc2 next-20171207] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox/mm-Add-unmap_mapping_pages/20171208-072634 base: git://git.cmpxchg.org/linux-mmotm.git master config: i386-tinyconfig (attached as .config) compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): In file included from include/linux/memcontrol.h:29:0, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/x86/kernel/asm-offsets.c:13: include/linux/mm.h: In function 'unmap_shared_mapping_range': >> include/linux/mm.h:1328:2: error: implicit declaration of function 'unmap_mapping_range'; did you mean 'unmap_shared_mapping_range'? [-Werror=implicit-function-declaration] unmap_mapping_range(mapping, holebegin, holelen, 0); ^~~~~~~~~~~~~~~~~~~ unmap_shared_mapping_range include/linux/mm.h: At top level: >> include/linux/mm.h:1347:6: warning: conflicting types for 'unmap_mapping_range' void unmap_mapping_range(struct address_space *mapping, ^~~~~~~~~~~~~~~~~~~ include/linux/mm.h:1328:2: note: previous implicit declaration of 'unmap_mapping_range' was here unmap_mapping_range(mapping, holebegin, holelen, 0); ^~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[2]: *** [arch/x86/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [sub-make] Error 2 vim +1328 include/linux/mm.h e6473092bd Matt Mackall 2008-02-04 1307 2165009bdf Dave Hansen 2008-06-12 1308 int walk_page_range(unsigned long addr, unsigned long end, 2165009bdf Dave Hansen 2008-06-12 1309 struct mm_walk *walk); 900fc5f197 Naoya Horiguchi 2015-02-11 1310 int walk_page_vma(struct vm_area_struct *vma, struct mm_walk *walk); 42b7772812 Jan Beulich 2008-07-23 1311 void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, 3bf5ee9564 Hugh Dickins 2005-04-19 1312 unsigned long end, unsigned long floor, unsigned long ceiling); ^1da177e4c Linus Torvalds 2005-04-16 1313 int copy_page_range(struct mm_struct *dst, struct mm_struct *src, ^1da177e4c Linus Torvalds 2005-04-16 1314 struct vm_area_struct *vma); 0979639595 Ross Zwisler 2017-01-10 1315 int follow_pte_pmd(struct mm_struct *mm, unsigned long address, a4d1a88525 Jerome Glisse 2017-08-31 1316 unsigned long *start, unsigned long *end, 0979639595 Ross Zwisler 2017-01-10 1317 pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); 3b6748e2dd Johannes Weiner 2009-06-16 1318 int follow_pfn(struct vm_area_struct *vma, unsigned long address, 3b6748e2dd Johannes Weiner 2009-06-16 1319 unsigned long *pfn); d87fe6607c venkatesh.pallipadi@intel.com 2008-12-19 1320 int follow_phys(struct vm_area_struct *vma, unsigned long address, d87fe6607c venkatesh.pallipadi@intel.com 2008-12-19 1321 unsigned int flags, unsigned long *prot, resource_size_t *phys); 28b2ee20c7 Rik van Riel 2008-07-23 1322 int generic_access_phys(struct vm_area_struct *vma, unsigned long addr, 28b2ee20c7 Rik van Riel 2008-07-23 1323 void *buf, int len, int write); ^1da177e4c Linus Torvalds 2005-04-16 1324 ^1da177e4c Linus Torvalds 2005-04-16 1325 static inline void unmap_shared_mapping_range(struct address_space *mapping, ^1da177e4c Linus Torvalds 2005-04-16 1326 loff_t const holebegin, loff_t const holelen) ^1da177e4c Linus Torvalds 2005-04-16 1327 { ^1da177e4c Linus Torvalds 2005-04-16 @1328 unmap_mapping_range(mapping, holebegin, holelen, 0); ^1da177e4c Linus Torvalds 2005-04-16 1329 } ^1da177e4c Linus Torvalds 2005-04-16 1330 7caef26767 Kirill A. Shutemov 2013-09-12 1331 extern void truncate_pagecache(struct inode *inode, loff_t new); 2c27c65ed0 Christoph Hellwig 2010-06-04 1332 extern void truncate_setsize(struct inode *inode, loff_t newsize); 90a8020278 Jan Kara 2014-10-01 1333 void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to); 623e3db9f9 Hugh Dickins 2012-03-28 1334 void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); 750b4987b0 Nick Piggin 2009-09-16 1335 int truncate_inode_page(struct address_space *mapping, struct page *page); 2571873621 Andi Kleen 2009-09-16 1336 int generic_error_remove_page(struct address_space *mapping, struct page *page); 83f786680a Wu Fengguang 2009-09-16 1337 int invalidate_inode_page(struct page *page); 83f786680a Wu Fengguang 2009-09-16 1338 7ee1dd3fee David Howells 2006-01-06 1339 #ifdef CONFIG_MMU dcddffd41d Kirill A. Shutemov 2016-07-26 1340 extern int handle_mm_fault(struct vm_area_struct *vma, unsigned long address, dcddffd41d Kirill A. Shutemov 2016-07-26 1341 unsigned int flags); 5c723ba5b7 Peter Zijlstra 2011-07-27 1342 extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, 4a9e1cda27 Dominik Dingel 2016-01-15 1343 unsigned long address, unsigned int fault_flags, 4a9e1cda27 Dominik Dingel 2016-01-15 1344 bool *unlocked); dcd7006c23 Matthew Wilcox 2017-12-05 1345 void unmap_mapping_pages(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1346 pgoff_t start, pgoff_t nr, bool even_cows); dcd7006c23 Matthew Wilcox 2017-12-05 @1347 void unmap_mapping_range(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1348 loff_t const holebegin, loff_t const holelen, int even_cows); 7ee1dd3fee David Howells 2006-01-06 1349 #else dcddffd41d Kirill A. Shutemov 2016-07-26 1350 static inline int handle_mm_fault(struct vm_area_struct *vma, dcddffd41d Kirill A. Shutemov 2016-07-26 1351 unsigned long address, unsigned int flags) 7ee1dd3fee David Howells 2006-01-06 1352 { 7ee1dd3fee David Howells 2006-01-06 1353 /* should never happen if there's no MMU */ 7ee1dd3fee David Howells 2006-01-06 1354 BUG(); 7ee1dd3fee David Howells 2006-01-06 1355 return VM_FAULT_SIGBUS; 7ee1dd3fee David Howells 2006-01-06 1356 } 5c723ba5b7 Peter Zijlstra 2011-07-27 1357 static inline int fixup_user_fault(struct task_struct *tsk, 5c723ba5b7 Peter Zijlstra 2011-07-27 1358 struct mm_struct *mm, unsigned long address, 4a9e1cda27 Dominik Dingel 2016-01-15 1359 unsigned int fault_flags, bool *unlocked) 5c723ba5b7 Peter Zijlstra 2011-07-27 1360 { 5c723ba5b7 Peter Zijlstra 2011-07-27 1361 /* should never happen if there's no MMU */ 5c723ba5b7 Peter Zijlstra 2011-07-27 1362 BUG(); 5c723ba5b7 Peter Zijlstra 2011-07-27 1363 return -EFAULT; 5c723ba5b7 Peter Zijlstra 2011-07-27 1364 } dcd7006c23 Matthew Wilcox 2017-12-05 1365 static inline void unmap_mapping_pages(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1366 pgoff_t start, pgoff_t nr, bool even_cows) { } dcd7006c23 Matthew Wilcox 2017-12-05 1367 static inline void unmap_mapping_range(struct address_space *mapping, dcd7006c23 Matthew Wilcox 2017-12-05 1368 loff_t const holebegin, loff_t const holelen, int even_cows) { } 7ee1dd3fee David Howells 2006-01-06 1369 #endif f33ea7f404 Nick Piggin 2005-08-03 1370 :::::: The code at line 1328 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds :::::: CC: Linus Torvalds --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --vkogqOf2sHV7VnPd Content-Type: application/gzip Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --vkogqOf2sHV7VnPd-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f197.google.com (mail-pf0-f197.google.com [209.85.192.197]) by kanga.kvack.org (Postfix) with ESMTP id 2BF3A6B0033 for ; Thu, 7 Dec 2017 21:39:09 -0500 (EST) Received: by mail-pf0-f197.google.com with SMTP id n187so7394572pfn.10 for ; Thu, 07 Dec 2017 18:39:09 -0800 (PST) Received: from mga03.intel.com (mga03.intel.com. [134.134.136.65]) by mx.google.com with ESMTPS id g185si4689863pgc.796.2017.12.07.18.39.07 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Dec 2017 18:39:07 -0800 (PST) Date: Fri, 8 Dec 2017 10:38:55 +0800 From: kbuild test robot Subject: Re: [PATCH v2] mm: Add unmap_mapping_pages Message-ID: <201712080802.CQcwOznF%fengguang.wu@intel.com> References: <20171205154453.GD28760@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="XsQoSWH+UP9D9v3l" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171205154453.GD28760@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: To: Matthew Wilcox Cc: kbuild-all@01.org, linux-mm@kvack.org, "zhangyi (F)" , linux-fsdevel@vger.kernel.org --XsQoSWH+UP9D9v3l Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi Matthew, I love your patch! Yet something to improve: [auto build test ERROR on mmotm/master] [also build test ERROR on v4.15-rc2 next-20171207] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox/mm-Add-unmap_mapping_pages/20171208-072634 base: git://git.cmpxchg.org/linux-mmotm.git master config: i386-randconfig-a0-201749 (attached as .config) compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): In file included from include/linux/memcontrol.h:29:0, from include/linux/swap.h:9, from include/linux/suspend.h:5, from arch/x86/kernel/asm-offsets.c:13: include/linux/mm.h: In function 'unmap_shared_mapping_range': >> include/linux/mm.h:1328:2: error: implicit declaration of function 'unmap_mapping_range' [-Werror=implicit-function-declaration] unmap_mapping_range(mapping, holebegin, holelen, 0); ^ include/linux/mm.h: At top level: include/linux/mm.h:1347:6: warning: conflicting types for 'unmap_mapping_range' void unmap_mapping_range(struct address_space *mapping, ^ include/linux/mm.h:1328:2: note: previous implicit declaration of 'unmap_mapping_range' was here unmap_mapping_range(mapping, holebegin, holelen, 0); ^ cc1: some warnings being treated as errors make[2]: *** [arch/x86/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [sub-make] Error 2 vim +/unmap_mapping_range +1328 include/linux/mm.h e6473092b Matt Mackall 2008-02-04 1307 2165009bd Dave Hansen 2008-06-12 1308 int walk_page_range(unsigned long addr, unsigned long end, 2165009bd Dave Hansen 2008-06-12 1309 struct mm_walk *walk); 900fc5f19 Naoya Horiguchi 2015-02-11 1310 int walk_page_vma(struct vm_area_struct *vma, struct mm_walk *walk); 42b777281 Jan Beulich 2008-07-23 1311 void free_pgd_range(struct mmu_gather *tlb, unsigned long addr, 3bf5ee956 Hugh Dickins 2005-04-19 1312 unsigned long end, unsigned long floor, unsigned long ceiling); ^1da177e4 Linus Torvalds 2005-04-16 1313 int copy_page_range(struct mm_struct *dst, struct mm_struct *src, ^1da177e4 Linus Torvalds 2005-04-16 1314 struct vm_area_struct *vma); 097963959 Ross Zwisler 2017-01-10 1315 int follow_pte_pmd(struct mm_struct *mm, unsigned long address, a4d1a8852 Jerome Glisse 2017-08-31 1316 unsigned long *start, unsigned long *end, 097963959 Ross Zwisler 2017-01-10 1317 pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); 3b6748e2d Johannes Weiner 2009-06-16 1318 int follow_pfn(struct vm_area_struct *vma, unsigned long address, 3b6748e2d Johannes Weiner 2009-06-16 1319 unsigned long *pfn); d87fe6607 venkatesh.pallipadi@intel.com 2008-12-19 1320 int follow_phys(struct vm_area_struct *vma, unsigned long address, d87fe6607 venkatesh.pallipadi@intel.com 2008-12-19 1321 unsigned int flags, unsigned long *prot, resource_size_t *phys); 28b2ee20c Rik van Riel 2008-07-23 1322 int generic_access_phys(struct vm_area_struct *vma, unsigned long addr, 28b2ee20c Rik van Riel 2008-07-23 1323 void *buf, int len, int write); ^1da177e4 Linus Torvalds 2005-04-16 1324 ^1da177e4 Linus Torvalds 2005-04-16 1325 static inline void unmap_shared_mapping_range(struct address_space *mapping, ^1da177e4 Linus Torvalds 2005-04-16 1326 loff_t const holebegin, loff_t const holelen) ^1da177e4 Linus Torvalds 2005-04-16 1327 { ^1da177e4 Linus Torvalds 2005-04-16 @1328 unmap_mapping_range(mapping, holebegin, holelen, 0); ^1da177e4 Linus Torvalds 2005-04-16 1329 } ^1da177e4 Linus Torvalds 2005-04-16 1330 :::::: The code at line 1328 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds :::::: CC: Linus Torvalds --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --XsQoSWH+UP9D9v3l Content-Type: application/gzip Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --XsQoSWH+UP9D9v3l-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org