All of lore.kernel.org
 help / color / mirror / Atom feed
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---

  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.