Re: [dm-devel] [dm:for-next 20/20] drivers/md/dm.c:850:43: warning: variable 'bio' is uninitialized when used here

2021-06-02 Thread Damien Le Moal
On 2021/06/03 6:26, kernel test robot wrote:
> tree:   
> https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git 
> for-next
> head:   2c243153d1d4be4e23735cd10984ac17c7a54531
> commit: 2c243153d1d4be4e23735cd10984ac17c7a54531 [20/20] dm: Forbid requeue 
> of writes to zones
> config: riscv-randconfig-r011-20210602 (attached as .config)
> compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
> d41cb6bb2607fa5c7a9df2b3dab361353657d225)
> 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
> # install riscv cross compiling tool for clang build
> # apt-get install binutils-riscv64-linux-gnu
> # 
> https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?id=2c243153d1d4be4e23735cd10984ac17c7a54531
> git remote add dm 
> https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git
> git fetch --no-tags dm for-next
> git checkout 2c243153d1d4be4e23735cd10984ac17c7a54531
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot 
> 
> All warnings (new ones prefixed by >>):
> 
>>> drivers/md/dm.c:850:43: warning: variable 'bio' is uninitialized when used 
>>> here [-Wuninitialized]
>!WARN_ON_ONCE(dm_is_zone_write(md, bio)))
>   ^~~
>include/asm-generic/bug.h:102:25: note: expanded from macro 'WARN_ON_ONCE'
>int __ret_warn_on = !!(condition);  \
>   ^
>drivers/md/dm.c:832:17: note: initialize the variable 'bio' to silence 
> this warning
>struct bio *bio;
>   ^
>= NULL
>1 warning generated.
> 
> 
> vim +/bio +850 drivers/md/dm.c
> 
>823
>824/*
>825 * Decrements the number of outstanding ios that a bio has been
>826 * cloned into, completing the original io if necc.
>827 */
>828static void dec_pending(struct dm_io *io, blk_status_t error)
>829{
>830unsigned long flags;
>831blk_status_t io_error;
>832struct bio *bio;
>833struct mapped_device *md = io->md;
>834
>835/* Push-back supersedes any I/O errors */
>836if (unlikely(error)) {
>837spin_lock_irqsave(>endio_lock, flags);
>838if (!(io->status == BLK_STS_DM_REQUEUE && 
> __noflush_suspending(md)))
>839io->status = error;
>840spin_unlock_irqrestore(>endio_lock, flags);
>841}
>842
>843if (atomic_dec_and_test(>io_count)) {
>844if (io->status == BLK_STS_DM_REQUEUE) {
>845/*
>846 * Target requested pushing back the 
> I/O.
>847 */
>848spin_lock_irqsave(>deferred_lock, 
> flags);
>849if (__noflush_suspending(md) &&
>  > 850!WARN_ON_ONCE(dm_is_zone_write(md, 
> bio)))

Mike,

This needs to be WARN_ON_ONCE(dm_is_zone_write(md, io->orig_bio)).
Or better, we can move line 863 below right after the
"if (atomic_dec_and_test(>io_count)) {" above.

Do you want me to resend ? Or can you fix it up ?

Thanks !


>851/* NOTE early return due to 
> BLK_STS_DM_REQUEUE below */
>852
> bio_list_add_head(>deferred, io->orig_bio);
>853else
>854/*
>855 * noflush suspend was 
> interrupted or this is
>856 * a write to a zoned target.
>857 */
>858io->status = BLK_STS_IOERR;
>859
> spin_unlock_irqrestore(>deferred_lock, flags);
>860}
>861
>862io_error = io->status;
>863bio = io->orig_bio;
>864end_io_acct(io);
>865free_io(md, io);
>866
>867if (io_error == BLK_STS_DM_REQUEUE)
>868return;
>869
>

[dm-devel] [dm:for-next 20/20] drivers/md/dm.c:850:43: warning: variable 'bio' is uninitialized when used here

2021-06-02 Thread kernel test robot
tree:   
https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git 
for-next
head:   2c243153d1d4be4e23735cd10984ac17c7a54531
commit: 2c243153d1d4be4e23735cd10984ac17c7a54531 [20/20] dm: Forbid requeue of 
writes to zones
config: riscv-randconfig-r011-20210602 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
d41cb6bb2607fa5c7a9df2b3dab361353657d225)
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
# install riscv cross compiling tool for clang build
# apt-get install binutils-riscv64-linux-gnu
# 
https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?id=2c243153d1d4be4e23735cd10984ac17c7a54531
git remote add dm 
https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git
git fetch --no-tags dm for-next
git checkout 2c243153d1d4be4e23735cd10984ac17c7a54531
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All warnings (new ones prefixed by >>):

>> drivers/md/dm.c:850:43: warning: variable 'bio' is uninitialized when used 
>> here [-Wuninitialized]
   !WARN_ON_ONCE(dm_is_zone_write(md, bio)))
  ^~~
   include/asm-generic/bug.h:102:25: note: expanded from macro 'WARN_ON_ONCE'
   int __ret_warn_on = !!(condition);  \
  ^
   drivers/md/dm.c:832:17: note: initialize the variable 'bio' to silence this 
warning
   struct bio *bio;
  ^
   = NULL
   1 warning generated.


vim +/bio +850 drivers/md/dm.c

   823  
   824  /*
   825   * Decrements the number of outstanding ios that a bio has been
   826   * cloned into, completing the original io if necc.
   827   */
   828  static void dec_pending(struct dm_io *io, blk_status_t error)
   829  {
   830  unsigned long flags;
   831  blk_status_t io_error;
   832  struct bio *bio;
   833  struct mapped_device *md = io->md;
   834  
   835  /* Push-back supersedes any I/O errors */
   836  if (unlikely(error)) {
   837  spin_lock_irqsave(>endio_lock, flags);
   838  if (!(io->status == BLK_STS_DM_REQUEUE && 
__noflush_suspending(md)))
   839  io->status = error;
   840  spin_unlock_irqrestore(>endio_lock, flags);
   841  }
   842  
   843  if (atomic_dec_and_test(>io_count)) {
   844  if (io->status == BLK_STS_DM_REQUEUE) {
   845  /*
   846   * Target requested pushing back the I/O.
   847   */
   848  spin_lock_irqsave(>deferred_lock, flags);
   849  if (__noflush_suspending(md) &&
 > 850  !WARN_ON_ONCE(dm_is_zone_write(md, bio)))
   851  /* NOTE early return due to 
BLK_STS_DM_REQUEUE below */
   852  bio_list_add_head(>deferred, 
io->orig_bio);
   853  else
   854  /*
   855   * noflush suspend was interrupted or 
this is
   856   * a write to a zoned target.
   857   */
   858  io->status = BLK_STS_IOERR;
   859  spin_unlock_irqrestore(>deferred_lock, 
flags);
   860  }
   861  
   862  io_error = io->status;
   863  bio = io->orig_bio;
   864  end_io_acct(io);
   865  free_io(md, io);
   866  
   867  if (io_error == BLK_STS_DM_REQUEUE)
   868  return;
   869  
   870  if ((bio->bi_opf & REQ_PREFLUSH) && 
bio->bi_iter.bi_size) {
   871  /*
   872   * Preflush done for flush with data, reissue
   873   * without REQ_PREFLUSH.
   874   */
   875  bio->bi_opf &= ~REQ_PREFLUSH;
   876  queue_io(md, bio);
   877  } else {
   878  /* done with normal IO or empty flush */
   879  if (io_error)
   880  bio->bi_status = io_error;
   881  bio_endio(bio);
   882  }
   883  }
   884  }
   885  

---
0-DAY CI Kernel Test Service, Intel