From: Christoph Hellwig <hch@lst.de>
To: kernel test robot <lkp@intel.com>
Cc: Christoph Hellwig <hch@lst.de>,
oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Carlos Maiolino <cem@kernel.org>,
"Darrick J. Wong" <djwong@kernel.org>,
linux-riscv@lists.infradead.org
Subject: Re: fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero.
Date: Mon, 17 Feb 2025 10:24:45 +0100 [thread overview]
Message-ID: <20250217092445.GA29568@lst.de> (raw)
In-Reply-To: <202502171326.j4Xd3I0j-lkp@intel.com>
On Mon, Feb 17, 2025 at 01:53:08PM +0800, kernel test robot wrote:
> New smatch warnings:
> fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero.
Looks like this is an issue in the riscv virt_to_page implementation
which also shows up in various other places. Any chance this could get
fixed in the riscv code?
>
> Old smatch warnings:
> fs/xfs/xfs_linux.h:283 kmem_to_page() warn: unsigned '_x' is never less than zero.
> fs/xfs/xfs_buf.c:761 xfs_buf_get_map() error: we previously assumed 'bp' could be null (see line 743)
> arch/riscv/include/asm/atomic.h:218 arch_atomic_fetch_add_unless() warn: inconsistent indenting
>
> vim +/_x +1534 fs/xfs/xfs_buf.c
>
> 1518
> 1519 static void
> 1520 xfs_buf_submit_bio(
> 1521 struct xfs_buf *bp)
> 1522 {
> 1523 unsigned int size = BBTOB(bp->b_length);
> 1524 unsigned int map = 0, p;
> 1525 struct blk_plug plug;
> 1526 struct bio *bio;
> 1527
> 1528 bio = bio_alloc(bp->b_target->bt_bdev, bp->b_page_count,
> 1529 xfs_buf_bio_op(bp), GFP_NOIO);
> 1530 bio->bi_private = bp;
> 1531 bio->bi_end_io = xfs_buf_bio_end_io;
> 1532
> 1533 if (bp->b_flags & _XBF_KMEM) {
> > 1534 __bio_add_page(bio, virt_to_page(bp->b_addr), size,
> 1535 bp->b_offset);
> 1536 } else {
> 1537 for (p = 0; p < bp->b_page_count; p++)
> 1538 __bio_add_page(bio, bp->b_pages[p], PAGE_SIZE, 0);
> 1539 bio->bi_iter.bi_size = size; /* limit to the actual size used */
> 1540
> 1541 if (xfs_buf_is_vmapped(bp))
> 1542 flush_kernel_vmap_range(bp->b_addr,
> 1543 xfs_buf_vmap_len(bp));
> 1544 }
> 1545
> 1546 /*
> 1547 * If there is more than one map segment, split out a new bio for each
> 1548 * map except of the last one. The last map is handled by the
> 1549 * remainder of the original bio outside the loop.
> 1550 */
> 1551 blk_start_plug(&plug);
> 1552 for (map = 0; map < bp->b_map_count - 1; map++) {
> 1553 struct bio *split;
> 1554
> 1555 split = bio_split(bio, bp->b_maps[map].bm_len, GFP_NOFS,
> 1556 &fs_bio_set);
> 1557 split->bi_iter.bi_sector = bp->b_maps[map].bm_bn;
> 1558 bio_chain(split, bio);
> 1559 submit_bio(split);
> 1560 }
> 1561 bio->bi_iter.bi_sector = bp->b_maps[map].bm_bn;
> 1562 submit_bio(bio);
> 1563 blk_finish_plug(&plug);
> 1564 }
> 1565
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
---end quoted text---
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: kernel test robot <lkp@intel.com>
Cc: Christoph Hellwig <hch@lst.de>,
oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Carlos Maiolino <cem@kernel.org>,
"Darrick J. Wong" <djwong@kernel.org>,
linux-riscv@lists.infradead.org
Subject: Re: fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero.
Date: Mon, 17 Feb 2025 10:24:45 +0100 [thread overview]
Message-ID: <20250217092445.GA29568@lst.de> (raw)
In-Reply-To: <202502171326.j4Xd3I0j-lkp@intel.com>
On Mon, Feb 17, 2025 at 01:53:08PM +0800, kernel test robot wrote:
> New smatch warnings:
> fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero.
Looks like this is an issue in the riscv virt_to_page implementation
which also shows up in various other places. Any chance this could get
fixed in the riscv code?
>
> Old smatch warnings:
> fs/xfs/xfs_linux.h:283 kmem_to_page() warn: unsigned '_x' is never less than zero.
> fs/xfs/xfs_buf.c:761 xfs_buf_get_map() error: we previously assumed 'bp' could be null (see line 743)
> arch/riscv/include/asm/atomic.h:218 arch_atomic_fetch_add_unless() warn: inconsistent indenting
>
> vim +/_x +1534 fs/xfs/xfs_buf.c
>
> 1518
> 1519 static void
> 1520 xfs_buf_submit_bio(
> 1521 struct xfs_buf *bp)
> 1522 {
> 1523 unsigned int size = BBTOB(bp->b_length);
> 1524 unsigned int map = 0, p;
> 1525 struct blk_plug plug;
> 1526 struct bio *bio;
> 1527
> 1528 bio = bio_alloc(bp->b_target->bt_bdev, bp->b_page_count,
> 1529 xfs_buf_bio_op(bp), GFP_NOIO);
> 1530 bio->bi_private = bp;
> 1531 bio->bi_end_io = xfs_buf_bio_end_io;
> 1532
> 1533 if (bp->b_flags & _XBF_KMEM) {
> > 1534 __bio_add_page(bio, virt_to_page(bp->b_addr), size,
> 1535 bp->b_offset);
> 1536 } else {
> 1537 for (p = 0; p < bp->b_page_count; p++)
> 1538 __bio_add_page(bio, bp->b_pages[p], PAGE_SIZE, 0);
> 1539 bio->bi_iter.bi_size = size; /* limit to the actual size used */
> 1540
> 1541 if (xfs_buf_is_vmapped(bp))
> 1542 flush_kernel_vmap_range(bp->b_addr,
> 1543 xfs_buf_vmap_len(bp));
> 1544 }
> 1545
> 1546 /*
> 1547 * If there is more than one map segment, split out a new bio for each
> 1548 * map except of the last one. The last map is handled by the
> 1549 * remainder of the original bio outside the loop.
> 1550 */
> 1551 blk_start_plug(&plug);
> 1552 for (map = 0; map < bp->b_map_count - 1; map++) {
> 1553 struct bio *split;
> 1554
> 1555 split = bio_split(bio, bp->b_maps[map].bm_len, GFP_NOFS,
> 1556 &fs_bio_set);
> 1557 split->bi_iter.bi_sector = bp->b_maps[map].bm_bn;
> 1558 bio_chain(split, bio);
> 1559 submit_bio(split);
> 1560 }
> 1561 bio->bi_iter.bi_sector = bp->b_maps[map].bm_bn;
> 1562 submit_bio(bio);
> 1563 blk_finish_plug(&plug);
> 1564 }
> 1565
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
---end quoted text---
next prev parent reply other threads:[~2025-02-17 9:41 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-17 5:53 fs/xfs/xfs_buf.c:1534 xfs_buf_submit_bio() warn: unsigned '_x' is never less than zero kernel test robot
2025-02-17 9:24 ` Christoph Hellwig [this message]
2025-02-17 9:24 ` Christoph Hellwig
2025-02-17 12:06 ` Alexandre Ghiti
2025-02-17 12:06 ` Alexandre Ghiti
2025-02-17 13:12 ` David Laight
2025-02-17 13:12 ` David Laight
2025-02-18 0:39 ` Philip Li
2025-02-18 0:39 ` Philip Li
2025-02-18 14:21 ` Dan Carpenter
2025-02-18 14:21 ` Dan Carpenter
2025-02-18 14:46 ` Alexandre Ghiti
2025-02-18 14:46 ` Alexandre Ghiti
2025-02-18 19:53 ` David Laight
2025-02-18 19:53 ` David Laight
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250217092445.GA29568@lst.de \
--to=hch@lst.de \
--cc=cem@kernel.org \
--cc=djwong@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.