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.9-rc1 next-20200819]
[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-switch-btrfs_buf...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
config: arm-randconfig-r022-20200818 (attached as .config)
compiler: clang version 12.0.0 (
https://github.com/llvm/llvm-project
b34b1e38381fa4d1b1d9751a6b5233b68e734cfe)
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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
In file included from fs/btrfs/file.c:19:
fs/btrfs/ctree.h:2265:8: warning: 'const' type qualifier on return type has no
effect [-Wignored-qualifiers]
size_t __const btrfs_get_num_csums(void);
^~~~~~~~
> fs/btrfs/file.c:1570:24: warning: comparison of distinct pointer
types ('typeof (iov_iter_count(i)) *' (aka 'unsigned int *') and
'typeof (((1UL) << 12) - offset) *' (aka 'unsigned long *'))
[-Wcompare-distinct-pointer-types]
size_t write_bytes =
min(iov_iter_count(i),
^~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:884:19: note: expanded from macro 'min'
#define min(x, y) __careful_cmp(x, y, <)
^~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:875:24: note: expanded from macro '__careful_cmp'
__builtin_choose_expr(__safe_cmp(x, y), \
^~~~~~~~~~~~~~~~
include/linux/kernel.h:865:4: note: expanded from macro '__safe_cmp'
(__typecheck(x, y) && __no_side_effects(x, y))
^~~~~~~~~~~~~~~~~
include/linux/kernel.h:851:29: note: expanded from macro '__typecheck'
(!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~
2 warnings generated.
#
https://github.com/0day-ci/linux/commit/89f414f96d87eab3a1c3a3afc5283f801...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Qu-Wenruo/btrfs-switch-btrfs_buffered_write-to-page-by-page-pace/20200819-135541
git checkout 89f414f96d87eab3a1c3a3afc5283f80154e7a8b
vim +1570 fs/btrfs/file.c
89f414f96d87ea Qu Wenruo 2020-08-19 1550
e4af400a9c5081 Goldwyn Rodrigues 2018-06-17 1551 static noinline ssize_t
btrfs_buffered_write(struct kiocb *iocb,
e4af400a9c5081 Goldwyn Rodrigues 2018-06-17 1552 struct iov_iter *i)
39279cc3d2704c Chris Mason 2007-06-12 1553 {
e4af400a9c5081 Goldwyn Rodrigues 2018-06-17 1554 struct file *file =
iocb->ki_filp;
e4af400a9c5081 Goldwyn Rodrigues 2018-06-17 1555 loff_t pos = iocb->ki_pos;
496ad9aa8ef448 Al Viro 2013-01-23 1556 struct inode *inode =
file_inode(file);
0b246afa62b0cf Jeff Mahoney 2016-06-22 1557 struct btrfs_fs_info *fs_info =
btrfs_sb(inode->i_sb);
89f414f96d87ea Qu Wenruo 2020-08-19 1558 struct page *page = NULL;
364ecf3651e086 Qu Wenruo 2017-02-27 1559 struct extent_changeset
*data_reserved = NULL;
376cc685cb3b43 Miao Xie 2013-12-10 1560 u64 lockstart;
376cc685cb3b43 Miao Xie 2013-12-10 1561 u64 lockend;
d0215f3e5ebb58 Josef Bacik 2011-01-25 1562 size_t num_written = 0;
c9149235a42ab9 Tsutomu Itoh 2011-03-30 1563 int ret = 0;
7ee9e4405f264e Josef Bacik 2013-06-21 1564 bool only_release_metadata = false;
b6316429af7f36 Josef Bacik 2011-09-30 1565 bool force_page_uptodate = false;
4b46fce23349bf Josef Bacik 2010-05-23 1566
d0215f3e5ebb58 Josef Bacik 2011-01-25 1567 while (iov_iter_count(i) > 0) {
c67d970f0ea8dc Filipe Manana 2019-09-30 1568 struct extent_state *cached_state =
NULL;
7073017aeb98db Johannes Thumshirn 2018-12-05 1569 size_t offset =
offset_in_page(pos);
d0215f3e5ebb58 Josef Bacik 2011-01-25 @1570 size_t write_bytes =
min(iov_iter_count(i),
89f414f96d87ea Qu Wenruo 2020-08-19 1571 PAGE_SIZE - offset);
89f414f96d87ea Qu Wenruo 2020-08-19 1572 size_t reserve_bytes = PAGE_SIZE;
d0215f3e5ebb58 Josef Bacik 2011-01-25 1573 size_t copied;
79f015f216539d Goldwyn Rodrigues 2017-10-16 1574 int extents_locked;
39279cc3d2704c Chris Mason 2007-06-12 1575
914ee295af418e Xin Zhong 2010-12-09 1576 /*
89f414f96d87ea Qu Wenruo 2020-08-19 1577 * Fault pages before locking them
in prepare_page()
914ee295af418e Xin Zhong 2010-12-09 1578 * to avoid recursive lock
914ee295af418e Xin Zhong 2010-12-09 1579 */
d0215f3e5ebb58 Josef Bacik 2011-01-25 1580 if
(unlikely(iov_iter_fault_in_readable(i, write_bytes))) {
914ee295af418e Xin Zhong 2010-12-09 1581 ret = -EFAULT;
d0215f3e5ebb58 Josef Bacik 2011-01-25 1582 break;
914ee295af418e Xin Zhong 2010-12-09 1583 }
914ee295af418e Xin Zhong 2010-12-09 1584
a0e248bb502d51 Filipe Manana 2019-10-11 1585 only_release_metadata = false;
d9d8b2a51a404c Qu Wenruo 2015-09-08 1586
364ecf3651e086 Qu Wenruo 2017-02-27 1587
extent_changeset_release(data_reserved);
36ea6f3e931391 Nikolay Borisov 2020-06-03 1588 ret =
btrfs_check_data_free_space(BTRFS_I(inode),
36ea6f3e931391 Nikolay Borisov 2020-06-03 1589 &data_reserved, pos,
364ecf3651e086 Qu Wenruo 2017-02-27 1590 write_bytes);
c6887cd11149d7 Josef Bacik 2016-03-25 1591 if (ret < 0) {
89f414f96d87ea Qu Wenruo 2020-08-19 1592 size_t tmp = write_bytes;
38d37aa9c32938 Qu Wenruo 2020-06-24 1593 if
(btrfs_check_nocow_lock(BTRFS_I(inode), pos,
89f414f96d87ea Qu Wenruo 2020-08-19 1594 &tmp) > 0) {
89f414f96d87ea Qu Wenruo 2020-08-19 1595 ASSERT(tmp == write_bytes);
d9d8b2a51a404c Qu Wenruo 2015-09-08 1596 /*
d9d8b2a51a404c Qu Wenruo 2015-09-08 1597 * For nodata cow case, no need to
reserve
d9d8b2a51a404c Qu Wenruo 2015-09-08 1598 * data space.
d9d8b2a51a404c Qu Wenruo 2015-09-08 1599 */
7ee9e4405f264e Josef Bacik 2013-06-21 1600 only_release_metadata = true;
89f414f96d87ea Qu Wenruo 2020-08-19 1601 reserve_bytes = 0;
c6887cd11149d7 Josef Bacik 2016-03-25 1602 } else {
d0215f3e5ebb58 Josef Bacik 2011-01-25 1603 break;
c6887cd11149d7 Josef Bacik 2016-03-25 1604 }
c6887cd11149d7 Josef Bacik 2016-03-25 1605 }
1832a6d5ee3b1a Chris Mason 2007-12-21 1606
9f3db423f98c5c Nikolay Borisov 2017-02-20 1607 ret =
btrfs_delalloc_reserve_metadata(BTRFS_I(inode),
9f3db423f98c5c Nikolay Borisov 2017-02-20 1608 reserve_bytes);
7ee9e4405f264e Josef Bacik 2013-06-21 1609 if (ret) {
7ee9e4405f264e Josef Bacik 2013-06-21 1610 if (!only_release_metadata)
25ce28caaa1ddc Nikolay Borisov 2020-06-03 1611
btrfs_free_reserved_data_space(BTRFS_I(inode),
bc42bda22345ef Qu Wenruo 2017-02-27 1612 data_reserved, pos,
d9d8b2a51a404c Qu Wenruo 2015-09-08 1613 write_bytes);
8257b2dc3c1a10 Miao Xie 2014-03-06 1614 else
38d37aa9c32938 Qu Wenruo 2020-06-24 1615
btrfs_check_nocow_unlock(BTRFS_I(inode));
7ee9e4405f264e Josef Bacik 2013-06-21 1616 break;
7ee9e4405f264e Josef Bacik 2013-06-21 1617 }
7ee9e4405f264e Josef Bacik 2013-06-21 1618
376cc685cb3b43 Miao Xie 2013-12-10 1619 again:
89f414f96d87ea Qu Wenruo 2020-08-19 1620 ret = prepare_one_page(inode,
&page, pos, write_bytes,
b6316429af7f36 Josef Bacik 2011-09-30 1621 force_page_uptodate);
8b62f87bad9cf0 Josef Bacik 2017-10-19 1622 if (ret) {
8b62f87bad9cf0 Josef Bacik 2017-10-19 1623
btrfs_delalloc_release_extents(BTRFS_I(inode),
8702ba9396bf7b Qu Wenruo 2019-10-14 1624 reserve_bytes);
d0215f3e5ebb58 Josef Bacik 2011-01-25 1625 break;
8b62f87bad9cf0 Josef Bacik 2017-10-19 1626 }
39279cc3d2704c Chris Mason 2007-06-12 1627
79f015f216539d Goldwyn Rodrigues 2017-10-16 1628 extents_locked =
lock_and_cleanup_extent_if_need(
89f414f96d87ea Qu Wenruo 2020-08-19 1629 BTRFS_I(inode), &page, 1, pos,
write_bytes,
89f414f96d87ea Qu Wenruo 2020-08-19 1630 &lockstart, &lockend,
&cached_state);
79f015f216539d Goldwyn Rodrigues 2017-10-16 1631 if (extents_locked < 0) {
79f015f216539d Goldwyn Rodrigues 2017-10-16 1632 if (extents_locked == -EAGAIN)
376cc685cb3b43 Miao Xie 2013-12-10 1633 goto again;
8b62f87bad9cf0 Josef Bacik 2017-10-19 1634
btrfs_delalloc_release_extents(BTRFS_I(inode),
8702ba9396bf7b Qu Wenruo 2019-10-14 1635 reserve_bytes);
79f015f216539d Goldwyn Rodrigues 2017-10-16 1636 ret = extents_locked;
376cc685cb3b43 Miao Xie 2013-12-10 1637 break;
376cc685cb3b43 Miao Xie 2013-12-10 1638 }
376cc685cb3b43 Miao Xie 2013-12-10 1639
89f414f96d87ea Qu Wenruo 2020-08-19 1640 copied =
iov_iter_copy_from_user_atomic(page, i, offset,
89f414f96d87ea Qu Wenruo 2020-08-19 1641 write_bytes);
89f414f96d87ea Qu Wenruo 2020-08-19 1642 flush_dcache_page(page);
56244ef151c3cd Chris Mason 2016-05-16 1643
89f414f96d87ea Qu Wenruo 2020-08-19 1644 if (!PageUptodate(page) &&
copied < write_bytes) {
b1bf862e9dad43 Chris Mason 2011-02-28 1645 /*
89f414f96d87ea Qu Wenruo 2020-08-19 1646 * Short write on non-uptodate
page, we must retry and
89f414f96d87ea Qu Wenruo 2020-08-19 1647 * force the page uptodate in next
run.
b1bf862e9dad43 Chris Mason 2011-02-28 1648 */
89f414f96d87ea Qu Wenruo 2020-08-19 1649 copied = 0;
b6316429af7f36 Josef Bacik 2011-09-30 1650 force_page_uptodate = true;
b6316429af7f36 Josef Bacik 2011-09-30 1651 } else {
89f414f96d87ea Qu Wenruo 2020-08-19 1652 /* Next run doesn't need forced
uptodate */
b6316429af7f36 Josef Bacik 2011-09-30 1653 force_page_uptodate = false;
b6316429af7f36 Josef Bacik 2011-09-30 1654 }
914ee295af418e Xin Zhong 2010-12-09 1655
89f414f96d87ea Qu Wenruo 2020-08-19 1656 iov_iter_advance(i, copied);
485290a734f142 Qu Wenruo 2015-10-29 1657
89f414f96d87ea Qu Wenruo 2020-08-19 1658 if (copied > 0) {
89f414f96d87ea Qu Wenruo 2020-08-19 1659 ret =
btrfs_dirty_pages(BTRFS_I(inode), &page, 1, pos,
89f414f96d87ea Qu Wenruo 2020-08-19 1660 copied, &cached_state);
89f414f96d87ea Qu Wenruo 2020-08-19 1661 } else {
89f414f96d87ea Qu Wenruo 2020-08-19 1662 /* No bytes copied, need to free
reserved space */
89f414f96d87ea Qu Wenruo 2020-08-19 1663 if (only_release_metadata)
89f414f96d87ea Qu Wenruo 2020-08-19 1664
btrfs_delalloc_release_metadata(BTRFS_I(inode),
89f414f96d87ea Qu Wenruo 2020-08-19 1665 reserve_bytes, true);
89f414f96d87ea Qu Wenruo 2020-08-19 1666 else
86d52921a2ba51 Nikolay Borisov 2020-06-03 1667
btrfs_delalloc_release_space(BTRFS_I(inode),
89f414f96d87ea Qu Wenruo 2020-08-19 1668 data_reserved, pos,
write_bytes,
89f414f96d87ea Qu Wenruo 2020-08-19 1669 true);
485290a734f142 Qu Wenruo 2015-10-29 1670 }
914ee295af418e Xin Zhong 2010-12-09 1671
c67d970f0ea8dc Filipe Manana 2019-09-30 1672 /*
c67d970f0ea8dc Filipe Manana 2019-09-30 1673 * If we have not locked the extent
range, because the range's
c67d970f0ea8dc Filipe Manana 2019-09-30 1674 * start offset is >= i_size, we
might still have a non-NULL
c67d970f0ea8dc Filipe Manana 2019-09-30 1675 * cached extent state, acquired
while marking the extent range
c67d970f0ea8dc Filipe Manana 2019-09-30 1676 * as delalloc through
btrfs_dirty_pages(). Therefore free any
c67d970f0ea8dc Filipe Manana 2019-09-30 1677 * possible cached extent state to
avoid a memory leak.
c67d970f0ea8dc Filipe Manana 2019-09-30 1678 */
79f015f216539d Goldwyn Rodrigues 2017-10-16 1679 if (extents_locked)
376cc685cb3b43 Miao Xie 2013-12-10 1680
unlock_extent_cached(&BTRFS_I(inode)->io_tree,
e43bbe5e16d87b David Sterba 2017-12-12 1681 lockstart, lockend,
&cached_state);
c67d970f0ea8dc Filipe Manana 2019-09-30 1682 else
c67d970f0ea8dc Filipe Manana 2019-09-30 1683 free_extent_state(cached_state);
c67d970f0ea8dc Filipe Manana 2019-09-30 1684
8702ba9396bf7b Qu Wenruo 2019-10-14 1685
btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);
f1de968376340c Miao Xie 2014-01-09 1686 if (ret) {
89f414f96d87ea Qu Wenruo 2020-08-19 1687 btrfs_drop_pages(&page, 1);
d0215f3e5ebb58 Josef Bacik 2011-01-25 1688 break;
f1de968376340c Miao Xie 2014-01-09 1689 }
39279cc3d2704c Chris Mason 2007-06-12 1690
89f414f96d87ea Qu Wenruo 2020-08-19 1691 if (only_release_metadata) {
38d37aa9c32938 Qu Wenruo 2020-06-24 1692
btrfs_check_nocow_unlock(BTRFS_I(inode));
da17066c40472c Jeff Mahoney 2016-06-15 1693 lockstart = round_down(pos,
0b246afa62b0cf Jeff Mahoney 2016-06-22 1694 fs_info->sectorsize);
89f414f96d87ea Qu Wenruo 2020-08-19 1695 lockend = lockstart + PAGE_SIZE -
1;
7ee9e4405f264e Josef Bacik 2013-06-21 1696
7ee9e4405f264e Josef Bacik 2013-06-21 1697
set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
7ee9e4405f264e Josef Bacik 2013-06-21 1698 lockend, EXTENT_NORESERVE,
NULL,
7ee9e4405f264e Josef Bacik 2013-06-21 1699 NULL, GFP_NOFS);
7ee9e4405f264e Josef Bacik 2013-06-21 1700 }
7ee9e4405f264e Josef Bacik 2013-06-21 1701
89f414f96d87ea Qu Wenruo 2020-08-19 1702 btrfs_drop_pages(&page, 1);
f1de968376340c Miao Xie 2014-01-09 1703
d0215f3e5ebb58 Josef Bacik 2011-01-25 1704 cond_resched();
d0215f3e5ebb58 Josef Bacik 2011-01-25 1705
d0e1d66b5aa1ec Namjae Jeon 2012-12-11 1706
balance_dirty_pages_ratelimited(inode->i_mapping);
cb843a6f513a1a Chris Mason 2008-10-03 1707
914ee295af418e Xin Zhong 2010-12-09 1708 pos += copied;
914ee295af418e Xin Zhong 2010-12-09 1709 num_written += copied;
d0215f3e5ebb58 Josef Bacik 2011-01-25 1710 }
39279cc3d2704c Chris Mason 2007-06-12 1711
364ecf3651e086 Qu Wenruo 2017-02-27 1712
extent_changeset_free(data_reserved);
d0215f3e5ebb58 Josef Bacik 2011-01-25 1713 return num_written ? num_written :
ret;
39279cc3d2704c Chris Mason 2007-06-12 1714 }
d0215f3e5ebb58 Josef Bacik 2011-01-25 1715
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org