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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
