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 <[email protected]>
> 
> 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(&io->endio_lock, flags);
>    838                        if (!(io->status == BLK_STS_DM_REQUEUE && 
> __noflush_suspending(md)))
>    839                                io->status = error;
>    840                        spin_unlock_irqrestore(&io->endio_lock, flags);
>    841                }
>    842        
>    843                if (atomic_dec_and_test(&io->io_count)) {
>    844                        if (io->status == BLK_STS_DM_REQUEUE) {
>    845                                /*
>    846                                 * Target requested pushing back the 
> I/O.
>    847                                 */
>    848                                spin_lock_irqsave(&md->deferred_lock, 
> flags);
>    849                                if (__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->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(&md->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(&md->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 Corporation
> https://lists.01.org/hyperkitty/list/[email protected]
> 


-- 
Damien Le Moal
Western Digital Research



--
dm-devel mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to