CC: [email protected]
CC: Omar Sandoval <[email protected]>
CC: [email protected]
TO: Omar Sandoval <[email protected]>

tree:   https://github.com/osandov/linux.git btrfs-send-encoded
head:   b460af84b8ddd4fd78e02fec6272b70326b87861
commit: d38f9ac9a40338488424fe7e8058dfb2542ca2ef [8/14] btrfs: add 
BTRFS_IOC_ENCODED_READ
:::::: branch date: 4 days ago
:::::: commit date: 4 days ago
config: openrisc-randconfig-m031-20211025 (attached as .config)
compiler: or1k-linux-gcc (GCC) 11.2.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]>

New smatch warnings:
fs/btrfs/inode.c:10831 btrfs_encoded_read_regular() warn: potentially one past 
the end of array 'pages[i]'
fs/btrfs/inode.c:10831 btrfs_encoded_read_regular() warn: potentially one past 
the end of array 'pages[i]'

Old smatch warnings:
fs/btrfs/inode.c:287 insert_inline_extent() error: we previously assumed 
'compressed_pages' could be null (see line 256)

vim +10831 fs/btrfs/inode.c

d38f9ac9a40338 Omar Sandoval 2019-10-09  10781  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10782  static ssize_t 
btrfs_encoded_read_regular(struct kiocb *iocb,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10783                                  
          struct iov_iter *iter,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10784                                  
          u64 start, u64 lockend,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10785                                  
          struct extent_state **cached_state,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10786                                  
          u64 offset, u64 disk_io_size,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10787                                  
          size_t count, bool compressed,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10788                                  
          bool *unlocked)
d38f9ac9a40338 Omar Sandoval 2019-10-09  10789  {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10790          struct inode *inode = 
file_inode(iocb->ki_filp);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10791          struct extent_io_tree 
*io_tree = &BTRFS_I(inode)->io_tree;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10792          struct page **pages;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10793          unsigned long nr_pages, 
i;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10794          u64 cur;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10795          size_t page_offset;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10796          ssize_t ret;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10797  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10798          nr_pages = 
DIV_ROUND_UP(disk_io_size, PAGE_SIZE);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10799          pages = 
kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10800          if (!pages)
d38f9ac9a40338 Omar Sandoval 2019-10-09  10801                  return -ENOMEM;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10802          for (i = 0; i < 
nr_pages; i++) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10803                  pages[i] = 
alloc_page(GFP_NOFS | __GFP_HIGHMEM);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10804                  if (!pages[i]) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10805                          ret = 
-ENOMEM;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10806                          goto 
out;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10807                  }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10808          }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10809  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10810          ret = 
btrfs_encoded_read_regular_fill_pages(inode, offset, disk_io_size,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10811                                  
                    pages);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10812          if (ret)
d38f9ac9a40338 Omar Sandoval 2019-10-09  10813                  goto out;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10814  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10815          
unlock_extent_cached(io_tree, start, lockend, cached_state);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10816          
inode_unlock_shared(inode);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10817          *unlocked = true;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10818  
d38f9ac9a40338 Omar Sandoval 2019-10-09  10819          if (compressed) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10820                  i = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10821                  page_offset = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10822          } else {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10823                  i = 
(iocb->ki_pos - start) >> PAGE_SHIFT;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10824                  page_offset = 
(iocb->ki_pos - start) & (PAGE_SIZE - 1);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10825          }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10826          cur = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10827          while (cur < count) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10828                  size_t bytes = 
min_t(size_t, count - cur,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10829                                  
     PAGE_SIZE - page_offset);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10830  
d38f9ac9a40338 Omar Sandoval 2019-10-09 @10831                  if 
(copy_page_to_iter(pages[i], page_offset, bytes,
d38f9ac9a40338 Omar Sandoval 2019-10-09  10832                                  
      iter) != bytes) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10833                          ret = 
-EFAULT;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10834                          goto 
out;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10835                  }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10836                  i++;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10837                  cur += bytes;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10838                  page_offset = 0;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10839          }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10840          ret = count;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10841  out:
d38f9ac9a40338 Omar Sandoval 2019-10-09  10842          for (i = 0; i < 
nr_pages; i++) {
d38f9ac9a40338 Omar Sandoval 2019-10-09  10843                  if (pages[i])
d38f9ac9a40338 Omar Sandoval 2019-10-09  10844                          
__free_page(pages[i]);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10845          }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10846          kfree(pages);
d38f9ac9a40338 Omar Sandoval 2019-10-09  10847          return ret;
d38f9ac9a40338 Omar Sandoval 2019-10-09  10848  }
d38f9ac9a40338 Omar Sandoval 2019-10-09  10849  

---
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