[linux-next:master 11181/11507] fs/iomap/direct-io.c:996 __iomap_dio_read_simple() warn: bitwise AND condition is false here

kernel test robot <[email protected]> Mon, 03 Aug 2026 07:43:42 +0800
Newsgroups dev.linux.lists.oe-kbuild
Message-ID <[email protected]>
BCC: [email protected]
CC: [email protected]
TO: Christoph Hellwig <[email protected]>
CC: Christian Brauner <[email protected]>
CC: "Darrick J. Wong" <[email protected]>
CC: Fengnan Chang <[email protected]>
CC: Joanne Koong <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   415606a7be939835db9b0d6b711887586646346d
commit: 335d4b6201ac317d906e6a694f07de0792325fee [11181/11507] iomap: decouple simple direct I/O reads from iomap_dio_rw
:::::: branch date: 2 days ago
:::::: commit date: 3 days ago
config: x86_64-randconfig-161-20260803 (https://download.01.org/0day-ci/archive/20260803/[email protected]/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
smatch: v0.5.0-9187-g5189e3fb

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 <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/

New smatch warnings:
fs/iomap/direct-io.c:996 __iomap_dio_read_simple() warn: bitwise AND condition is false here

Old smatch warnings:
fs/iomap/direct-io.c:376 iomap_dio_bio_iter_one() warn: bitwise AND condition is false here
fs/iomap/internal.h:15 iomap_max_bio_size() warn: bitwise AND condition is false here

vim +996 fs/iomap/direct-io.c

36f199c8d0ee4b Fengnan Chang     2026-07-01   985  
335d4b6201ac31 Christoph Hellwig 2026-07-29   986  ssize_t __iomap_dio_read_simple(struct kiocb *iocb, struct iov_iter *iter,
335d4b6201ac31 Christoph Hellwig 2026-07-29   987  		struct iomap_iter *iomi)
36f199c8d0ee4b Fengnan Chang     2026-07-01   988  {
36f199c8d0ee4b Fengnan Chang     2026-07-01   989  	struct iomap_dio_simple *sr;
36f199c8d0ee4b Fengnan Chang     2026-07-01   990  	unsigned int alignment;
36f199c8d0ee4b Fengnan Chang     2026-07-01   991  	struct bio *bio;
36f199c8d0ee4b Fengnan Chang     2026-07-01   992  	ssize_t ret;
36f199c8d0ee4b Fengnan Chang     2026-07-01   993  
335d4b6201ac31 Christoph Hellwig 2026-07-29   994  	if (iomi->iomap.type != IOMAP_MAPPED ||
335d4b6201ac31 Christoph Hellwig 2026-07-29   995  	    iomi->iomap.offset + iomi->iomap.length < iomi->pos + iomi->len ||
335d4b6201ac31 Christoph Hellwig 2026-07-29  @996  	    (iomi->iomap.flags & IOMAP_F_INTEGRITY)) {
36f199c8d0ee4b Fengnan Chang     2026-07-01   997  		ret = -ENOTBLK;
335d4b6201ac31 Christoph Hellwig 2026-07-29   998  		goto out_dio_end;
36f199c8d0ee4b Fengnan Chang     2026-07-01   999  	}
36f199c8d0ee4b Fengnan Chang     2026-07-01  1000  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1001  	alignment = iomap_dio_alignment(iomi->inode, iomi->iomap.bdev, 0);
335d4b6201ac31 Christoph Hellwig 2026-07-29  1002  	if ((iomi->pos | iomi->len) & (alignment - 1)) {
36f199c8d0ee4b Fengnan Chang     2026-07-01  1003  		ret = -EINVAL;
335d4b6201ac31 Christoph Hellwig 2026-07-29  1004  		goto out_dio_end;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1005  	}
36f199c8d0ee4b Fengnan Chang     2026-07-01  1006  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1007  	if (unlikely(!iomi->inode->i_sb->s_dio_done_wq &&
335d4b6201ac31 Christoph Hellwig 2026-07-29  1008  			!is_sync_kiocb(iocb))) {
335d4b6201ac31 Christoph Hellwig 2026-07-29  1009  		ret = sb_init_dio_done_wq(iomi->inode->i_sb);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1010  		if (ret < 0)
335d4b6201ac31 Christoph Hellwig 2026-07-29  1011  			goto out_dio_end;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1012  	}
36f199c8d0ee4b Fengnan Chang     2026-07-01  1013  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1014  	trace_iomap_dio_rw_begin(iocb, iter, 0, 0);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1015  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1016  	bio = bio_alloc_bioset(iomi->iomap.bdev,
36f199c8d0ee4b Fengnan Chang     2026-07-01  1017  			       bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS),
36f199c8d0ee4b Fengnan Chang     2026-07-01  1018  			       REQ_OP_READ, GFP_KERNEL, &iomap_dio_simple_pool);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1019  	sr = container_of(bio, struct iomap_dio_simple, bio);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1020  	sr->iocb = iocb;
335d4b6201ac31 Christoph Hellwig 2026-07-29  1021  	sr->dio_flags = 0;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1022  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1023  	bio->bi_iter.bi_sector = iomap_sector(&iomi->iomap, iomi->pos);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1024  	bio->bi_ioprio = iocb->ki_ioprio;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1025  
36f199c8d0ee4b Fengnan Chang     2026-07-01  1026  	ret = bio_iov_iter_get_pages(bio, iter, alignment - 1);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1027  	if (unlikely(ret))
36f199c8d0ee4b Fengnan Chang     2026-07-01  1028  		goto out_bio_put;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1029  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1030  	if (bio->bi_iter.bi_size != iomi->len) {
36f199c8d0ee4b Fengnan Chang     2026-07-01  1031  		iov_iter_revert(iter, bio->bi_iter.bi_size);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1032  		ret = -ENOTBLK;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1033  		goto out_bio_release_pages;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1034  	}
36f199c8d0ee4b Fengnan Chang     2026-07-01  1035  
36f199c8d0ee4b Fengnan Chang     2026-07-01  1036  	sr->size = bio->bi_iter.bi_size;
335d4b6201ac31 Christoph Hellwig 2026-07-29  1037  	if (user_backed_iter(iter)) {
36f199c8d0ee4b Fengnan Chang     2026-07-01  1038  		bio_set_pages_dirty(bio);
335d4b6201ac31 Christoph Hellwig 2026-07-29  1039  		sr->dio_flags |= IOMAP_DIO_USER_BACKED;
335d4b6201ac31 Christoph Hellwig 2026-07-29  1040  	}
36f199c8d0ee4b Fengnan Chang     2026-07-01  1041  
36f199c8d0ee4b Fengnan Chang     2026-07-01  1042  	if (iocb->ki_flags & IOCB_NOWAIT)
36f199c8d0ee4b Fengnan Chang     2026-07-01  1043  		bio->bi_opf |= REQ_NOWAIT;
335d4b6201ac31 Christoph Hellwig 2026-07-29  1044  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1045  	if (is_sync_kiocb(iocb)) {
335d4b6201ac31 Christoph Hellwig 2026-07-29  1046  		submit_bio_wait(bio);
335d4b6201ac31 Christoph Hellwig 2026-07-29  1047  		return iomap_dio_simple_complete(sr);
335d4b6201ac31 Christoph Hellwig 2026-07-29  1048  	}
335d4b6201ac31 Christoph Hellwig 2026-07-29  1049  
335d4b6201ac31 Christoph Hellwig 2026-07-29  1050  	if ((iocb->ki_flags & IOCB_HIPRI)) {
36f199c8d0ee4b Fengnan Chang     2026-07-01  1051  		bio->bi_opf |= REQ_POLLED;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1052  		WRITE_ONCE(iocb->private, bio);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1053  	}
36f199c8d0ee4b Fengnan Chang     2026-07-01  1054  	bio->bi_end_io = iomap_dio_simple_end_io;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1055  	submit_bio(bio);
335d4b6201ac31 Christoph Hellwig 2026-07-29  1056  	trace_iomap_dio_rw_queued(iomi->inode, iocb->ki_pos, iomi->len);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1057  	return -EIOCBQUEUED;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1058  
36f199c8d0ee4b Fengnan Chang     2026-07-01  1059  out_bio_release_pages:
36f199c8d0ee4b Fengnan Chang     2026-07-01  1060  	bio_release_pages(bio, false);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1061  out_bio_put:
36f199c8d0ee4b Fengnan Chang     2026-07-01  1062  	bio_put(bio);
335d4b6201ac31 Christoph Hellwig 2026-07-29  1063  out_dio_end:
335d4b6201ac31 Christoph Hellwig 2026-07-29  1064  	inode_dio_end(iomi->inode);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1065  	return ret;
36f199c8d0ee4b Fengnan Chang     2026-07-01  1066  }
335d4b6201ac31 Christoph Hellwig 2026-07-29  1067  EXPORT_SYMBOL_GPL(__iomap_dio_read_simple);
36f199c8d0ee4b Fengnan Chang     2026-07-01  1068  

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