[dm-devel] [dm:for-next 29/30] drivers/md/dm-ebs-target.c:190:32: sparse: expected restricted blk_status_t [usertype] bi_status

kbuild test robot lkp at intel.com
Thu Apr 30 02:07:10 UTC 2020


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git for-next
head:   ddc1316e185f6ab4a74656b4879a15ec23cdec31
commit: eeb17d25430dc2b3251a5abfec6a3b9160daaef6 [29/30] dm ebs: new block size emulating target
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-191-gc51a0382-dirty
        git checkout eeb17d25430dc2b3251a5abfec6a3b9160daaef6
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
:::::: branch date: 7 hours ago
:::::: commit date: 30 hours ago

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


sparse warnings: (new ones prefixed by >>)

   drivers/md/dm-ebs-target.c:190:32: sparse: sparse: incorrect type in assignment (different base types) @@    expected restricted blk_status_t [usertype] bi_status @@    got s_t [usertype] bi_status @@
>> drivers/md/dm-ebs-target.c:190:32: sparse:    expected restricted blk_status_t [usertype] bi_status
>> drivers/md/dm-ebs-target.c:190:32: sparse:    got int [assigned] r
   drivers/md/dm-ebs-target.c:423:12: sparse: sparse: symbol 'dm_ebs_init' was not declared. Should it be static?
   drivers/md/dm-ebs-target.c:433:6: sparse: sparse: symbol 'dm_ebs_exit' was not declared. Should it be static?

# https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?id=eeb17d25430dc2b3251a5abfec6a3b9160daaef6
git remote add dm https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git
git remote update dm
git checkout eeb17d25430dc2b3251a5abfec6a3b9160daaef6
vim +190 drivers/md/dm-ebs-target.c

eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  146  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  147  /* Worker funtion to process incoming bios. */
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  148  static void __ebs_process_bios(struct work_struct *ws)
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  149  {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  150  	int r;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  151  	bool write = false;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  152  	sector_t block1, block2;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  153  	struct ebs_c *ec = container_of(ws, struct ebs_c, ws);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  154  	struct bio *bio;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  155  	struct bio_list bios;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  156  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  157  	bio_list_init(&bios);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  158  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  159  	spin_lock_irq(&ec->lock);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  160  	bios = ec->bios_in;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  161  	bio_list_init(&ec->bios_in);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  162  	spin_unlock_irq(&ec->lock);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  163  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  164  	/* Prefetch all read and any mis-aligned write buffers */
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  165  	bio_list_for_each(bio, &bios) {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  166  		block1 = __sector_to_block(ec, bio->bi_iter.bi_sector);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  167  		if (bio_op(bio) == REQ_OP_READ)
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  168  			dm_bufio_prefetch(ec->bufio, block1, __nr_blocks(ec, bio));
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  169  		else if (bio_op(bio) == REQ_OP_WRITE && !(bio->bi_opf & REQ_PREFLUSH)) {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  170  			block2 = __sector_to_block(ec, bio_end_sector(bio));
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  171  			if (__block_mod(bio->bi_iter.bi_sector, ec->u_bs))
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  172  				dm_bufio_prefetch(ec->bufio, block1, 1);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  173  			if (__block_mod(bio_end_sector(bio), ec->u_bs) && block2 != block1)
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  174  				dm_bufio_prefetch(ec->bufio, block2, 1);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  175  		}
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  176  	}
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  177  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  178  	bio_list_for_each(bio, &bios) {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  179  		r = -EIO;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  180  		if (bio_op(bio) == REQ_OP_READ)
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  181  			r = __ebs_rw_bio(ec, READ, bio);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  182  		else if (bio_op(bio) == REQ_OP_WRITE) {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  183  			write = true;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  184  			r = __ebs_rw_bio(ec, WRITE, bio);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  185  		} else if (bio_op(bio) == REQ_OP_DISCARD) {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  186  			/* FIXME: (optionally) call dm_bufio_discard_buffers() once upstream. */
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  187  			r = __ebs_forget_bio(ec, bio);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  188  		}
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  189  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09 @190  		bio->bi_status = r;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  191  	}
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  192  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  193  	/*
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  194  	 * We write dirty buffers after processing I/O on them
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  195  	 * but before we endio thus addressing REQ_FUA/REQ_SYNC.
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  196  	 */
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  197  	r = write ? dm_bufio_write_dirty_buffers(ec->bufio) : 0;
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  198  
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  199  	while ((bio = bio_list_pop(&bios))) {
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  200  		/* Any other request is endioed. */
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  201  		if (unlikely(r && bio_op(bio) == REQ_OP_WRITE))
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  202  			bio_io_error(bio);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  203  		else
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  204  			bio_endio(bio);
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  205  	}
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  206  }
eeb17d25430dc2 Heinz Mauelshagen 2020-03-09  207  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org





More information about the dm-devel mailing list