All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <tom.leiming@gmail.com>
To: kbuild test robot <lkp@intel.com>,
	sparclinux@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>
Cc: kbuild-all@01.org, Jens Axboe <axboe@fb.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-block <linux-block@vger.kernel.org>,
	Linux FS Devel <linux-fsdevel@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	Johannes Berg <johannes.berg@intel.com>
Subject: Re: [PATCH 32/60] block: implement sp version of bvec iterator helpers
Date: Sat, 17 Dec 2016 19:38:26 +0800	[thread overview]
Message-ID: <CACVXFVN1weJVc4A6v=g7oAeMN1Cczupm8ObnXR8E8UBTJ9NqZA@mail.gmail.com> (raw)
In-Reply-To: <201610291909.okAX73DP%fengguang.wu@intel.com>

Hi Guys,

On Sat, Oct 29, 2016 at 7:06 PM, kbuild test robot <lkp@intel.com> wrote:
> Hi Ming,

Thanks for the report!

>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.9-rc2 next-20161028]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> [Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
> [Check https://git-scm.com/docs/git-format-patch for more information]
>
> url:    https://github.com/0day-ci/linux/commits/Ming-Lei/block-support-multipage-bvec/20161029-163910
> config: sparc-defconfig (attached as .config)
> compiler: sparc-linux-gcc (GCC) 6.2.0
> reproduce:
>         wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         make.cross ARCH=sparc
>
> All error/warnings (new ones prefixed by >>):
>
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,


This issue should be caused by somewhere in sparc arch, and this patch
only adds '#include <linux/mm.h>' to 'include/linux/bvec.h' for using
nth_page().

So Cc sparc list.

Thanks,
Ming

>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/device.h:9,
>                     from include/linux/device.h:30,
>                     from include/linux/node.h:17,
>                     from include/linux/cpu.h:16,
>                     from include/linux/stop_machine.h:4,
>                     from kernel/sched/sched.h:10,
>                     from kernel/sched/loadavg.c:11:
>>> arch/sparc/include/asm/oplib_32.h:105:39: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>                                           ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:168:36: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>                                        ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:172:18: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>               struct linux_prom_registers *sbusregs, int nregs);
>                      ^~~~~~~~~~~~~~~~~~~~
> --
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/mp.c:12:
>>> arch/sparc/include/asm/oplib_32.h:105:39: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>                                           ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:168:36: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>                                        ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:172:18: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>               struct linux_prom_registers *sbusregs, int nregs);
>                      ^~~~~~~~~~~~~~~~~~~~
>>> arch/sparc/prom/mp.c:23:1: error: conflicting types for 'prom_startcpu'
>     prom_startcpu(int cpunode, struct linux_prom_registers *ctable_reg, int ctx, char *pc)
>     ^~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/mp.c:12:
>    arch/sparc/include/asm/oplib_32.h:105:5: note: previous declaration of 'prom_startcpu' was here
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>         ^~~~~~~~~~~~~
> --
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>>> arch/sparc/include/asm/oplib_32.h:105:39: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>                                           ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:168:36: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>                                        ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:172:18: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>               struct linux_prom_registers *sbusregs, int nregs);
>                      ^~~~~~~~~~~~~~~~~~~~
>>> arch/sparc/prom/ranges.c:57:6: error: conflicting types for 'prom_apply_obio_ranges'
>     void prom_apply_obio_ranges(struct linux_prom_registers *regs, int nregs)
>          ^~~~~~~~~~~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>    arch/sparc/include/asm/oplib_32.h:168:6: note: previous declaration of 'prom_apply_obio_ranges' was here
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>          ^~~~~~~~~~~~~~~~~~~~~~
>    In file included from include/linux/linkage.h:6:0,
>                     from include/linux/kernel.h:6,
>                     from include/linux/list.h:8,
>                     from include/linux/module.h:9,
>                     from arch/sparc/prom/ranges.c:9:
>    arch/sparc/prom/ranges.c:62:15: error: conflicting types for 'prom_apply_obio_ranges'
>     EXPORT_SYMBOL(prom_apply_obio_ranges);
>                   ^
>    include/linux/export.h:58:21: note: in definition of macro '___EXPORT_SYMBOL'
>      extern typeof(sym) sym;      \
>                         ^~~
>>> arch/sparc/prom/ranges.c:62:1: note: in expansion of macro 'EXPORT_SYMBOL'
>     EXPORT_SYMBOL(prom_apply_obio_ranges);
>     ^~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>    arch/sparc/include/asm/oplib_32.h:168:6: note: previous declaration of 'prom_apply_obio_ranges' was here
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>          ^~~~~~~~~~~~~~~~~~~~~~
>>> arch/sparc/prom/ranges.c:87:6: error: conflicting types for 'prom_apply_generic_ranges'
>     void prom_apply_generic_ranges(phandle node, phandle parent,
>          ^~~~~~~~~~~~~~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>    arch/sparc/include/asm/oplib_32.h:171:6: note: previous declaration of 'prom_apply_generic_ranges' was here
>     void prom_apply_generic_ranges(phandle node, phandle parent,
>          ^~~~~~~~~~~~~~~~~~~~~~~~~
> --
>    In file included from include/linux/bvec.h:25:0,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/oplib_32.h:11,
>                     from arch/sparc/include/asm/oplib.h:6,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from mm/init-mm.c:9:
>    include/linux/mm.h: In function 'is_vmalloc_addr':
>>> include/linux/mm.h:486:17: error: 'VMALLOC_START' undeclared (first use in this function)
>      return addr >= VMALLOC_START && addr < VMALLOC_END;
>                     ^~~~~~~~~~~~~
>    include/linux/mm.h:486:17: note: each undeclared identifier is reported only once for each function it appears in
>>> include/linux/mm.h:486:41: error: 'VMALLOC_END' undeclared (first use in this function)
>      return addr >= VMALLOC_START && addr < VMALLOC_END;
>                                             ^~~~~~~~~~~
>    include/linux/mm.h: In function 'maybe_mkwrite':
>>> include/linux/mm.h:624:9: error: implicit declaration of function 'pte_mkwrite' [-Werror=implicit-function-declaration]
>       pte = pte_mkwrite(pte);
>             ^~~~~~~~~~~
>    In file included from include/linux/bvec.h:25:0,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/oplib_32.h:11,
>                     from arch/sparc/include/asm/oplib.h:6,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from mm/init-mm.c:9:
>    include/linux/mm.h: In function 'pgtable_init':
>>> include/linux/mm.h:1674:2: error: implicit declaration of function 'pgtable_cache_init' [-Werror=implicit-function-declaration]
>      pgtable_cache_init();
>      ^~~~~~~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/pgtable.h:6:0,
>                     from mm/init-mm.c:9:
>    arch/sparc/include/asm/pgtable_32.h: At top level:
>>> arch/sparc/include/asm/pgtable_32.h:245:21: error: conflicting types for 'pte_mkwrite'
>     static inline pte_t pte_mkwrite(pte_t pte)
>                         ^~~~~~~~~~~
>    In file included from include/linux/bvec.h:25:0,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/oplib_32.h:11,
>                     from arch/sparc/include/asm/oplib.h:6,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from mm/init-mm.c:9:
>    include/linux/mm.h:624:9: note: previous implicit declaration of 'pte_mkwrite' was here
>       pte = pte_mkwrite(pte);
>             ^~~~~~~~~~~
>    cc1: some warnings being treated as errors
>
> vim +/VMALLOC_START +486 include/linux/mm.h
>
> 0738c4bb8 Paul Mundt             2008-03-12  480   */
> bb00a789e Yaowei Bai             2016-05-19  481  static inline bool is_vmalloc_addr(const void *x)
> 9e2779fa2 Christoph Lameter      2008-02-04  482  {
> 0738c4bb8 Paul Mundt             2008-03-12  483  #ifdef CONFIG_MMU
> 9e2779fa2 Christoph Lameter      2008-02-04  484        unsigned long addr = (unsigned long)x;
> 9e2779fa2 Christoph Lameter      2008-02-04  485
> 9e2779fa2 Christoph Lameter      2008-02-04 @486        return addr >= VMALLOC_START && addr < VMALLOC_END;
> 0738c4bb8 Paul Mundt             2008-03-12  487  #else
> bb00a789e Yaowei Bai             2016-05-19  488        return false;
> 8ca3ed87d David Howells          2008-02-23  489  #endif
> 0738c4bb8 Paul Mundt             2008-03-12  490  }
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  491  #ifdef CONFIG_MMU
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  492  extern int is_vmalloc_or_module_addr(const void *x);
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  493  #else
> 934831d06 David Howells          2009-09-24  494  static inline int is_vmalloc_or_module_addr(const void *x)
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  495  {
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  496        return 0;
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  497  }
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  498  #endif
> 9e2779fa2 Christoph Lameter      2008-02-04  499
> 39f1f78d5 Al Viro                2014-05-06  500  extern void kvfree(const void *addr);
> 39f1f78d5 Al Viro                2014-05-06  501
> 53f9263ba Kirill A. Shutemov     2016-01-15  502  static inline atomic_t *compound_mapcount_ptr(struct page *page)
> 53f9263ba Kirill A. Shutemov     2016-01-15  503  {
> 53f9263ba Kirill A. Shutemov     2016-01-15  504        return &page[1].compound_mapcount;
> 53f9263ba Kirill A. Shutemov     2016-01-15  505  }
> 53f9263ba Kirill A. Shutemov     2016-01-15  506
> 53f9263ba Kirill A. Shutemov     2016-01-15  507  static inline int compound_mapcount(struct page *page)
> 53f9263ba Kirill A. Shutemov     2016-01-15  508  {
> 5f527c2b3 Andrea Arcangeli       2016-05-20  509        VM_BUG_ON_PAGE(!PageCompound(page), page);
> 53f9263ba Kirill A. Shutemov     2016-01-15  510        page = compound_head(page);
> 53f9263ba Kirill A. Shutemov     2016-01-15  511        return atomic_read(compound_mapcount_ptr(page)) + 1;
> 53f9263ba Kirill A. Shutemov     2016-01-15  512  }
> 53f9263ba Kirill A. Shutemov     2016-01-15  513
> ccaafd7fd Joonsoo Kim            2015-02-10  514  /*
> 70b50f94f Andrea Arcangeli       2011-11-02  515   * The atomic page->_mapcount, starts from -1: so that transitions
> 70b50f94f Andrea Arcangeli       2011-11-02  516   * both from it and to it can be tracked, using atomic_inc_and_test
> 70b50f94f Andrea Arcangeli       2011-11-02  517   * and atomic_add_negative(-1).
> 70b50f94f Andrea Arcangeli       2011-11-02  518   */
> 22b751c3d Mel Gorman             2013-02-22  519  static inline void page_mapcount_reset(struct page *page)
> 70b50f94f Andrea Arcangeli       2011-11-02  520  {
> 70b50f94f Andrea Arcangeli       2011-11-02  521        atomic_set(&(page)->_mapcount, -1);
> 70b50f94f Andrea Arcangeli       2011-11-02  522  }
> 70b50f94f Andrea Arcangeli       2011-11-02  523
> b20ce5e03 Kirill A. Shutemov     2016-01-15  524  int __page_mapcount(struct page *page);
> b20ce5e03 Kirill A. Shutemov     2016-01-15  525
> 70b50f94f Andrea Arcangeli       2011-11-02  526  static inline int page_mapcount(struct page *page)
> 70b50f94f Andrea Arcangeli       2011-11-02  527  {
> 1d148e218 Wang, Yalin            2015-02-11  528        VM_BUG_ON_PAGE(PageSlab(page), page);
> 53f9263ba Kirill A. Shutemov     2016-01-15  529
> b20ce5e03 Kirill A. Shutemov     2016-01-15  530        if (unlikely(PageCompound(page)))
> b20ce5e03 Kirill A. Shutemov     2016-01-15  531                return __page_mapcount(page);
> b20ce5e03 Kirill A. Shutemov     2016-01-15  532        return atomic_read(&page->_mapcount) + 1;
> 53f9263ba Kirill A. Shutemov     2016-01-15  533  }
> b20ce5e03 Kirill A. Shutemov     2016-01-15  534
> b20ce5e03 Kirill A. Shutemov     2016-01-15  535  #ifdef CONFIG_TRANSPARENT_HUGEPAGE
> b20ce5e03 Kirill A. Shutemov     2016-01-15  536  int total_mapcount(struct page *page);
> 6d0a07edd Andrea Arcangeli       2016-05-12  537  int page_trans_huge_mapcount(struct page *page, int *total_mapcount);
> b20ce5e03 Kirill A. Shutemov     2016-01-15  538  #else
> b20ce5e03 Kirill A. Shutemov     2016-01-15  539  static inline int total_mapcount(struct page *page)
> b20ce5e03 Kirill A. Shutemov     2016-01-15  540  {
> b20ce5e03 Kirill A. Shutemov     2016-01-15  541        return page_mapcount(page);
> 70b50f94f Andrea Arcangeli       2011-11-02  542  }
> 6d0a07edd Andrea Arcangeli       2016-05-12  543  static inline int page_trans_huge_mapcount(struct page *page,
> 6d0a07edd Andrea Arcangeli       2016-05-12  544                                           int *total_mapcount)
> 6d0a07edd Andrea Arcangeli       2016-05-12  545  {
> 6d0a07edd Andrea Arcangeli       2016-05-12  546        int mapcount = page_mapcount(page);
> 6d0a07edd Andrea Arcangeli       2016-05-12  547        if (total_mapcount)
> 6d0a07edd Andrea Arcangeli       2016-05-12  548                *total_mapcount = mapcount;
> 6d0a07edd Andrea Arcangeli       2016-05-12  549        return mapcount;
> 6d0a07edd Andrea Arcangeli       2016-05-12  550  }
> b20ce5e03 Kirill A. Shutemov     2016-01-15  551  #endif
> 70b50f94f Andrea Arcangeli       2011-11-02  552
> b49af68ff Christoph Lameter      2007-05-06  553  static inline struct page *virt_to_head_page(const void *x)
> b49af68ff Christoph Lameter      2007-05-06  554  {
> b49af68ff Christoph Lameter      2007-05-06  555        struct page *page = virt_to_page(x);
> ccaafd7fd Joonsoo Kim            2015-02-10  556
> 1d798ca3f Kirill A. Shutemov     2015-11-06  557        return compound_head(page);
> b49af68ff Christoph Lameter      2007-05-06  558  }
> b49af68ff Christoph Lameter      2007-05-06  559
> ddc58f27f Kirill A. Shutemov     2016-01-15  560  void __put_page(struct page *page);
> ddc58f27f Kirill A. Shutemov     2016-01-15  561
> 1d7ea7324 Alexander Zarochentsev 2006-08-13  562  void put_pages_list(struct list_head *pages);
> ^1da177e4 Linus Torvalds         2005-04-16  563
> 8dfcc9ba2 Nick Piggin            2006-03-22  564  void split_page(struct page *page, unsigned int order);
> 8dfcc9ba2 Nick Piggin            2006-03-22  565
> ^1da177e4 Linus Torvalds         2005-04-16  566  /*
> 33f2ef89f Andy Whitcroft         2006-12-06  567   * Compound pages have a destructor function.  Provide a
> 33f2ef89f Andy Whitcroft         2006-12-06  568   * prototype for that function and accessor functions.
> f1e61557f Kirill A. Shutemov     2015-11-06  569   * These are _only_ valid on the head of a compound page.
> 33f2ef89f Andy Whitcroft         2006-12-06  570   */
> f1e61557f Kirill A. Shutemov     2015-11-06  571  typedef void compound_page_dtor(struct page *);
> f1e61557f Kirill A. Shutemov     2015-11-06  572
> f1e61557f Kirill A. Shutemov     2015-11-06  573  /* Keep the enum in sync with compound_page_dtors array in mm/page_alloc.c */
> f1e61557f Kirill A. Shutemov     2015-11-06  574  enum compound_dtor_id {
> f1e61557f Kirill A. Shutemov     2015-11-06  575        NULL_COMPOUND_DTOR,
> f1e61557f Kirill A. Shutemov     2015-11-06  576        COMPOUND_PAGE_DTOR,
> f1e61557f Kirill A. Shutemov     2015-11-06  577  #ifdef CONFIG_HUGETLB_PAGE
> f1e61557f Kirill A. Shutemov     2015-11-06  578        HUGETLB_PAGE_DTOR,
> f1e61557f Kirill A. Shutemov     2015-11-06  579  #endif
> 9a982250f Kirill A. Shutemov     2016-01-15  580  #ifdef CONFIG_TRANSPARENT_HUGEPAGE
> 9a982250f Kirill A. Shutemov     2016-01-15  581        TRANSHUGE_PAGE_DTOR,
> 9a982250f Kirill A. Shutemov     2016-01-15  582  #endif
> f1e61557f Kirill A. Shutemov     2015-11-06  583        NR_COMPOUND_DTORS,
> f1e61557f Kirill A. Shutemov     2015-11-06  584  };
> f1e61557f Kirill A. Shutemov     2015-11-06  585  extern compound_page_dtor * const compound_page_dtors[];
> 33f2ef89f Andy Whitcroft         2006-12-06  586
> 33f2ef89f Andy Whitcroft         2006-12-06  587  static inline void set_compound_page_dtor(struct page *page,
> f1e61557f Kirill A. Shutemov     2015-11-06  588                enum compound_dtor_id compound_dtor)
> 33f2ef89f Andy Whitcroft         2006-12-06  589  {
> f1e61557f Kirill A. Shutemov     2015-11-06  590        VM_BUG_ON_PAGE(compound_dtor >= NR_COMPOUND_DTORS, page);
> f1e61557f Kirill A. Shutemov     2015-11-06  591        page[1].compound_dtor = compound_dtor;
> 33f2ef89f Andy Whitcroft         2006-12-06  592  }
> 33f2ef89f Andy Whitcroft         2006-12-06  593
> 33f2ef89f Andy Whitcroft         2006-12-06  594  static inline compound_page_dtor *get_compound_page_dtor(struct page *page)
> 33f2ef89f Andy Whitcroft         2006-12-06  595  {
> f1e61557f Kirill A. Shutemov     2015-11-06  596        VM_BUG_ON_PAGE(page[1].compound_dtor >= NR_COMPOUND_DTORS, page);
> f1e61557f Kirill A. Shutemov     2015-11-06  597        return compound_page_dtors[page[1].compound_dtor];
> 33f2ef89f Andy Whitcroft         2006-12-06  598  }
> 33f2ef89f Andy Whitcroft         2006-12-06  599
> d00181b96 Kirill A. Shutemov     2015-11-06  600  static inline unsigned int compound_order(struct page *page)
> d85f33855 Christoph Lameter      2007-05-06  601  {
> 6d7779538 Christoph Lameter      2007-05-06  602        if (!PageHead(page))
> d85f33855 Christoph Lameter      2007-05-06  603                return 0;
> e4b294c2d Kirill A. Shutemov     2015-02-11  604        return page[1].compound_order;
> d85f33855 Christoph Lameter      2007-05-06  605  }
> d85f33855 Christoph Lameter      2007-05-06  606
> f1e61557f Kirill A. Shutemov     2015-11-06  607  static inline void set_compound_order(struct page *page, unsigned int order)
> d85f33855 Christoph Lameter      2007-05-06  608  {
> e4b294c2d Kirill A. Shutemov     2015-02-11  609        page[1].compound_order = order;
> d85f33855 Christoph Lameter      2007-05-06  610  }
> d85f33855 Christoph Lameter      2007-05-06  611
> 9a982250f Kirill A. Shutemov     2016-01-15  612  void free_compound_page(struct page *page);
> 9a982250f Kirill A. Shutemov     2016-01-15  613
> 3dece370e Michal Simek           2011-01-21  614  #ifdef CONFIG_MMU
> 33f2ef89f Andy Whitcroft         2006-12-06  615  /*
> 14fd403f2 Andrea Arcangeli       2011-01-13  616   * Do pte_mkwrite, but only if the vma says VM_WRITE.  We do this when
> 14fd403f2 Andrea Arcangeli       2011-01-13  617   * servicing faults for write access.  In the normal case, do always want
> 14fd403f2 Andrea Arcangeli       2011-01-13  618   * pte_mkwrite.  But get_user_pages can cause write faults for mappings
> 14fd403f2 Andrea Arcangeli       2011-01-13  619   * that do not have writing enabled, when used by access_process_vm.
> 14fd403f2 Andrea Arcangeli       2011-01-13  620   */
> 14fd403f2 Andrea Arcangeli       2011-01-13  621  static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
> 14fd403f2 Andrea Arcangeli       2011-01-13  622  {
> 14fd403f2 Andrea Arcangeli       2011-01-13  623        if (likely(vma->vm_flags & VM_WRITE))
> 14fd403f2 Andrea Arcangeli       2011-01-13 @624                pte = pte_mkwrite(pte);
> 14fd403f2 Andrea Arcangeli       2011-01-13  625        return pte;
> 14fd403f2 Andrea Arcangeli       2011-01-13  626  }
> 8c6e50b02 Kirill A. Shutemov     2014-04-07  627
>
> :::::: The code at line 486 was first introduced by commit
> :::::: 9e2779fa281cfda13ac060753d674bbcaa23367e is_vmalloc_addr(): Check if an address is within the vmalloc boundaries
>
> :::::: TO: Christoph Lameter <clameter@sgi.com>
> :::::: CC: Linus Torvalds <torvalds@woody.linux-foundation.org>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



-- 
Ming Lei

WARNING: multiple messages have this Message-ID (diff)
From: Ming Lei <tom.leiming@gmail.com>
To: kbuild test robot <lkp@intel.com>,
	sparclinux@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>
Cc: kbuild-all@01.org, Jens Axboe <axboe@fb.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-block <linux-block@vger.kernel.org>,
	Linux FS Devel <linux-fsdevel@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	Johannes Berg <johannes.berg@intel.com>
Subject: Re: [PATCH 32/60] block: implement sp version of bvec iterator helpers
Date: Sat, 17 Dec 2016 11:38:26 +0000	[thread overview]
Message-ID: <CACVXFVN1weJVc4A6v=g7oAeMN1Cczupm8ObnXR8E8UBTJ9NqZA@mail.gmail.com> (raw)
In-Reply-To: <201610291909.okAX73DP%fengguang.wu@intel.com>

Hi Guys,

On Sat, Oct 29, 2016 at 7:06 PM, kbuild test robot <lkp@intel.com> wrote:
> Hi Ming,

Thanks for the report!

>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.9-rc2 next-20161028]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> [Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
> [Check https://git-scm.com/docs/git-format-patch for more information]
>
> url:    https://github.com/0day-ci/linux/commits/Ming-Lei/block-support-multipage-bvec/20161029-163910
> config: sparc-defconfig (attached as .config)
> compiler: sparc-linux-gcc (GCC) 6.2.0
> reproduce:
>         wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         make.cross ARCH=sparc
>
> All error/warnings (new ones prefixed by >>):
>
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,


This issue should be caused by somewhere in sparc arch, and this patch
only adds '#include <linux/mm.h>' to 'include/linux/bvec.h' for using
nth_page().

So Cc sparc list.

Thanks,
Ming

>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/device.h:9,
>                     from include/linux/device.h:30,
>                     from include/linux/node.h:17,
>                     from include/linux/cpu.h:16,
>                     from include/linux/stop_machine.h:4,
>                     from kernel/sched/sched.h:10,
>                     from kernel/sched/loadavg.c:11:
>>> arch/sparc/include/asm/oplib_32.h:105:39: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>                                           ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:168:36: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>                                        ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:172:18: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>               struct linux_prom_registers *sbusregs, int nregs);
>                      ^~~~~~~~~~~~~~~~~~~~
> --
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/mp.c:12:
>>> arch/sparc/include/asm/oplib_32.h:105:39: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>                                           ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:168:36: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>                                        ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:172:18: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>               struct linux_prom_registers *sbusregs, int nregs);
>                      ^~~~~~~~~~~~~~~~~~~~
>>> arch/sparc/prom/mp.c:23:1: error: conflicting types for 'prom_startcpu'
>     prom_startcpu(int cpunode, struct linux_prom_registers *ctable_reg, int ctx, char *pc)
>     ^~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/mp.c:12:
>    arch/sparc/include/asm/oplib_32.h:105:5: note: previous declaration of 'prom_startcpu' was here
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>         ^~~~~~~~~~~~~
> --
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>>> arch/sparc/include/asm/oplib_32.h:105:39: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     int prom_startcpu(int cpunode, struct linux_prom_registers *context_table,
>                                           ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:168:36: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>                                        ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/oplib_32.h:172:18: warning: 'struct linux_prom_registers' declared inside parameter list will not be visible outside of this definition or declaration
>               struct linux_prom_registers *sbusregs, int nregs);
>                      ^~~~~~~~~~~~~~~~~~~~
>>> arch/sparc/prom/ranges.c:57:6: error: conflicting types for 'prom_apply_obio_ranges'
>     void prom_apply_obio_ranges(struct linux_prom_registers *regs, int nregs)
>          ^~~~~~~~~~~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>    arch/sparc/include/asm/oplib_32.h:168:6: note: previous declaration of 'prom_apply_obio_ranges' was here
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>          ^~~~~~~~~~~~~~~~~~~~~~
>    In file included from include/linux/linkage.h:6:0,
>                     from include/linux/kernel.h:6,
>                     from include/linux/list.h:8,
>                     from include/linux/module.h:9,
>                     from arch/sparc/prom/ranges.c:9:
>    arch/sparc/prom/ranges.c:62:15: error: conflicting types for 'prom_apply_obio_ranges'
>     EXPORT_SYMBOL(prom_apply_obio_ranges);
>                   ^
>    include/linux/export.h:58:21: note: in definition of macro '___EXPORT_SYMBOL'
>      extern typeof(sym) sym;      \
>                         ^~~
>>> arch/sparc/prom/ranges.c:62:1: note: in expansion of macro 'EXPORT_SYMBOL'
>     EXPORT_SYMBOL(prom_apply_obio_ranges);
>     ^~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>    arch/sparc/include/asm/oplib_32.h:168:6: note: previous declaration of 'prom_apply_obio_ranges' was here
>     void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
>          ^~~~~~~~~~~~~~~~~~~~~~
>>> arch/sparc/prom/ranges.c:87:6: error: conflicting types for 'prom_apply_generic_ranges'
>     void prom_apply_generic_ranges(phandle node, phandle parent,
>          ^~~~~~~~~~~~~~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/oplib.h:6:0,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from include/linux/mm.h:68,
>                     from include/linux/bvec.h:25,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/prom/ranges.c:11:
>    arch/sparc/include/asm/oplib_32.h:171:6: note: previous declaration of 'prom_apply_generic_ranges' was here
>     void prom_apply_generic_ranges(phandle node, phandle parent,
>          ^~~~~~~~~~~~~~~~~~~~~~~~~
> --
>    In file included from include/linux/bvec.h:25:0,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/oplib_32.h:11,
>                     from arch/sparc/include/asm/oplib.h:6,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from mm/init-mm.c:9:
>    include/linux/mm.h: In function 'is_vmalloc_addr':
>>> include/linux/mm.h:486:17: error: 'VMALLOC_START' undeclared (first use in this function)
>      return addr >= VMALLOC_START && addr < VMALLOC_END;
>                     ^~~~~~~~~~~~~
>    include/linux/mm.h:486:17: note: each undeclared identifier is reported only once for each function it appears in
>>> include/linux/mm.h:486:41: error: 'VMALLOC_END' undeclared (first use in this function)
>      return addr >= VMALLOC_START && addr < VMALLOC_END;
>                                             ^~~~~~~~~~~
>    include/linux/mm.h: In function 'maybe_mkwrite':
>>> include/linux/mm.h:624:9: error: implicit declaration of function 'pte_mkwrite' [-Werror=implicit-function-declaration]
>       pte = pte_mkwrite(pte);
>             ^~~~~~~~~~~
>    In file included from include/linux/bvec.h:25:0,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/oplib_32.h:11,
>                     from arch/sparc/include/asm/oplib.h:6,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from mm/init-mm.c:9:
>    include/linux/mm.h: In function 'pgtable_init':
>>> include/linux/mm.h:1674:2: error: implicit declaration of function 'pgtable_cache_init' [-Werror=implicit-function-declaration]
>      pgtable_cache_init();
>      ^~~~~~~~~~~~~~~~~~
>    In file included from arch/sparc/include/asm/pgtable.h:6:0,
>                     from mm/init-mm.c:9:
>    arch/sparc/include/asm/pgtable_32.h: At top level:
>>> arch/sparc/include/asm/pgtable_32.h:245:21: error: conflicting types for 'pte_mkwrite'
>     static inline pte_t pte_mkwrite(pte_t pte)
>                         ^~~~~~~~~~~
>    In file included from include/linux/bvec.h:25:0,
>                     from include/linux/blk_types.h:9,
>                     from include/linux/fs.h:31,
>                     from include/linux/proc_fs.h:8,
>                     from arch/sparc/include/asm/prom.h:22,
>                     from include/linux/of.h:232,
>                     from arch/sparc/include/asm/openprom.h:14,
>                     from arch/sparc/include/asm/oplib_32.h:11,
>                     from arch/sparc/include/asm/oplib.h:6,
>                     from arch/sparc/include/asm/pgtable_32.h:21,
>                     from arch/sparc/include/asm/pgtable.h:6,
>                     from mm/init-mm.c:9:
>    include/linux/mm.h:624:9: note: previous implicit declaration of 'pte_mkwrite' was here
>       pte = pte_mkwrite(pte);
>             ^~~~~~~~~~~
>    cc1: some warnings being treated as errors
>
> vim +/VMALLOC_START +486 include/linux/mm.h
>
> 0738c4bb8 Paul Mundt             2008-03-12  480   */
> bb00a789e Yaowei Bai             2016-05-19  481  static inline bool is_vmalloc_addr(const void *x)
> 9e2779fa2 Christoph Lameter      2008-02-04  482  {
> 0738c4bb8 Paul Mundt             2008-03-12  483  #ifdef CONFIG_MMU
> 9e2779fa2 Christoph Lameter      2008-02-04  484        unsigned long addr = (unsigned long)x;
> 9e2779fa2 Christoph Lameter      2008-02-04  485
> 9e2779fa2 Christoph Lameter      2008-02-04 @486        return addr >= VMALLOC_START && addr < VMALLOC_END;
> 0738c4bb8 Paul Mundt             2008-03-12  487  #else
> bb00a789e Yaowei Bai             2016-05-19  488        return false;
> 8ca3ed87d David Howells          2008-02-23  489  #endif
> 0738c4bb8 Paul Mundt             2008-03-12  490  }
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  491  #ifdef CONFIG_MMU
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  492  extern int is_vmalloc_or_module_addr(const void *x);
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  493  #else
> 934831d06 David Howells          2009-09-24  494  static inline int is_vmalloc_or_module_addr(const void *x)
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  495  {
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  496        return 0;
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  497  }
> 81ac3ad90 KAMEZAWA Hiroyuki      2009-09-22  498  #endif
> 9e2779fa2 Christoph Lameter      2008-02-04  499
> 39f1f78d5 Al Viro                2014-05-06  500  extern void kvfree(const void *addr);
> 39f1f78d5 Al Viro                2014-05-06  501
> 53f9263ba Kirill A. Shutemov     2016-01-15  502  static inline atomic_t *compound_mapcount_ptr(struct page *page)
> 53f9263ba Kirill A. Shutemov     2016-01-15  503  {
> 53f9263ba Kirill A. Shutemov     2016-01-15  504        return &page[1].compound_mapcount;
> 53f9263ba Kirill A. Shutemov     2016-01-15  505  }
> 53f9263ba Kirill A. Shutemov     2016-01-15  506
> 53f9263ba Kirill A. Shutemov     2016-01-15  507  static inline int compound_mapcount(struct page *page)
> 53f9263ba Kirill A. Shutemov     2016-01-15  508  {
> 5f527c2b3 Andrea Arcangeli       2016-05-20  509        VM_BUG_ON_PAGE(!PageCompound(page), page);
> 53f9263ba Kirill A. Shutemov     2016-01-15  510        page = compound_head(page);
> 53f9263ba Kirill A. Shutemov     2016-01-15  511        return atomic_read(compound_mapcount_ptr(page)) + 1;
> 53f9263ba Kirill A. Shutemov     2016-01-15  512  }
> 53f9263ba Kirill A. Shutemov     2016-01-15  513
> ccaafd7fd Joonsoo Kim            2015-02-10  514  /*
> 70b50f94f Andrea Arcangeli       2011-11-02  515   * The atomic page->_mapcount, starts from -1: so that transitions
> 70b50f94f Andrea Arcangeli       2011-11-02  516   * both from it and to it can be tracked, using atomic_inc_and_test
> 70b50f94f Andrea Arcangeli       2011-11-02  517   * and atomic_add_negative(-1).
> 70b50f94f Andrea Arcangeli       2011-11-02  518   */
> 22b751c3d Mel Gorman             2013-02-22  519  static inline void page_mapcount_reset(struct page *page)
> 70b50f94f Andrea Arcangeli       2011-11-02  520  {
> 70b50f94f Andrea Arcangeli       2011-11-02  521        atomic_set(&(page)->_mapcount, -1);
> 70b50f94f Andrea Arcangeli       2011-11-02  522  }
> 70b50f94f Andrea Arcangeli       2011-11-02  523
> b20ce5e03 Kirill A. Shutemov     2016-01-15  524  int __page_mapcount(struct page *page);
> b20ce5e03 Kirill A. Shutemov     2016-01-15  525
> 70b50f94f Andrea Arcangeli       2011-11-02  526  static inline int page_mapcount(struct page *page)
> 70b50f94f Andrea Arcangeli       2011-11-02  527  {
> 1d148e218 Wang, Yalin            2015-02-11  528        VM_BUG_ON_PAGE(PageSlab(page), page);
> 53f9263ba Kirill A. Shutemov     2016-01-15  529
> b20ce5e03 Kirill A. Shutemov     2016-01-15  530        if (unlikely(PageCompound(page)))
> b20ce5e03 Kirill A. Shutemov     2016-01-15  531                return __page_mapcount(page);
> b20ce5e03 Kirill A. Shutemov     2016-01-15  532        return atomic_read(&page->_mapcount) + 1;
> 53f9263ba Kirill A. Shutemov     2016-01-15  533  }
> b20ce5e03 Kirill A. Shutemov     2016-01-15  534
> b20ce5e03 Kirill A. Shutemov     2016-01-15  535  #ifdef CONFIG_TRANSPARENT_HUGEPAGE
> b20ce5e03 Kirill A. Shutemov     2016-01-15  536  int total_mapcount(struct page *page);
> 6d0a07edd Andrea Arcangeli       2016-05-12  537  int page_trans_huge_mapcount(struct page *page, int *total_mapcount);
> b20ce5e03 Kirill A. Shutemov     2016-01-15  538  #else
> b20ce5e03 Kirill A. Shutemov     2016-01-15  539  static inline int total_mapcount(struct page *page)
> b20ce5e03 Kirill A. Shutemov     2016-01-15  540  {
> b20ce5e03 Kirill A. Shutemov     2016-01-15  541        return page_mapcount(page);
> 70b50f94f Andrea Arcangeli       2011-11-02  542  }
> 6d0a07edd Andrea Arcangeli       2016-05-12  543  static inline int page_trans_huge_mapcount(struct page *page,
> 6d0a07edd Andrea Arcangeli       2016-05-12  544                                           int *total_mapcount)
> 6d0a07edd Andrea Arcangeli       2016-05-12  545  {
> 6d0a07edd Andrea Arcangeli       2016-05-12  546        int mapcount = page_mapcount(page);
> 6d0a07edd Andrea Arcangeli       2016-05-12  547        if (total_mapcount)
> 6d0a07edd Andrea Arcangeli       2016-05-12  548                *total_mapcount = mapcount;
> 6d0a07edd Andrea Arcangeli       2016-05-12  549        return mapcount;
> 6d0a07edd Andrea Arcangeli       2016-05-12  550  }
> b20ce5e03 Kirill A. Shutemov     2016-01-15  551  #endif
> 70b50f94f Andrea Arcangeli       2011-11-02  552
> b49af68ff Christoph Lameter      2007-05-06  553  static inline struct page *virt_to_head_page(const void *x)
> b49af68ff Christoph Lameter      2007-05-06  554  {
> b49af68ff Christoph Lameter      2007-05-06  555        struct page *page = virt_to_page(x);
> ccaafd7fd Joonsoo Kim            2015-02-10  556
> 1d798ca3f Kirill A. Shutemov     2015-11-06  557        return compound_head(page);
> b49af68ff Christoph Lameter      2007-05-06  558  }
> b49af68ff Christoph Lameter      2007-05-06  559
> ddc58f27f Kirill A. Shutemov     2016-01-15  560  void __put_page(struct page *page);
> ddc58f27f Kirill A. Shutemov     2016-01-15  561
> 1d7ea7324 Alexander Zarochentsev 2006-08-13  562  void put_pages_list(struct list_head *pages);
> ^1da177e4 Linus Torvalds         2005-04-16  563
> 8dfcc9ba2 Nick Piggin            2006-03-22  564  void split_page(struct page *page, unsigned int order);
> 8dfcc9ba2 Nick Piggin            2006-03-22  565
> ^1da177e4 Linus Torvalds         2005-04-16  566  /*
> 33f2ef89f Andy Whitcroft         2006-12-06  567   * Compound pages have a destructor function.  Provide a
> 33f2ef89f Andy Whitcroft         2006-12-06  568   * prototype for that function and accessor functions.
> f1e61557f Kirill A. Shutemov     2015-11-06  569   * These are _only_ valid on the head of a compound page.
> 33f2ef89f Andy Whitcroft         2006-12-06  570   */
> f1e61557f Kirill A. Shutemov     2015-11-06  571  typedef void compound_page_dtor(struct page *);
> f1e61557f Kirill A. Shutemov     2015-11-06  572
> f1e61557f Kirill A. Shutemov     2015-11-06  573  /* Keep the enum in sync with compound_page_dtors array in mm/page_alloc.c */
> f1e61557f Kirill A. Shutemov     2015-11-06  574  enum compound_dtor_id {
> f1e61557f Kirill A. Shutemov     2015-11-06  575        NULL_COMPOUND_DTOR,
> f1e61557f Kirill A. Shutemov     2015-11-06  576        COMPOUND_PAGE_DTOR,
> f1e61557f Kirill A. Shutemov     2015-11-06  577  #ifdef CONFIG_HUGETLB_PAGE
> f1e61557f Kirill A. Shutemov     2015-11-06  578        HUGETLB_PAGE_DTOR,
> f1e61557f Kirill A. Shutemov     2015-11-06  579  #endif
> 9a982250f Kirill A. Shutemov     2016-01-15  580  #ifdef CONFIG_TRANSPARENT_HUGEPAGE
> 9a982250f Kirill A. Shutemov     2016-01-15  581        TRANSHUGE_PAGE_DTOR,
> 9a982250f Kirill A. Shutemov     2016-01-15  582  #endif
> f1e61557f Kirill A. Shutemov     2015-11-06  583        NR_COMPOUND_DTORS,
> f1e61557f Kirill A. Shutemov     2015-11-06  584  };
> f1e61557f Kirill A. Shutemov     2015-11-06  585  extern compound_page_dtor * const compound_page_dtors[];
> 33f2ef89f Andy Whitcroft         2006-12-06  586
> 33f2ef89f Andy Whitcroft         2006-12-06  587  static inline void set_compound_page_dtor(struct page *page,
> f1e61557f Kirill A. Shutemov     2015-11-06  588                enum compound_dtor_id compound_dtor)
> 33f2ef89f Andy Whitcroft         2006-12-06  589  {
> f1e61557f Kirill A. Shutemov     2015-11-06  590        VM_BUG_ON_PAGE(compound_dtor >= NR_COMPOUND_DTORS, page);
> f1e61557f Kirill A. Shutemov     2015-11-06  591        page[1].compound_dtor = compound_dtor;
> 33f2ef89f Andy Whitcroft         2006-12-06  592  }
> 33f2ef89f Andy Whitcroft         2006-12-06  593
> 33f2ef89f Andy Whitcroft         2006-12-06  594  static inline compound_page_dtor *get_compound_page_dtor(struct page *page)
> 33f2ef89f Andy Whitcroft         2006-12-06  595  {
> f1e61557f Kirill A. Shutemov     2015-11-06  596        VM_BUG_ON_PAGE(page[1].compound_dtor >= NR_COMPOUND_DTORS, page);
> f1e61557f Kirill A. Shutemov     2015-11-06  597        return compound_page_dtors[page[1].compound_dtor];
> 33f2ef89f Andy Whitcroft         2006-12-06  598  }
> 33f2ef89f Andy Whitcroft         2006-12-06  599
> d00181b96 Kirill A. Shutemov     2015-11-06  600  static inline unsigned int compound_order(struct page *page)
> d85f33855 Christoph Lameter      2007-05-06  601  {
> 6d7779538 Christoph Lameter      2007-05-06  602        if (!PageHead(page))
> d85f33855 Christoph Lameter      2007-05-06  603                return 0;
> e4b294c2d Kirill A. Shutemov     2015-02-11  604        return page[1].compound_order;
> d85f33855 Christoph Lameter      2007-05-06  605  }
> d85f33855 Christoph Lameter      2007-05-06  606
> f1e61557f Kirill A. Shutemov     2015-11-06  607  static inline void set_compound_order(struct page *page, unsigned int order)
> d85f33855 Christoph Lameter      2007-05-06  608  {
> e4b294c2d Kirill A. Shutemov     2015-02-11  609        page[1].compound_order = order;
> d85f33855 Christoph Lameter      2007-05-06  610  }
> d85f33855 Christoph Lameter      2007-05-06  611
> 9a982250f Kirill A. Shutemov     2016-01-15  612  void free_compound_page(struct page *page);
> 9a982250f Kirill A. Shutemov     2016-01-15  613
> 3dece370e Michal Simek           2011-01-21  614  #ifdef CONFIG_MMU
> 33f2ef89f Andy Whitcroft         2006-12-06  615  /*
> 14fd403f2 Andrea Arcangeli       2011-01-13  616   * Do pte_mkwrite, but only if the vma says VM_WRITE.  We do this when
> 14fd403f2 Andrea Arcangeli       2011-01-13  617   * servicing faults for write access.  In the normal case, do always want
> 14fd403f2 Andrea Arcangeli       2011-01-13  618   * pte_mkwrite.  But get_user_pages can cause write faults for mappings
> 14fd403f2 Andrea Arcangeli       2011-01-13  619   * that do not have writing enabled, when used by access_process_vm.
> 14fd403f2 Andrea Arcangeli       2011-01-13  620   */
> 14fd403f2 Andrea Arcangeli       2011-01-13  621  static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
> 14fd403f2 Andrea Arcangeli       2011-01-13  622  {
> 14fd403f2 Andrea Arcangeli       2011-01-13  623        if (likely(vma->vm_flags & VM_WRITE))
> 14fd403f2 Andrea Arcangeli       2011-01-13 @624                pte = pte_mkwrite(pte);
> 14fd403f2 Andrea Arcangeli       2011-01-13  625        return pte;
> 14fd403f2 Andrea Arcangeli       2011-01-13  626  }
> 8c6e50b02 Kirill A. Shutemov     2014-04-07  627
>
> :::::: The code at line 486 was first introduced by commit
> :::::: 9e2779fa281cfda13ac060753d674bbcaa23367e is_vmalloc_addr(): Check if an address is within the vmalloc boundaries
>
> :::::: TO: Christoph Lameter <clameter@sgi.com>
> :::::: CC: Linus Torvalds <torvalds@woody.linux-foundation.org>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



-- 
Ming Lei

  reply	other threads:[~2016-12-17 11:38 UTC|newest]

Thread overview: 148+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-29  8:07 [PATCH 00/60] block: support multipage bvec Ming Lei
2016-10-29  8:07 ` [Cluster-devel] " Ming Lei
2016-10-29  8:07 ` Ming Lei
2016-10-29  8:07 ` Ming Lei
2016-10-29  8:07 ` Ming Lei
2016-10-29  8:08 ` [PATCH 01/60] block: bio: introduce bio_init_with_vec_table() Ming Lei
2016-10-29 15:21   ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 02/60] block drivers: convert to bio_init_with_vec_table() Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 03/60] block: drbd: remove impossible failure handling Ming Lei
2016-10-31 15:25   ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 04/60] block: floppy: use bio_add_page() Ming Lei
2016-10-31 15:26   ` Christoph Hellwig
2016-10-31 22:54     ` Ming Lei
2016-11-10 19:35   ` Christoph Hellwig
2016-11-11  8:39     ` Ming Lei
2016-10-29  8:08 ` [PATCH 05/60] target: avoid to access .bi_vcnt directly Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-31 15:26   ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 06/60] bcache: debug: avoid to access .bi_io_vec directly Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 07/60] dm: crypt: use bio_add_page() Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 08/60] dm: use bvec iterator helpers to implement .get_page and .next_page Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 09/60] dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-31 15:29   ` Christoph Hellwig
2016-10-31 15:29     ` Christoph Hellwig
2016-10-31 22:59     ` Ming Lei
2016-10-31 22:59       ` Ming Lei
2016-11-02  3:09     ` Kent Overstreet
2016-11-02  3:09       ` Kent Overstreet
2016-11-02  7:56       ` Ming Lei
2016-11-02  7:56         ` Ming Lei
2016-11-02 14:24         ` Mike Snitzer
2016-11-02 14:24           ` Mike Snitzer
2016-11-02 14:24           ` Mike Snitzer
2016-11-02 23:47           ` Ming Lei
2016-11-02 23:47             ` Ming Lei
2016-10-29  8:08 ` [PATCH 10/60] fs: logfs: convert to bio_add_page() in sync_request() Ming Lei
2016-10-29  8:08 ` [PATCH 11/60] fs: logfs: use bio_add_page() in __bdev_writeseg() Ming Lei
2016-10-31 15:29   ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 12/60] fs: logfs: use bio_add_page() in do_erase() Ming Lei
2016-10-31 15:29   ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 13/60] fs: logfs: remove unnecesary check Ming Lei
2016-10-31 15:29   ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 14/60] block: drbd: comment on direct access bvec table Ming Lei
2016-10-29  8:08 ` [PATCH 15/60] block: loop: comment on direct access to " Ming Lei
2016-10-31 15:31   ` Christoph Hellwig
2016-10-31 23:08     ` Ming Lei
2016-10-29  8:08 ` [PATCH 16/60] block: pktcdvd: " Ming Lei
2016-10-31 15:33   ` Christoph Hellwig
2016-10-31 23:08     ` Ming Lei
2016-10-29  8:08 ` [PATCH 17/60] kernel/power/swap.c: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 18/60] mm: page_io.c: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 19/60] fs/buffer: " Ming Lei
2016-10-31 15:35   ` Christoph Hellwig
2016-10-31 23:12     ` Ming Lei
2016-10-29  8:08 ` [PATCH 20/60] f2fs: f2fs_read_end_io: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 21/60] bcache: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 22/60] block: comment on bio_alloc_pages() Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 23/60] block: introduce flag QUEUE_FLAG_NO_MP Ming Lei
2016-10-29 15:29   ` Christoph Hellwig
2016-10-29 22:20     ` Ming Lei
2016-10-29 22:20       ` Ming Lei
2016-10-29  8:08 ` [PATCH 24/60] md: set NO_MP for request queue of md Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 25/60] block: pktcdvd: set NO_MP for pktcdvd request queue Ming Lei
2016-10-29  8:08 ` [PATCH 26/60] btrfs: set NO_MP for request queues behind BTRFS Ming Lei
2016-10-31 15:36   ` Christoph Hellwig
2016-10-31 17:58     ` Chris Mason
2016-10-31 18:00       ` Christoph Hellwig
2016-10-29  8:08 ` [PATCH 27/60] block: introduce BIO_SP_MAX_SECTORS Ming Lei
2016-10-29  8:08 ` [PATCH 28/60] block: introduce QUEUE_FLAG_SPLIT_MP Ming Lei
2016-10-31 15:39   ` Christoph Hellwig
2016-10-31 23:56     ` Ming Lei
2016-11-02  3:08     ` Kent Overstreet
2016-11-03 10:38       ` Ming Lei
2016-11-03 11:20         ` Kent Overstreet
2016-11-03 11:26           ` Ming Lei
2016-11-03 11:30             ` Kent Overstreet
2016-10-29  8:08 ` [PATCH 29/60] dm: limit the max bio size as BIO_SP_MAX_SECTORS << SECTOR_SHIFT Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 30/60] bcache: set flag of QUEUE_FLAG_SPLIT_MP Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 31/60] block: introduce multipage/single page bvec helpers Ming Lei
2016-10-29  8:08 ` [PATCH 32/60] block: implement sp version of bvec iterator helpers Ming Lei
2016-10-29 11:06   ` kbuild test robot
2016-12-17 11:38     ` Ming Lei [this message]
2016-12-17 11:38       ` Ming Lei
2016-10-29  8:08 ` [PATCH 33/60] block: introduce bio_for_each_segment_mp() Ming Lei
2016-10-29  8:08 ` [PATCH 34/60] block: introduce bio_clone_sp() Ming Lei
2016-10-29  8:08 ` [PATCH 35/60] bvec_iter: introduce BVEC_ITER_ALL_INIT Ming Lei
2016-10-29  8:08 ` [PATCH 36/60] block: bounce: avoid direct access to bvec from bio->bi_io_vec Ming Lei
2016-10-29  8:08 ` [PATCH 37/60] block: bounce: don't access bio->bi_io_vec in copy_to_high_bio_irq Ming Lei
2016-10-29  8:08 ` [PATCH 38/60] block: bounce: convert multipage bvecs into singlepage Ming Lei
2016-10-29  8:08 ` [PATCH 39/60] bcache: debug: switch to bio_clone_sp() Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 40/60] blk-merge: compute bio->bi_seg_front_size efficiently Ming Lei
2016-10-29  8:08 ` [PATCH 41/60] block: blk-merge: try to make front segments in full size Ming Lei
2016-10-29  8:08 ` [PATCH 42/60] block: use bio_for_each_segment_mp() to compute segments count Ming Lei
2016-10-29  8:08 ` [PATCH 43/60] block: use bio_for_each_segment_mp() to map sg Ming Lei
2016-10-29  8:08 ` [PATCH 44/60] block: introduce bvec_for_each_sp_bvec() Ming Lei
2016-10-29  8:08 ` [PATCH 45/60] block: bio: introduce bio_for_each_segment_all_rd() and its write pair Ming Lei
2016-10-31 13:59   ` Theodore Ts'o
2016-10-31 15:11     ` Christoph Hellwig
2016-10-31 22:50       ` Ming Lei
2016-11-02  3:01       ` Kent Overstreet
2016-10-31 22:46     ` Ming Lei
2016-10-31 23:51       ` Ming Lei
2016-11-01 14:17         ` Theodore Ts'o
2016-11-02  1:58           ` Ming Lei
2016-10-29  8:08 ` [PATCH 46/60] block: deal with dirtying pages for multipage bvec Ming Lei
2016-10-31 15:40   ` Christoph Hellwig
2016-11-01  0:19     ` Ming Lei
2016-10-29  8:08 ` [PATCH 47/60] block: convert to bio_for_each_segment_all_rd() Ming Lei
2016-10-29  8:08 ` [PATCH 48/60] fs/mpage: " Ming Lei
2016-10-29  8:08 ` [PATCH 49/60] fs/direct-io: " Ming Lei
2016-10-29  8:08 ` [PATCH 50/60] ext4: " Ming Lei
2016-10-29  8:08 ` [PATCH 51/60] xfs: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 52/60] logfs: " Ming Lei
2016-10-29  8:08 ` [PATCH 53/60] gfs2: " Ming Lei
2016-10-29  8:08   ` [Cluster-devel] " Ming Lei
2016-10-29  8:08 ` [PATCH 54/60] f2fs: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 55/60] exofs: " Ming Lei
2016-10-29  8:08 ` [PATCH 56/60] fs: crypto: " Ming Lei
2016-10-29  8:08 ` [PATCH 57/60] bcache: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 58/60] dm-crypt: " Ming Lei
2016-10-29  8:08   ` Ming Lei
2016-10-29  8:08 ` [PATCH 59/60] fs/buffer.c: use bvec iterator to truncate the bio Ming Lei
2016-10-29  8:08 ` [PATCH 60/60] block: enable multipage bvecs Ming Lei
2016-10-31 15:25 ` [PATCH 00/60] block: support multipage bvec Christoph Hellwig
2016-10-31 15:25   ` [Cluster-devel] " Christoph Hellwig
2016-10-31 15:25   ` Christoph Hellwig
2016-10-31 15:25   ` Christoph Hellwig
2016-10-31 22:52   ` Ming Lei
2016-10-31 22:52     ` [Cluster-devel] " Ming Lei
2016-10-31 22:52     ` Ming Lei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CACVXFVN1weJVc4A6v=g7oAeMN1Cczupm8ObnXR8E8UBTJ9NqZA@mail.gmail.com' \
    --to=tom.leiming@gmail.com \
    --cc=axboe@fb.com \
    --cc=davem@davemloft.net \
    --cc=hch@infradead.org \
    --cc=johannes.berg@intel.com \
    --cc=kbuild-all@01.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=sparclinux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.