All of lore.kernel.org
 help / color / mirror / Atom feed
* [hch-xfs:xfs-crc 9/51] fs/iomap/ioend.c:246 iomap_add_to_ioend() warn: bitwise AND condition is false here
@ 2026-07-18  3:22 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-18  3:22 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Christoph Hellwig <hch@lst.de>

tree:   git://git.infradead.org/users/hch/xfs xfs-crc
head:   ef3d55d014b3a800421b9dae3ac182577bfe2bd7
commit: a77902e5f160c28d37d861f2317c8c05d820f471 [9/51] iomap: add a IOMAP_IOEND_INTEGRITY flag
:::::: branch date: 11 hours ago
:::::: commit date: 13 hours ago
config: nios2-randconfig-r071-20260718 (https://download.01.org/0day-ci/archive/20260718/202607181110.ufaVKPb7-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 10.5.0
smatch: v0.5.0-9185-gbcc58b9c

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@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202607181110.ufaVKPb7-lkp@intel.com/

New smatch warnings:
fs/iomap/ioend.c:246 iomap_add_to_ioend() warn: bitwise AND condition is false here

Old smatch warnings:
fs/iomap/internal.h:15 iomap_max_bio_size() warn: bitwise AND condition is false here

vim +246 fs/iomap/ioend.c

8f02cecd80b993 Christoph Hellwig 2025-07-10  201  
8f02cecd80b993 Christoph Hellwig 2025-07-10  202  /*
8f02cecd80b993 Christoph Hellwig 2025-07-10  203   * Test to see if we have an existing ioend structure that we could append to
8f02cecd80b993 Christoph Hellwig 2025-07-10  204   * first; otherwise finish off the current ioend and start another.
8f02cecd80b993 Christoph Hellwig 2025-07-10  205   *
8f02cecd80b993 Christoph Hellwig 2025-07-10  206   * If a new ioend is created and cached, the old ioend is submitted to the block
8f02cecd80b993 Christoph Hellwig 2025-07-10  207   * layer instantly.  Batching optimisations are provided by higher level block
8f02cecd80b993 Christoph Hellwig 2025-07-10  208   * plugging.
8f02cecd80b993 Christoph Hellwig 2025-07-10  209   *
8f02cecd80b993 Christoph Hellwig 2025-07-10  210   * At the end of a writeback pass, there will be a cached ioend remaining on the
8f02cecd80b993 Christoph Hellwig 2025-07-10  211   * writepage context that the caller will need to submit.
8f02cecd80b993 Christoph Hellwig 2025-07-10  212   */
8f02cecd80b993 Christoph Hellwig 2025-07-10  213  ssize_t iomap_add_to_ioend(struct iomap_writepage_ctx *wpc, struct folio *folio,
8f02cecd80b993 Christoph Hellwig 2025-07-10  214  		loff_t pos, loff_t end_pos, unsigned int dirty_len)
8f02cecd80b993 Christoph Hellwig 2025-07-10  215  {
8f02cecd80b993 Christoph Hellwig 2025-07-10  216  	struct iomap_ioend *ioend = wpc->wb_ctx;
8f02cecd80b993 Christoph Hellwig 2025-07-10  217  	size_t poff = offset_in_folio(folio, pos);
8f02cecd80b993 Christoph Hellwig 2025-07-10  218  	unsigned int ioend_flags = 0;
8f02cecd80b993 Christoph Hellwig 2025-07-10  219  	unsigned int map_len = min_t(u64, dirty_len,
8f02cecd80b993 Christoph Hellwig 2025-07-10  220  		wpc->iomap.offset + wpc->iomap.length - pos);
8f02cecd80b993 Christoph Hellwig 2025-07-10  221  	int error;
8f02cecd80b993 Christoph Hellwig 2025-07-10  222  
8f02cecd80b993 Christoph Hellwig 2025-07-10  223  	trace_iomap_add_to_ioend(wpc->inode, pos, dirty_len, &wpc->iomap);
8f02cecd80b993 Christoph Hellwig 2025-07-10  224  
8f02cecd80b993 Christoph Hellwig 2025-07-10  225  	WARN_ON_ONCE(!folio->private && map_len < dirty_len);
8f02cecd80b993 Christoph Hellwig 2025-07-10  226  
8f02cecd80b993 Christoph Hellwig 2025-07-10  227  	switch (wpc->iomap.type) {
d320f160aa5ff3 Darrick J. Wong   2026-03-02  228  	case IOMAP_UNWRITTEN:
d320f160aa5ff3 Darrick J. Wong   2026-03-02  229  		ioend_flags |= IOMAP_IOEND_UNWRITTEN;
d320f160aa5ff3 Darrick J. Wong   2026-03-02  230  		break;
d320f160aa5ff3 Darrick J. Wong   2026-03-02  231  	case IOMAP_MAPPED:
d320f160aa5ff3 Darrick J. Wong   2026-03-02  232  		break;
8f02cecd80b993 Christoph Hellwig 2025-07-10  233  	case IOMAP_HOLE:
8f02cecd80b993 Christoph Hellwig 2025-07-10  234  		return map_len;
8f02cecd80b993 Christoph Hellwig 2025-07-10  235  	default:
d320f160aa5ff3 Darrick J. Wong   2026-03-02  236  		WARN_ON_ONCE(1);
d320f160aa5ff3 Darrick J. Wong   2026-03-02  237  		return -EIO;
8f02cecd80b993 Christoph Hellwig 2025-07-10  238  	}
8f02cecd80b993 Christoph Hellwig 2025-07-10  239  
8f02cecd80b993 Christoph Hellwig 2025-07-10  240  	if (wpc->iomap.flags & IOMAP_F_SHARED)
8f02cecd80b993 Christoph Hellwig 2025-07-10  241  		ioend_flags |= IOMAP_IOEND_SHARED;
8f02cecd80b993 Christoph Hellwig 2025-07-10  242  	if (folio_test_dropbehind(folio))
8f02cecd80b993 Christoph Hellwig 2025-07-10  243  		ioend_flags |= IOMAP_IOEND_DONTCACHE;
8f02cecd80b993 Christoph Hellwig 2025-07-10  244  	if (pos == wpc->iomap.offset && (wpc->iomap.flags & IOMAP_F_BOUNDARY))
8f02cecd80b993 Christoph Hellwig 2025-07-10  245  		ioend_flags |= IOMAP_IOEND_BOUNDARY;
a77902e5f160c2 Christoph Hellwig 2026-07-07 @246  	if (wpc->iomap.flags & IOMAP_F_INTEGRITY)
a77902e5f160c2 Christoph Hellwig 2026-07-07  247  		ioend_flags |= IOMAP_IOEND_INTEGRITY;
8f02cecd80b993 Christoph Hellwig 2025-07-10  248  
0b10a370529cbd Christoph Hellwig 2026-02-23  249  	if (!ioend || !iomap_can_add_to_ioend(wpc, pos, map_len, ioend_flags)) {
8f02cecd80b993 Christoph Hellwig 2025-07-10  250  new_ioend:
8f02cecd80b993 Christoph Hellwig 2025-07-10  251  		if (ioend) {
8f02cecd80b993 Christoph Hellwig 2025-07-10  252  			error = wpc->ops->writeback_submit(wpc, 0);
8f02cecd80b993 Christoph Hellwig 2025-07-10  253  			if (error)
8f02cecd80b993 Christoph Hellwig 2025-07-10  254  				return error;
8f02cecd80b993 Christoph Hellwig 2025-07-10  255  		}
8f02cecd80b993 Christoph Hellwig 2025-07-10  256  		wpc->wb_ctx = ioend = iomap_alloc_ioend(wpc, pos, ioend_flags);
8f02cecd80b993 Christoph Hellwig 2025-07-10  257  	}
8f02cecd80b993 Christoph Hellwig 2025-07-10  258  
8f02cecd80b993 Christoph Hellwig 2025-07-10  259  	if (!bio_add_folio(&ioend->io_bio, folio, map_len, poff))
8f02cecd80b993 Christoph Hellwig 2025-07-10  260  		goto new_ioend;
8f02cecd80b993 Christoph Hellwig 2025-07-10  261  
8f02cecd80b993 Christoph Hellwig 2025-07-10  262  	/*
8f02cecd80b993 Christoph Hellwig 2025-07-10  263  	 * Clamp io_offset and io_size to the incore EOF so that ondisk
8f02cecd80b993 Christoph Hellwig 2025-07-10  264  	 * file size updates in the ioend completion are byte-accurate.
8f02cecd80b993 Christoph Hellwig 2025-07-10  265  	 * This avoids recovering files with zeroed tail regions when
8f02cecd80b993 Christoph Hellwig 2025-07-10  266  	 * writeback races with appending writes:
8f02cecd80b993 Christoph Hellwig 2025-07-10  267  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  268  	 *    Thread 1:                  Thread 2:
8f02cecd80b993 Christoph Hellwig 2025-07-10  269  	 *    ------------               -----------
8f02cecd80b993 Christoph Hellwig 2025-07-10  270  	 *    write [A, A+B]
8f02cecd80b993 Christoph Hellwig 2025-07-10  271  	 *    update inode size to A+B
8f02cecd80b993 Christoph Hellwig 2025-07-10  272  	 *    submit I/O [A, A+BS]
8f02cecd80b993 Christoph Hellwig 2025-07-10  273  	 *                               write [A+B, A+B+C]
8f02cecd80b993 Christoph Hellwig 2025-07-10  274  	 *                               update inode size to A+B+C
8f02cecd80b993 Christoph Hellwig 2025-07-10  275  	 *    <I/O completes, updates disk size to min(A+B+C, A+BS)>
8f02cecd80b993 Christoph Hellwig 2025-07-10  276  	 *    <power failure>
8f02cecd80b993 Christoph Hellwig 2025-07-10  277  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  278  	 *  After reboot:
8f02cecd80b993 Christoph Hellwig 2025-07-10  279  	 *    1) with A+B+C < A+BS, the file has zero padding in range
8f02cecd80b993 Christoph Hellwig 2025-07-10  280  	 *       [A+B, A+B+C]
8f02cecd80b993 Christoph Hellwig 2025-07-10  281  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  282  	 *    |<     Block Size (BS)   >|
8f02cecd80b993 Christoph Hellwig 2025-07-10  283  	 *    |DDDDDDDDDDDD0000000000000|
8f02cecd80b993 Christoph Hellwig 2025-07-10  284  	 *    ^           ^        ^
8f02cecd80b993 Christoph Hellwig 2025-07-10  285  	 *    A          A+B     A+B+C
8f02cecd80b993 Christoph Hellwig 2025-07-10  286  	 *                       (EOF)
8f02cecd80b993 Christoph Hellwig 2025-07-10  287  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  288  	 *    2) with A+B+C > A+BS, the file has zero padding in range
8f02cecd80b993 Christoph Hellwig 2025-07-10  289  	 *       [A+B, A+BS]
8f02cecd80b993 Christoph Hellwig 2025-07-10  290  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  291  	 *    |<     Block Size (BS)   >|<     Block Size (BS)    >|
8f02cecd80b993 Christoph Hellwig 2025-07-10  292  	 *    |DDDDDDDDDDDD0000000000000|00000000000000000000000000|
8f02cecd80b993 Christoph Hellwig 2025-07-10  293  	 *    ^           ^             ^           ^
8f02cecd80b993 Christoph Hellwig 2025-07-10  294  	 *    A          A+B           A+BS       A+B+C
8f02cecd80b993 Christoph Hellwig 2025-07-10  295  	 *                             (EOF)
8f02cecd80b993 Christoph Hellwig 2025-07-10  296  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  297  	 *    D = Valid Data
8f02cecd80b993 Christoph Hellwig 2025-07-10  298  	 *    0 = Zero Padding
8f02cecd80b993 Christoph Hellwig 2025-07-10  299  	 *
8f02cecd80b993 Christoph Hellwig 2025-07-10  300  	 * Note that this defeats the ability to chain the ioends of
8f02cecd80b993 Christoph Hellwig 2025-07-10  301  	 * appending writes.
8f02cecd80b993 Christoph Hellwig 2025-07-10  302  	 */
8f02cecd80b993 Christoph Hellwig 2025-07-10  303  	ioend->io_size += map_len;
55ec50d046c03b Morduan Zang      2026-06-24  304  	if (ioend->io_offset + ioend->io_size > end_pos) {
55ec50d046c03b Morduan Zang      2026-06-24  305  		if (ioend->io_offset >= end_pos)
55ec50d046c03b Morduan Zang      2026-06-24  306  			ioend->io_size = 0;
55ec50d046c03b Morduan Zang      2026-06-24  307  		else
8f02cecd80b993 Christoph Hellwig 2025-07-10  308  			ioend->io_size = end_pos - ioend->io_offset;
55ec50d046c03b Morduan Zang      2026-06-24  309  	}
8f02cecd80b993 Christoph Hellwig 2025-07-10  310  
8f02cecd80b993 Christoph Hellwig 2025-07-10  311  	wbc_account_cgroup_owner(wpc->wbc, folio, map_len);
8f02cecd80b993 Christoph Hellwig 2025-07-10  312  	return map_len;
8f02cecd80b993 Christoph Hellwig 2025-07-10  313  }
8f02cecd80b993 Christoph Hellwig 2025-07-10  314  EXPORT_SYMBOL_GPL(iomap_add_to_ioend);
8f02cecd80b993 Christoph Hellwig 2025-07-10  315  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-07-18  3:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-18  3:22 [hch-xfs:xfs-crc 9/51] fs/iomap/ioend.c:246 iomap_add_to_ioend() warn: bitwise AND condition is false here kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.