[PATCH 22/22] mpool: add Kconfig and Makefile

kernel test robot lkp at intel.com
Mon Sep 28 19:47:16 EDT 2020


Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linux/master]
[also build test ERROR on linus/master v5.9-rc7 next-20200928]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/nmeeramohide-micron-com/add-Object-Storage-Media-Pool-mpool/20200929-004933
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git bcf876870b95592b52519ed4aafcf9d95999bc9c
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/0d485fc58582bd112bb72fe15f107e8cbe3536b0
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review nmeeramohide-micron-com/add-Object-Storage-Media-Pool-mpool/20200929-004933
        git checkout 0d485fc58582bd112bb72fe15f107e8cbe3536b0
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>

All error/warnings (new ones prefixed by >>):

   In file included from arch/m68k/include/asm/io_mm.h:25,
                    from arch/m68k/include/asm/io.h:8,
                    from include/linux/io.h:13,
                    from include/linux/irq.h:20,
                    from include/asm-generic/hardirq.h:13,
                    from ./arch/m68k/include/generated/asm/hardirq.h:1,
                    from include/linux/hardirq.h:10,
                    from include/linux/highmem.h:10,
                    from include/linux/pagemap.h:11,
                    from include/linux/blkdev.h:16,
                    from drivers/mpool/pd.c:15:
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsb':
   arch/m68k/include/asm/raw_io.h:83:7: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      83 |  ({u8 __w, __v = (b);  u32 _addr = ((u32) (addr)); \
         |       ^~~
   arch/m68k/include/asm/raw_io.h:430:3: note: in expansion of macro 'rom_out_8'
     430 |   rom_out_8(port, *buf++);
         |   ^~~~~~~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw':
   arch/m68k/include/asm/raw_io.h:86:8: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      86 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
         |        ^~~
   arch/m68k/include/asm/raw_io.h:448:3: note: in expansion of macro 'rom_out_be16'
     448 |   rom_out_be16(port, *buf++);
         |   ^~~~~~~~~~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw_swapw':
   arch/m68k/include/asm/raw_io.h:90:8: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      90 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
         |        ^~~
   arch/m68k/include/asm/raw_io.h:466:3: note: in expansion of macro 'rom_out_le16'
     466 |   rom_out_le16(port, *buf++);
         |   ^~~~~~~~~~~~
   In file included from include/linux/kernel.h:11,
                    from include/linux/list.h:9,
                    from include/linux/wait.h:7,
                    from include/linux/wait_bit.h:8,
                    from include/linux/fs.h:6,
                    from drivers/mpool/pd.c:14:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_mm.h:169:49: warning: ordered comparison of pointer with null pointer [-Wextra]
     169 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory)
         |                                                 ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
      78 | # define unlikely(x) __builtin_expect(!!(x), 0)
         |                                          ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |  ^~~~~~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 'virt_addr_valid'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |          ^~~~~~~~~~~~~~~
   drivers/mpool/pd.c: In function 'pd_bio_rw':
>> drivers/mpool/pd.c:294:14: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
     294 |   iov_base = (u64)iov[i].iov_base;
         |              ^
>> drivers/mpool/pd.c:224:13: warning: variable 'op' set but not used [-Wunused-but-set-variable]
     224 |  int i, cc, op;
         |             ^~
--
>> drivers/mpool/omf.c:27: warning: "STR" redefined
      27 | #define STR(x)  _STR(x)
         | 
   In file included from arch/m68k/include/asm/irqflags.h:8,
                    from include/linux/irqflags.h:16,
                    from include/linux/spinlock.h:54,
                    from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:6,
                    from include/linux/slab.h:15,
                    from drivers/mpool/omf.c:16:
   arch/m68k/include/asm/entry.h:244: note: this is the location of the previous definition
     244 | #define STR(X) STR1(X)
         | 
   drivers/mpool/omf.c:28:19: warning: 'mpool_sbver' defined but not used [-Wunused-const-variable=]
      28 | static const char mpool_sbver[] = "MPOOL_SBVER_" STR(OMF_SB_DESC_VER_LAST);
         |                   ^~~~~~~~~~~
--
   In file included from include/linux/printk.h:7,
                    from include/linux/kernel.h:15,
                    from include/asm-generic/bug.h:19,
                    from arch/m68k/include/asm/bug.h:32,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/gfp.h:5,
                    from include/linux/slab.h:15,
                    from drivers/mpool/mdc.c:6:
   drivers/mpool/mdc.c: In function 'mp_mdc_read':
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 6 has type 'size_t' {aka 'unsigned int'} [-Wformat=]
       5 | #define KERN_SOH "\001"  /* ASCII Start Of Header */
         |                  ^~~~~~
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
      11 | #define KERN_ERR KERN_SOH "3" /* error conditions */
         |                  ^~~~~~~~
   include/linux/printk.h:338:9: note: in expansion of macro 'KERN_ERR'
     338 |  printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~
   drivers/mpool/mpool_printk.h:17:2: note: in expansion of macro 'pr_err'
      17 |  pr_err("%s: " _fmt ": errno %d", __func__, ## __VA_ARGS__, (_err))
         |  ^~~~~~
   drivers/mpool/mdc.c:458:3: note: in expansion of macro 'mp_pr_err'
     458 |   mp_pr_err("mpool %s, mdc %p read failed, mlog %p len %lu",
         |   ^~~~~~~~~
   drivers/mpool/mdc.c:458:58: note: format string is defined here
     458 |   mp_pr_err("mpool %s, mdc %p read failed, mlog %p len %lu",
         |                                                        ~~^
         |                                                          |
         |                                                          long unsigned int
         |                                                        %u
   In file included from include/linux/printk.h:7,
                    from include/linux/kernel.h:15,
                    from include/asm-generic/bug.h:19,
                    from arch/m68k/include/asm/bug.h:32,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/gfp.h:5,
                    from include/linux/slab.h:15,
                    from drivers/mpool/mdc.c:6:
   drivers/mpool/mdc.c: In function 'mp_mdc_append':
>> include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 6 has type 'ssize_t' {aka 'int'} [-Wformat=]
       5 | #define KERN_SOH "\001"  /* ASCII Start Of Header */
         |                  ^~~~~~
   include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
      11 | #define KERN_ERR KERN_SOH "3" /* error conditions */
         |                  ^~~~~~~~
   include/linux/printk.h:338:9: note: in expansion of macro 'KERN_ERR'
     338 |  printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
         |         ^~~~~~~~
   drivers/mpool/mpool_printk.h:39:3: note: in expansion of macro 'pr_err'
      39 |   pr_err("%s: " _fmt ": errno %d",  \
         |   ^~~~~~
   drivers/mpool/mdc.c:480:3: note: in expansion of macro 'mp_pr_rl'
     480 |   mp_pr_rl("mpool %s, mdc %p append failed, mlog %p, len %lu sync %d",
         |   ^~~~~~~~
   drivers/mpool/mdc.c:480:60: note: format string is defined here
     480 |   mp_pr_rl("mpool %s, mdc %p append failed, mlog %p, len %lu sync %d",
         |                                                          ~~^
         |                                                            |
         |                                                            long unsigned int
         |                                                          %u
--
   In file included from arch/m68k/include/asm/io_mm.h:25,
                    from arch/m68k/include/asm/io.h:8,
                    from include/linux/io.h:13,
                    from include/linux/irq.h:20,
                    from include/asm-generic/hardirq.h:13,
                    from ./arch/m68k/include/generated/asm/hardirq.h:1,
                    from include/linux/hardirq.h:10,
                    from include/linux/highmem.h:10,
                    from include/linux/pagemap.h:11,
                    from include/linux/blkdev.h:16,
                    from drivers/mpool/mpctl.c:14:
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsb':
   arch/m68k/include/asm/raw_io.h:83:7: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      83 |  ({u8 __w, __v = (b);  u32 _addr = ((u32) (addr)); \
         |       ^~~
   arch/m68k/include/asm/raw_io.h:430:3: note: in expansion of macro 'rom_out_8'
     430 |   rom_out_8(port, *buf++);
         |   ^~~~~~~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw':
   arch/m68k/include/asm/raw_io.h:86:8: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      86 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
         |        ^~~
   arch/m68k/include/asm/raw_io.h:448:3: note: in expansion of macro 'rom_out_be16'
     448 |   rom_out_be16(port, *buf++);
         |   ^~~~~~~~~~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw_swapw':
   arch/m68k/include/asm/raw_io.h:90:8: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      90 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
         |        ^~~
   arch/m68k/include/asm/raw_io.h:466:3: note: in expansion of macro 'rom_out_le16'
     466 |   rom_out_le16(port, *buf++);
         |   ^~~~~~~~~~~~
   In file included from include/linux/kernel.h:11,
                    from drivers/mpool/mpctl.c:6:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_mm.h:169:49: warning: ordered comparison of pointer with null pointer [-Wextra]
     169 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory)
         |                                                 ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
      78 | # define unlikely(x) __builtin_expect(!!(x), 0)
         |                                          ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |  ^~~~~~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 'virt_addr_valid'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |          ^~~~~~~~~~~~~~~
   drivers/mpool/mpctl.c: In function 'mpc_open':
>> drivers/mpool/mpctl.c:2393:23: warning: left shift count >= width of type [-Wshift-count-overflow]
    2393 |  i_size_write(ip, 1ul << 63);
         |                       ^~
--
   In file included from arch/m68k/include/asm/io_mm.h:25,
                    from arch/m68k/include/asm/io.h:8,
                    from include/linux/io.h:13,
                    from include/linux/irq.h:20,
                    from include/asm-generic/hardirq.h:13,
                    from ./arch/m68k/include/generated/asm/hardirq.h:1,
                    from include/linux/hardirq.h:10,
                    from include/linux/interrupt.h:11,
                    from include/linux/kernel_stat.h:9,
                    from include/linux/cgroup.h:26,
                    from include/linux/memcontrol.h:13,
                    from drivers/mpool/mcache.c:7:
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsb':
   arch/m68k/include/asm/raw_io.h:83:7: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      83 |  ({u8 __w, __v = (b);  u32 _addr = ((u32) (addr)); \
         |       ^~~
   arch/m68k/include/asm/raw_io.h:430:3: note: in expansion of macro 'rom_out_8'
     430 |   rom_out_8(port, *buf++);
         |   ^~~~~~~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw':
   arch/m68k/include/asm/raw_io.h:86:8: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      86 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
         |        ^~~
   arch/m68k/include/asm/raw_io.h:448:3: note: in expansion of macro 'rom_out_be16'
     448 |   rom_out_be16(port, *buf++);
         |   ^~~~~~~~~~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw_swapw':
   arch/m68k/include/asm/raw_io.h:90:8: warning: variable '__w' set but not used [-Wunused-but-set-variable]
      90 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
         |        ^~~
   arch/m68k/include/asm/raw_io.h:466:3: note: in expansion of macro 'rom_out_le16'
     466 |   rom_out_le16(port, *buf++);
         |   ^~~~~~~~~~~~
   In file included from include/linux/kernel.h:11,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from drivers/mpool/mcache.c:6:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_mm.h:169:49: warning: ordered comparison of pointer with null pointer [-Wextra]
     169 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory)
         |                                                 ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
      78 | # define unlikely(x) __builtin_expect(!!(x), 0)
         |                                          ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |  ^~~~~~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 'virt_addr_valid'
     143 |  BUG_ON(!virt_addr_valid(buf));
         |          ^~~~~~~~~~~~~~~
   drivers/mpool/mcache.c: In function 'mpc_readpages':
>> drivers/mpool/mcache.c:581:3: error: implicit declaration of function 'prefetchw' [-Werror=implicit-function-declaration]
     581 |   prefetchw(&page->flags);
         |   ^~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/mpool/reaper.c: In function 'mpc_reap_xvm_add':
>> drivers/mpool/reaper.c:577:12: warning: variable 'mult' set but not used [-Wunused-but-set-variable]
     577 |  uint idx, mult;
         |            ^~~~

vim +/prefetchw +581 drivers/mpool/mcache.c

3114e86da188ef1 Nabeel M Mohamed 2020-09-28  499  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  500  static int mpc_readpages(struct file *file, struct address_space *mapping,
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  501  			 struct list_head *pages, uint nr_pages)
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  502  {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  503  	struct workqueue_struct *wq;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  504  	struct readpage_work *w;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  505  	struct work_struct *work;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  506  	struct mpc_mbinfo *mbinfo;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  507  	struct mpc_unit *unit;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  508  	struct mpc_xvm *xvm;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  509  	struct page *page;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  510  	off_t offset, mbend;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  511  	uint mbnum, iovmax, i;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  512  	uint ra_pages_max;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  513  	ulong index;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  514  	gfp_t gfp;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  515  	u32 key;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  516  	int rc;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  517  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  518  	unit = file->private_data;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  519  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  520  	ra_pages_max = unit->un_ra_pages_max;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  521  	if (ra_pages_max < 1)
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  522  		return 0;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  523  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  524  	page   = lru_to_page(pages);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  525  	offset = page->index << PAGE_SHIFT;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  526  	index  = page->index;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  527  	work   = NULL;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  528  	w      = NULL;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  529  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  530  	key = offset >> xvm_size_max;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  531  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  532  	/*
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  533  	 * The idr value here (xvm) is pinned for the lifetime of the address map.
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  534  	 * Therefore, we can exit the rcu read-side critsec without worry that xvm will be
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  535  	 * destroyed before put_page() has been called on each and every page in the given
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  536  	 * list of pages.
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  537  	 */
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  538  	rcu_read_lock();
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  539  	xvm = idr_find(&unit->un_rgnmap.rm_root, key);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  540  	rcu_read_unlock();
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  541  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  542  	if (!xvm)
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  543  		return 0;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  544  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  545  	offset %= (1ul << xvm_size_max);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  546  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  547  	mbnum = offset / xvm->xvm_bktsz;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  548  	if (mbnum >= xvm->xvm_mbinfoc)
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  549  		return 0;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  550  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  551  	mbinfo = xvm->xvm_mbinfov + mbnum;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  552  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  553  	mbend = mbnum * xvm->xvm_bktsz + mbinfo->mblen;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  554  	iovmax = MPC_RA_IOV_MAX;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  555  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  556  	gfp = mapping_gfp_mask(mapping) & GFP_KERNEL;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  557  	wq = mpc_rgn2wq(xvm->xvm_rgn);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  558  
f5867898fb79966 Nabeel M Mohamed 2020-09-28  559  	if (mpc_reap_xvm_duress(xvm))
f5867898fb79966 Nabeel M Mohamed 2020-09-28  560  		nr_pages = min_t(uint, nr_pages, 8);
f5867898fb79966 Nabeel M Mohamed 2020-09-28  561  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  562  	nr_pages = min_t(uint, nr_pages, ra_pages_max);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  563  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  564  	for (i = 0; i < nr_pages; ++i) {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  565  		page    = lru_to_page(pages);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  566  		offset  = page->index << PAGE_SHIFT;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  567  		offset %= (1ul << xvm_size_max);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  568  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  569  		/* Don't read past the end of the mblock. */
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  570  		if (offset >= mbend)
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  571  			break;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  572  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  573  		/* mblock reads must be logically contiguous. */
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  574  		if (page->index != index && work) {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  575  			queue_work(wq, work);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  576  			work = NULL;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  577  		}
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  578  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  579  		index = page->index + 1; /* next expected page index */
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  580  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28 @581  		prefetchw(&page->flags);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  582  		list_del(&page->lru);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  583  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  584  		rc = add_to_page_cache_lru(page, mapping, page->index, gfp);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  585  		if (rc) {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  586  			if (work) {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  587  				queue_work(wq, work);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  588  				work = NULL;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  589  			}
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  590  			put_page(page);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  591  			continue;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  592  		}
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  593  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  594  		if (!work) {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  595  			w = page_address(page);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  596  			INIT_WORK(&w->w_work, mpc_readpages_cb);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  597  			w->w_args.a_xvm = xvm;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  598  			w->w_args.a_mbdesc = mbinfo->mbdesc;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  599  			w->w_args.a_mboffset = offset % xvm->xvm_bktsz;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  600  			w->w_args.a_pagec = 0;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  601  			work = &w->w_work;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  602  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  603  			iovmax = MPC_RA_IOV_MAX;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  604  			iovmax -= page->index % MPC_RA_IOV_MAX;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  605  		}
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  606  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  607  		w->w_args.a_pagev[w->w_args.a_pagec++] = page;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  608  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  609  		/*
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  610  		 * Restrict batch size to the number of struct kvecs
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  611  		 * that will fit into a page (minus our header).
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  612  		 */
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  613  		if (w->w_args.a_pagec >= iovmax) {
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  614  			queue_work(wq, work);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  615  			work = NULL;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  616  		}
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  617  	}
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  618  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  619  	if (work)
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  620  		queue_work(wq, work);
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  621  
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  622  	return 0;
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  623  }
3114e86da188ef1 Nabeel M Mohamed 2020-09-28  624  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 57283 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-nvme/attachments/20200929/5cb67bff/attachment-0001.gz>


More information about the Linux-nvme mailing list