tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git 
dio-mem-align
head:   3d6ef82805958611e8ffa0a901c014b6f066c3e6
commit: 446db6bc49cd5c4a77daffbbcbe0cf69ff7a62e0 [1/3] fs: relax memory 
alignment restriction for O_DIRECT
config: x86_64-randconfig-m001-20210211 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
fs/direct-io.c:1177 do_blockdev_direct_IO() warn: variable dereferenced before 
check 'bdev' (see line 1132)

vim +/bdev +1177 fs/direct-io.c

65dd2aa90aa17a Andi Kleen              2012-01-12  1125  static inline ssize_t
17f8c842d24ac0 Omar Sandoval           2015-03-16  1126  
do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
17f8c842d24ac0 Omar Sandoval           2015-03-16  1127                       
struct block_device *bdev, struct iov_iter *iter,
c8b8e32d700fe9 Christoph Hellwig       2016-04-07  1128                       
get_block_t get_block, dio_iodone_t end_io,
facd07b07d2a79 Josef Bacik             2010-05-23  1129                       
dio_submit_t submit_io, int flags)
^1da177e4c3f41 Linus Torvalds          2005-04-16  1130  {
6aa7de059173a9 Mark Rutland            2017-10-23  1131         unsigned 
i_blkbits = READ_ONCE(inode->i_blkbits);
446db6bc49cd5c Jens Axboe              2021-02-11 @1132         struct 
request_queue *q = bdev_get_queue(bdev);
                                                                                
                         ^^^^
Dereferenced inside the function (I didn't double check.  #trustTheMachine)

ab73857e354ab9 Linus Torvalds          2012-11-29  1133         unsigned 
blkbits = i_blkbits;
^1da177e4c3f41 Linus Torvalds          2005-04-16  1134         unsigned 
blocksize_mask = (1 << blkbits) - 1;
^1da177e4c3f41 Linus Torvalds          2005-04-16  1135         ssize_t retval 
= -EINVAL;
1c0ff0f1bdeb18 Nikolay Borisov         2018-04-05  1136         const size_t 
count = iov_iter_count(iter);
c8b8e32d700fe9 Christoph Hellwig       2016-04-07  1137         loff_t offset = 
iocb->ki_pos;
1c0ff0f1bdeb18 Nikolay Borisov         2018-04-05  1138         const loff_t 
end = offset + count;
^1da177e4c3f41 Linus Torvalds          2005-04-16  1139         struct dio *dio;
eb28be2b4c0a06 Andi Kleen              2011-08-01  1140         struct 
dio_submit sdio = { 0, };
847cc6371ba820 Andi Kleen              2011-08-01  1141         struct 
buffer_head map_bh = { 0, };
647d1e4c523576 Fengguang Wu            2012-08-09  1142         struct blk_plug 
plug;
^1da177e4c3f41 Linus Torvalds          2005-04-16  1143  
65dd2aa90aa17a Andi Kleen              2012-01-12  1144         /*
65dd2aa90aa17a Andi Kleen              2012-01-12  1145          * Avoid 
references to bdev if not absolutely needed to give
65dd2aa90aa17a Andi Kleen              2012-01-12  1146          * the early 
prefetch in the caller enough time.
65dd2aa90aa17a Andi Kleen              2012-01-12  1147          */
^1da177e4c3f41 Linus Torvalds          2005-04-16  1148  
f9b5570d7fdedf Christoph Hellwig       2011-06-24  1149         /* watch out 
for a 0 len io from a tricksy fs */
1c0ff0f1bdeb18 Nikolay Borisov         2018-04-05  1150         if 
(iov_iter_rw(iter) == READ && !count)
f9b5570d7fdedf Christoph Hellwig       2011-06-24  1151                 return 
0;
f9b5570d7fdedf Christoph Hellwig       2011-06-24  1152  
6e8267f532a171 Andi Kleen              2011-08-01  1153         dio = 
kmem_cache_alloc(dio_cache, GFP_KERNEL);
^1da177e4c3f41 Linus Torvalds          2005-04-16  1154         if (!dio)
46d716025a228d Gabriel Krisman Bertazi 2020-10-08  1155                 return 
-ENOMEM;
23aee091d804ef Jeff Moyer              2009-12-15  1156         /*
23aee091d804ef Jeff Moyer              2009-12-15  1157          * Believe it 
or not, zeroing out the page array caused a .5%
23aee091d804ef Jeff Moyer              2009-12-15  1158          * performance 
regression in a database benchmark.  So, we take
23aee091d804ef Jeff Moyer              2009-12-15  1159          * care to only 
zero out what's needed.
23aee091d804ef Jeff Moyer              2009-12-15  1160          */
23aee091d804ef Jeff Moyer              2009-12-15  1161         memset(dio, 0, 
offsetof(struct dio, pages));
^1da177e4c3f41 Linus Torvalds          2005-04-16  1162  
5fe878ae7f82fb Christoph Hellwig       2009-12-15  1163         dio->flags = 
flags;
0a9164cb7ff32d Gabriel Krisman Bertazi 2020-10-08  1164         if (dio->flags 
& DIO_LOCKING && iov_iter_rw(iter) == READ) {
5fe878ae7f82fb Christoph Hellwig       2009-12-15  1165                 /* will 
be released by direct_io_worker */
5955102c9984fa Al Viro                 2016-01-22  1166                 
inode_lock(inode);
df2d6f26586f12 Christoph Hellwig       2011-06-24  1167         }
^1da177e4c3f41 Linus Torvalds          2005-04-16  1168  
74cedf9b6c603f Jan Kara                2015-11-30  1169         /* Once we 
sampled i_size check for reads beyond EOF */
74cedf9b6c603f Jan Kara                2015-11-30  1170         dio->i_size = 
i_size_read(inode);
74cedf9b6c603f Jan Kara                2015-11-30  1171         if 
(iov_iter_rw(iter) == READ && offset >= dio->i_size) {
2d4594acbf6d8f Al Viro                 2015-12-08  1172                 retval 
= 0;
46d716025a228d Gabriel Krisman Bertazi 2020-10-08  1173                 goto 
fail_dio;
74cedf9b6c603f Jan Kara                2015-11-30  1174         }
74cedf9b6c603f Jan Kara                2015-11-30  1175  
446db6bc49cd5c Jens Axboe              2021-02-11  1176         if (offset & 
blocksize_mask) {
41b21af388f94b Gabriel Krisman Bertazi 2020-10-08 @1177                 if 
(bdev)
                                                                            ^^^^
Hopefully this check can be removed?  We would have crashed by this
point.

41b21af388f94b Gabriel Krisman Bertazi 2020-10-08  1178                         
blkbits = blksize_bits(bdev_logical_block_size(bdev));
41b21af388f94b Gabriel Krisman Bertazi 2020-10-08  1179                 
blocksize_mask = (1 << blkbits) - 1;
446db6bc49cd5c Jens Axboe              2021-02-11  1180                 if 
(offset & blocksize_mask)
41b21af388f94b Gabriel Krisman Bertazi 2020-10-08  1181                         
goto fail_dio;
41b21af388f94b Gabriel Krisman Bertazi 2020-10-08  1182         }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to