CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: Qu Wenruo <[email protected]>
TO: [email protected]

Hi Qu,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on kdave/for-next]
[also build test WARNING on v5.14-rc4 next-20210805]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Qu-Wenruo/btrfs-defrag-rework-to-support-sector-perfect-defrag/20210806-161501
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
:::::: branch date: 6 hours ago
:::::: commit date: 6 hours ago
config: h8300-randconfig-m031-20210804 (attached as .config)
compiler: h8300-linux-gcc (GCC) 10.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]>

New smatch warnings:
fs/btrfs/ioctl.c:1211 defrag_prepare_one_page() warn: should 'index << 12' be a 
64 bit type?

Old smatch warnings:
fs/btrfs/ioctl.c:815 create_snapshot() warn: '&pending_snapshot->list' not 
removed from list
fs/btrfs/ioctl.c:1614 btrfs_defrag_file() warn: should 'ret << 12' be a 64 bit 
type?

vim +1211 fs/btrfs/ioctl.c

940100a4a7b78b Chris Mason 2010-03-10  1194  
e12d5e774b481a Qu Wenruo   2021-08-06  1195  /*
e12d5e774b481a Qu Wenruo   2021-08-06  1196   * Prepare one page to be 
defragged.
e12d5e774b481a Qu Wenruo   2021-08-06  1197   *
e12d5e774b481a Qu Wenruo   2021-08-06  1198   * This will ensure:
e12d5e774b481a Qu Wenruo   2021-08-06  1199   * - Returned page is locked and 
has been set up properly
e12d5e774b481a Qu Wenruo   2021-08-06  1200   * - No ordered extent exists in 
the page
e12d5e774b481a Qu Wenruo   2021-08-06  1201   * - The page is uptodate
e12d5e774b481a Qu Wenruo   2021-08-06  1202   *
e12d5e774b481a Qu Wenruo   2021-08-06  1203   * NOTE: Caller should also wait 
for page writeback after the cluster is
e12d5e774b481a Qu Wenruo   2021-08-06  1204   * prepared, here we don't do 
writeback wait for each page.
e12d5e774b481a Qu Wenruo   2021-08-06  1205   */
e12d5e774b481a Qu Wenruo   2021-08-06  1206  static struct page 
*defrag_prepare_one_page(struct btrfs_inode *inode,
e12d5e774b481a Qu Wenruo   2021-08-06  1207                                     
    pgoff_t index)
e12d5e774b481a Qu Wenruo   2021-08-06  1208  {
e12d5e774b481a Qu Wenruo   2021-08-06  1209     struct address_space *mapping = 
inode->vfs_inode.i_mapping;
e12d5e774b481a Qu Wenruo   2021-08-06  1210     gfp_t mask = 
btrfs_alloc_write_mask(mapping);
e12d5e774b481a Qu Wenruo   2021-08-06 @1211     u64 page_start = index << 
PAGE_SHIFT;
e12d5e774b481a Qu Wenruo   2021-08-06  1212     u64 page_end = page_start + 
PAGE_SIZE - 1;
e12d5e774b481a Qu Wenruo   2021-08-06  1213     struct extent_state 
*cached_state = NULL;
e12d5e774b481a Qu Wenruo   2021-08-06  1214     struct page *page;
e12d5e774b481a Qu Wenruo   2021-08-06  1215     int ret;
e12d5e774b481a Qu Wenruo   2021-08-06  1216  
e12d5e774b481a Qu Wenruo   2021-08-06  1217  again:
e12d5e774b481a Qu Wenruo   2021-08-06  1218     page = 
find_or_create_page(mapping, index, mask);
e12d5e774b481a Qu Wenruo   2021-08-06  1219     if (!page)
e12d5e774b481a Qu Wenruo   2021-08-06  1220             return ERR_PTR(-ENOMEM);
e12d5e774b481a Qu Wenruo   2021-08-06  1221  
e12d5e774b481a Qu Wenruo   2021-08-06  1222     ret = 
set_page_extent_mapped(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1223     if (ret < 0) {
e12d5e774b481a Qu Wenruo   2021-08-06  1224             unlock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1225             put_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1226             return ERR_PTR(ret);
e12d5e774b481a Qu Wenruo   2021-08-06  1227     }
e12d5e774b481a Qu Wenruo   2021-08-06  1228  
e12d5e774b481a Qu Wenruo   2021-08-06  1229     /* Wait for any exists ordered 
extent in the range */
e12d5e774b481a Qu Wenruo   2021-08-06  1230     while (1) {
e12d5e774b481a Qu Wenruo   2021-08-06  1231             struct 
btrfs_ordered_extent *ordered;
e12d5e774b481a Qu Wenruo   2021-08-06  1232  
e12d5e774b481a Qu Wenruo   2021-08-06  1233             
lock_extent_bits(&inode->io_tree, page_start, page_end,
e12d5e774b481a Qu Wenruo   2021-08-06  1234                              
&cached_state);
e12d5e774b481a Qu Wenruo   2021-08-06  1235             ordered = 
btrfs_lookup_ordered_range(inode, page_start,
e12d5e774b481a Qu Wenruo   2021-08-06  1236                                     
             PAGE_SIZE);
e12d5e774b481a Qu Wenruo   2021-08-06  1237             
unlock_extent_cached(&inode->io_tree, page_start, page_end,
e12d5e774b481a Qu Wenruo   2021-08-06  1238                                  
&cached_state);
e12d5e774b481a Qu Wenruo   2021-08-06  1239             if (!ordered)
e12d5e774b481a Qu Wenruo   2021-08-06  1240                     break;
e12d5e774b481a Qu Wenruo   2021-08-06  1241  
e12d5e774b481a Qu Wenruo   2021-08-06  1242             unlock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1243             
btrfs_start_ordered_extent(ordered, 1);
e12d5e774b481a Qu Wenruo   2021-08-06  1244             
btrfs_put_ordered_extent(ordered);
e12d5e774b481a Qu Wenruo   2021-08-06  1245             lock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1246             /*
e12d5e774b481a Qu Wenruo   2021-08-06  1247              * we unlocked the page 
above, so we need check if
e12d5e774b481a Qu Wenruo   2021-08-06  1248              * it was released or 
not.
e12d5e774b481a Qu Wenruo   2021-08-06  1249              */
e12d5e774b481a Qu Wenruo   2021-08-06  1250             if (page->mapping != 
mapping || !PagePrivate(page)) {
e12d5e774b481a Qu Wenruo   2021-08-06  1251                     
unlock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1252                     put_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1253                     goto again;
e12d5e774b481a Qu Wenruo   2021-08-06  1254             }
e12d5e774b481a Qu Wenruo   2021-08-06  1255     }
e12d5e774b481a Qu Wenruo   2021-08-06  1256  
e12d5e774b481a Qu Wenruo   2021-08-06  1257     /*
e12d5e774b481a Qu Wenruo   2021-08-06  1258      * Now the page range has no 
ordered extent any more.
e12d5e774b481a Qu Wenruo   2021-08-06  1259      * Read the page to make it 
uptodate.
e12d5e774b481a Qu Wenruo   2021-08-06  1260      */
e12d5e774b481a Qu Wenruo   2021-08-06  1261     if (!PageUptodate(page)) {
e12d5e774b481a Qu Wenruo   2021-08-06  1262             btrfs_readpage(NULL, 
page);
e12d5e774b481a Qu Wenruo   2021-08-06  1263             lock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1264             if (page->mapping != 
mapping || !PagePrivate(page)) {
e12d5e774b481a Qu Wenruo   2021-08-06  1265                     
unlock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1266                     put_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1267                     goto again;
e12d5e774b481a Qu Wenruo   2021-08-06  1268             }
e12d5e774b481a Qu Wenruo   2021-08-06  1269             if 
(!PageUptodate(page)) {
e12d5e774b481a Qu Wenruo   2021-08-06  1270                     
unlock_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1271                     put_page(page);
e12d5e774b481a Qu Wenruo   2021-08-06  1272                     return 
ERR_PTR(-EIO);
e12d5e774b481a Qu Wenruo   2021-08-06  1273             }
e12d5e774b481a Qu Wenruo   2021-08-06  1274     }
e12d5e774b481a Qu Wenruo   2021-08-06  1275     return page;
e12d5e774b481a Qu Wenruo   2021-08-06  1276  }
e12d5e774b481a Qu Wenruo   2021-08-06  1277  

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