[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 <[email protected]>
| Newsgroups | dev.linux.lists.oe-kbuild |
|---|---|
| Message-ID | <[email protected]> |
BCC: [email protected] CC: [email protected] TO: Christoph Hellwig <[email protected]> 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/[email protected]/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 <[email protected]> | Reported-by: Dan Carpenter <[email protected]> | Closes: https://lore.kernel.org/r/[email protected]/ 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