[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202506140710.bDy6wh4J-lkp@intel.com>
Date: Sat, 14 Jun 2025 07:52:30 +0800
From: kernel test robot <lkp@...el.com>
To: Steven Rostedt <rostedt@...dmis.org>, linux-kernel@...r.kernel.org,
linux-trace-kernel@...r.kernel.org, linux-xfs@...r.kernel.org
Cc: oe-kbuild-all@...ts.linux.dev, Masami Hiramatsu <mhiramat@...nel.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Linux Memory Management List <linux-mm@...ck.org>,
Carlos Maiolino <cem@...nel.org>, Christoph Hellwig <hch@....de>,
"Darrick J. Wong" <djwong@...nel.org>
Subject: Re: [PATCH 01/14] xfs: tracing; Remove unused event
xfs_reflink_cow_found
Hi Steven,
kernel test robot noticed the following build errors:
[auto build test ERROR on xfs-linux/for-next]
[also build test ERROR on linus/master v6.16-rc1 next-20250613]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Steven-Rostedt/xfs-tracing-Remove-unused-event-xfs_reflink_cow_found/20250613-052758
base: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git for-next
patch link: https://lore.kernel.org/r/20250612212634.746367055%40goodmis.org
patch subject: [PATCH 01/14] xfs: tracing; Remove unused event xfs_reflink_cow_found
config: s390-randconfig-r073-20250614 (https://download.01.org/0day-ci/archive/20250614/202506140710.bDy6wh4J-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project f819f46284f2a79790038e1f6649172789734ae8)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250614/202506140710.bDy6wh4J-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506140710.bDy6wh4J-lkp@intel.com/
All errors (new ones prefixed by >>):
>> fs/xfs/xfs_iomap.c:1614:3: error: call to undeclared function 'trace_xfs_reflink_cow_found'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1614 | trace_xfs_reflink_cow_found(ip, &got);
| ^
fs/xfs/xfs_iomap.c:1614:3: note: did you mean 'trace_xfs_reflink_cow_enospc'?
fs/xfs/xfs_trace.h:4245:1: note: 'trace_xfs_reflink_cow_enospc' declared here
4245 | DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc);
| ^
fs/xfs/xfs_trace.h:4073:39: note: expanded from macro 'DEFINE_INODE_IREC_EVENT'
4073 | #define DEFINE_INODE_IREC_EVENT(name) \
| ^
include/linux/tracepoint.h:594:2: note: expanded from macro '\
DEFINE_EVENT'
594 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
| ^
include/linux/tracepoint.h:467:2: note: expanded from macro 'DECLARE_TRACE'
467 | __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \
| ^
include/linux/tracepoint.h:409:2: note: expanded from macro '__DECLARE_TRACE'
409 | __DECLARE_TRACE_COMMON(name, PARAMS(proto), PARAMS(args), PARAMS(data_proto))
| ^
include/linux/tracepoint.h:385:21: note: expanded from macro '__DECLARE_TRACE_COMMON'
385 | static inline void trace_##name(proto) \
| ^
<scratch space>:36:1: note: expanded from here
36 | trace_xfs_reflink_cow_enospc
| ^
fs/xfs/xfs_iomap.c:1792:4: error: call to undeclared function 'trace_xfs_reflink_cow_found'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1792 | trace_xfs_reflink_cow_found(ip, &cmap);
| ^
2 errors generated.
vim +/trace_xfs_reflink_cow_found +1614 fs/xfs/xfs_iomap.c
7c879c8275c0505 Christoph Hellwig 2024-11-17 1514
058dd70c65ab736 Christoph Hellwig 2025-02-13 1515 static int
058dd70c65ab736 Christoph Hellwig 2025-02-13 1516 xfs_zoned_buffered_write_iomap_begin(
058dd70c65ab736 Christoph Hellwig 2025-02-13 1517 struct inode *inode,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1518 loff_t offset,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1519 loff_t count,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1520 unsigned flags,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1521 struct iomap *iomap,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1522 struct iomap *srcmap)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1523 {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1524 struct iomap_iter *iter =
058dd70c65ab736 Christoph Hellwig 2025-02-13 1525 container_of(iomap, struct iomap_iter, iomap);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1526 struct xfs_zone_alloc_ctx *ac = iter->private;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1527 struct xfs_inode *ip = XFS_I(inode);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1528 struct xfs_mount *mp = ip->i_mount;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1529 xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1530 xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, count);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1531 u16 iomap_flags = IOMAP_F_SHARED;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1532 unsigned int lockmode = XFS_ILOCK_EXCL;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1533 xfs_filblks_t count_fsb;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1534 xfs_extlen_t indlen;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1535 struct xfs_bmbt_irec got;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1536 struct xfs_iext_cursor icur;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1537 int error = 0;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1538
058dd70c65ab736 Christoph Hellwig 2025-02-13 1539 ASSERT(!xfs_get_extsz_hint(ip));
058dd70c65ab736 Christoph Hellwig 2025-02-13 1540 ASSERT(!(flags & IOMAP_UNSHARE));
058dd70c65ab736 Christoph Hellwig 2025-02-13 1541 ASSERT(ac);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1542
058dd70c65ab736 Christoph Hellwig 2025-02-13 1543 if (xfs_is_shutdown(mp))
058dd70c65ab736 Christoph Hellwig 2025-02-13 1544 return -EIO;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1545
058dd70c65ab736 Christoph Hellwig 2025-02-13 1546 error = xfs_qm_dqattach(ip);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1547 if (error)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1548 return error;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1549
058dd70c65ab736 Christoph Hellwig 2025-02-13 1550 error = xfs_ilock_for_iomap(ip, flags, &lockmode);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1551 if (error)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1552 return error;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1553
058dd70c65ab736 Christoph Hellwig 2025-02-13 1554 if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(&ip->i_df)) ||
058dd70c65ab736 Christoph Hellwig 2025-02-13 1555 XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1556 xfs_bmap_mark_sick(ip, XFS_DATA_FORK);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1557 error = -EFSCORRUPTED;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1558 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1559 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1560
058dd70c65ab736 Christoph Hellwig 2025-02-13 1561 XFS_STATS_INC(mp, xs_blk_mapw);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1562
058dd70c65ab736 Christoph Hellwig 2025-02-13 1563 error = xfs_iread_extents(NULL, ip, XFS_DATA_FORK);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1564 if (error)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1565 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1566
058dd70c65ab736 Christoph Hellwig 2025-02-13 1567 /*
058dd70c65ab736 Christoph Hellwig 2025-02-13 1568 * For zeroing operations check if there is any data to zero first.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1569 *
058dd70c65ab736 Christoph Hellwig 2025-02-13 1570 * For regular writes we always need to allocate new blocks, but need to
058dd70c65ab736 Christoph Hellwig 2025-02-13 1571 * provide the source mapping when the range is unaligned to support
058dd70c65ab736 Christoph Hellwig 2025-02-13 1572 * read-modify-write of the whole block in the page cache.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1573 *
058dd70c65ab736 Christoph Hellwig 2025-02-13 1574 * In either case we need to limit the reported range to the boundaries
058dd70c65ab736 Christoph Hellwig 2025-02-13 1575 * of the source map in the data fork.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1576 */
058dd70c65ab736 Christoph Hellwig 2025-02-13 1577 if (!IS_ALIGNED(offset, mp->m_sb.sb_blocksize) ||
058dd70c65ab736 Christoph Hellwig 2025-02-13 1578 !IS_ALIGNED(offset + count, mp->m_sb.sb_blocksize) ||
058dd70c65ab736 Christoph Hellwig 2025-02-13 1579 (flags & IOMAP_ZERO)) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1580 struct xfs_bmbt_irec smap;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1581 struct xfs_iext_cursor scur;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1582
058dd70c65ab736 Christoph Hellwig 2025-02-13 1583 if (!xfs_iext_lookup_extent(ip, &ip->i_df, offset_fsb, &scur,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1584 &smap))
058dd70c65ab736 Christoph Hellwig 2025-02-13 1585 smap.br_startoff = end_fsb; /* fake hole until EOF */
058dd70c65ab736 Christoph Hellwig 2025-02-13 1586 if (smap.br_startoff > offset_fsb) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1587 /*
058dd70c65ab736 Christoph Hellwig 2025-02-13 1588 * We never need to allocate blocks for zeroing a hole.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1589 */
058dd70c65ab736 Christoph Hellwig 2025-02-13 1590 if (flags & IOMAP_ZERO) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1591 xfs_hole_to_iomap(ip, iomap, offset_fsb,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1592 smap.br_startoff);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1593 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1594 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1595 end_fsb = min(end_fsb, smap.br_startoff);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1596 } else {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1597 end_fsb = min(end_fsb,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1598 smap.br_startoff + smap.br_blockcount);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1599 xfs_trim_extent(&smap, offset_fsb,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1600 end_fsb - offset_fsb);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1601 error = xfs_bmbt_to_iomap(ip, srcmap, &smap, flags, 0,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1602 xfs_iomap_inode_sequence(ip, 0));
058dd70c65ab736 Christoph Hellwig 2025-02-13 1603 if (error)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1604 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1605 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1606 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1607
058dd70c65ab736 Christoph Hellwig 2025-02-13 1608 if (!ip->i_cowfp)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1609 xfs_ifork_init_cow(ip);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1610
058dd70c65ab736 Christoph Hellwig 2025-02-13 1611 if (!xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, &got))
058dd70c65ab736 Christoph Hellwig 2025-02-13 1612 got.br_startoff = end_fsb;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1613 if (got.br_startoff <= offset_fsb) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 @1614 trace_xfs_reflink_cow_found(ip, &got);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1615 goto done;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1616 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1617
058dd70c65ab736 Christoph Hellwig 2025-02-13 1618 /*
058dd70c65ab736 Christoph Hellwig 2025-02-13 1619 * Cap the maximum length to keep the chunks of work done here somewhat
058dd70c65ab736 Christoph Hellwig 2025-02-13 1620 * symmetric with the work writeback does.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1621 */
058dd70c65ab736 Christoph Hellwig 2025-02-13 1622 end_fsb = min(end_fsb, got.br_startoff);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1623 count_fsb = min3(end_fsb - offset_fsb, XFS_MAX_BMBT_EXTLEN,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1624 XFS_B_TO_FSB(mp, 1024 * PAGE_SIZE));
058dd70c65ab736 Christoph Hellwig 2025-02-13 1625
058dd70c65ab736 Christoph Hellwig 2025-02-13 1626 /*
058dd70c65ab736 Christoph Hellwig 2025-02-13 1627 * The block reservation is supposed to cover all blocks that the
058dd70c65ab736 Christoph Hellwig 2025-02-13 1628 * operation could possible write, but there is a nasty corner case
058dd70c65ab736 Christoph Hellwig 2025-02-13 1629 * where blocks could be stolen from underneath us:
058dd70c65ab736 Christoph Hellwig 2025-02-13 1630 *
058dd70c65ab736 Christoph Hellwig 2025-02-13 1631 * 1) while this thread iterates over a larger buffered write,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1632 * 2) another thread is causing a write fault that calls into
058dd70c65ab736 Christoph Hellwig 2025-02-13 1633 * ->page_mkwrite in range this thread writes to, using up the
058dd70c65ab736 Christoph Hellwig 2025-02-13 1634 * delalloc reservation created by a previous call to this function.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1635 * 3) another thread does direct I/O on the range that the write fault
058dd70c65ab736 Christoph Hellwig 2025-02-13 1636 * happened on, which causes writeback of the dirty data.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1637 * 4) this then set the stale flag, which cuts the current iomap
058dd70c65ab736 Christoph Hellwig 2025-02-13 1638 * iteration short, causing the new call to ->iomap_begin that gets
058dd70c65ab736 Christoph Hellwig 2025-02-13 1639 * us here again, but now without a sufficient reservation.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1640 *
058dd70c65ab736 Christoph Hellwig 2025-02-13 1641 * This is a very unusual I/O pattern, and nothing but generic/095 is
058dd70c65ab736 Christoph Hellwig 2025-02-13 1642 * known to hit it. There's not really much we can do here, so turn this
058dd70c65ab736 Christoph Hellwig 2025-02-13 1643 * into a short write.
058dd70c65ab736 Christoph Hellwig 2025-02-13 1644 */
058dd70c65ab736 Christoph Hellwig 2025-02-13 1645 if (count_fsb > ac->reserved_blocks) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1646 xfs_warn_ratelimited(mp,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1647 "Short write on ino 0x%llx comm %.20s due to three-way race with write fault and direct I/O",
058dd70c65ab736 Christoph Hellwig 2025-02-13 1648 ip->i_ino, current->comm);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1649 count_fsb = ac->reserved_blocks;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1650 if (!count_fsb) {
058dd70c65ab736 Christoph Hellwig 2025-02-13 1651 error = -EIO;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1652 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1653 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1654 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1655
058dd70c65ab736 Christoph Hellwig 2025-02-13 1656 error = xfs_quota_reserve_blkres(ip, count_fsb);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1657 if (error)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1658 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1659
058dd70c65ab736 Christoph Hellwig 2025-02-13 1660 indlen = xfs_bmap_worst_indlen(ip, count_fsb);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1661 error = xfs_dec_fdblocks(mp, indlen, false);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1662 if (error)
058dd70c65ab736 Christoph Hellwig 2025-02-13 1663 goto out_unlock;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1664 ip->i_delayed_blks += count_fsb;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1665 xfs_mod_delalloc(ip, count_fsb, indlen);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1666
058dd70c65ab736 Christoph Hellwig 2025-02-13 1667 got.br_startoff = offset_fsb;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1668 got.br_startblock = nullstartblock(indlen);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1669 got.br_blockcount = count_fsb;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1670 got.br_state = XFS_EXT_NORM;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1671 xfs_bmap_add_extent_hole_delay(ip, XFS_COW_FORK, &icur, &got);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1672 ac->reserved_blocks -= count_fsb;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1673 iomap_flags |= IOMAP_F_NEW;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1674
058dd70c65ab736 Christoph Hellwig 2025-02-13 1675 trace_xfs_iomap_alloc(ip, offset, XFS_FSB_TO_B(mp, count_fsb),
058dd70c65ab736 Christoph Hellwig 2025-02-13 1676 XFS_COW_FORK, &got);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1677 done:
058dd70c65ab736 Christoph Hellwig 2025-02-13 1678 error = xfs_bmbt_to_iomap(ip, iomap, &got, flags, iomap_flags,
058dd70c65ab736 Christoph Hellwig 2025-02-13 1679 xfs_iomap_inode_sequence(ip, IOMAP_F_SHARED));
058dd70c65ab736 Christoph Hellwig 2025-02-13 1680 out_unlock:
058dd70c65ab736 Christoph Hellwig 2025-02-13 1681 xfs_iunlock(ip, lockmode);
058dd70c65ab736 Christoph Hellwig 2025-02-13 1682 return error;
058dd70c65ab736 Christoph Hellwig 2025-02-13 1683 }
058dd70c65ab736 Christoph Hellwig 2025-02-13 1684
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists