From: kernel test robot <lkp@intel.com>
To: Caleb Sander Mateos <csander@purestorage.com>,
Jens Axboe <axboe@kernel.dk>, Miklos Szeredi <miklos@szeredi.hu>,
Ming Lei <ming.lei@redhat.com>, Keith Busch <kbusch@kernel.org>,
Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>,
Chris Mason <chris.mason@fusionio.com>,
David Sterba <dsterba@suse.com>
Cc: oe-kbuild-all@lists.linux.dev, io-uring@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org,
linux-nvme@lists.infradead.org, linux-btrfs@vger.kernel.org,
linux-kernel@vger.kernel.org,
Caleb Sander Mateos <csander@purestorage.com>
Subject: Re: [PATCH 3/3] io_uring/uring_cmd: avoid double indirect call in task work dispatch
Date: Fri, 24 Oct 2025 03:49:09 +0800 [thread overview]
Message-ID: <202510240319.bLypyxx1-lkp@intel.com> (raw)
In-Reply-To: <20251022231326.2527838-4-csander@purestorage.com>
Hi Caleb,
kernel test robot noticed the following build errors:
[auto build test ERROR on axboe-block/for-next]
[also build test ERROR on kdave/for-next linus/master v6.18-rc2]
[cannot apply to mszeredi-fuse/for-next linux-nvme/for-next next-20251023]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Caleb-Sander-Mateos/io_uring-expose-io_should_terminate_tw/20251023-071617
base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
patch link: https://lore.kernel.org/r/20251022231326.2527838-4-csander%40purestorage.com
patch subject: [PATCH 3/3] io_uring/uring_cmd: avoid double indirect call in task work dispatch
config: arm-randconfig-002-20251024 (https://download.01.org/0day-ci/archive/20251024/202510240319.bLypyxx1-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251024/202510240319.bLypyxx1-lkp@intel.com/reproduce)
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>
| Closes: https://lore.kernel.org/oe-kbuild-all/202510240319.bLypyxx1-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
>> block/ioctl.c:781:8: error: return type defaults to 'int' [-Wimplicit-int]
781 | static DEFINE_IO_URING_CMD_TASK_WORK(blk_cmd_complete)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> block/ioctl.c:781:8: error: function declaration isn't a prototype [-Werror=strict-prototypes]
block/ioctl.c: In function 'DEFINE_IO_URING_CMD_TASK_WORK':
>> block/ioctl.c:784:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
784 | {
| ^
block/ioctl.c:798:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
798 | {
| ^
block/ioctl.c:853:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
853 | {
| ^
>> block/ioctl.c:781:8: error: type of 'blk_cmd_complete' defaults to 'int' [-Wimplicit-int]
781 | static DEFINE_IO_URING_CMD_TASK_WORK(blk_cmd_complete)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> block/ioctl.c:876: error: expected '{' at end of input
block/ioctl.c: At top level:
>> block/ioctl.c:781:8: warning: 'DEFINE_IO_URING_CMD_TASK_WORK' defined but not used [-Wunused-function]
781 | static DEFINE_IO_URING_CMD_TASK_WORK(blk_cmd_complete)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> block/ioctl.c:772:13: warning: 'blk_cmd_complete' defined but not used [-Wunused-function]
772 | static void blk_cmd_complete(struct io_uring_cmd *cmd, unsigned int issue_flags)
| ^~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
--
>> drivers/nvme/host/ioctl.c:410:8: error: return type defaults to 'int' [-Wimplicit-int]
410 | static DEFINE_IO_URING_CMD_TASK_WORK(nvme_uring_task_cb)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:410:8: error: function declaration isn't a prototype [-Werror=strict-prototypes]
drivers/nvme/host/ioctl.c: In function 'DEFINE_IO_URING_CMD_TASK_WORK':
>> drivers/nvme/host/ioctl.c:414:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
414 | {
| ^
drivers/nvme/host/ioctl.c:441:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
441 | {
| ^
drivers/nvme/host/ioctl.c:534:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
534 | {
| ^
drivers/nvme/host/ioctl.c:544:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
544 | {
| ^
drivers/nvme/host/ioctl.c:575:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
575 | {
| ^
drivers/nvme/host/ioctl.c:605:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
605 | {
| ^
drivers/nvme/host/ioctl.c:620:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
620 | {
| ^
drivers/nvme/host/ioctl.c:632:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
632 | {
| ^
drivers/nvme/host/ioctl.c:643:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
643 | {
| ^
drivers/nvme/host/ioctl.c:666:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
666 | {
| ^
drivers/nvme/host/ioctl.c:676:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
676 | {
| ^
drivers/nvme/host/ioctl.c:777:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
777 | {
| ^
drivers/nvme/host/ioctl.c:805:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
805 | {
| ^
drivers/nvme/host/ioctl.c:842:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
842 | {
| ^
>> drivers/nvme/host/ioctl.c:410:8: error: type of 'nvme_uring_task_cb' defaults to 'int' [-Wimplicit-int]
410 | static DEFINE_IO_URING_CMD_TASK_WORK(nvme_uring_task_cb)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:872: error: expected '{' at end of input
drivers/nvme/host/ioctl.c: At top level:
>> drivers/nvme/host/ioctl.c:410:8: warning: 'DEFINE_IO_URING_CMD_TASK_WORK' defined but not used [-Wunused-function]
410 | static DEFINE_IO_URING_CMD_TASK_WORK(nvme_uring_task_cb)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:401:13: warning: 'nvme_uring_task_cb' defined but not used [-Wunused-function]
401 | static void nvme_uring_task_cb(struct io_uring_cmd *ioucmd,
| ^~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:329:12: warning: 'nvme_user_cmd64' defined but not used [-Wunused-function]
329 | static int nvme_user_cmd64(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
| ^~~~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:281:12: warning: 'nvme_user_cmd' defined but not used [-Wunused-function]
281 | static int nvme_user_cmd(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
| ^~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:206:12: warning: 'nvme_submit_io' defined but not used [-Wunused-function]
206 | static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
| ^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/int +781 block/ioctl.c
771
> 772 static void blk_cmd_complete(struct io_uring_cmd *cmd, unsigned int issue_flags)
773 {
774 struct blk_iou_cmd *bic = io_uring_cmd_to_pdu(cmd, struct blk_iou_cmd);
775
776 if (bic->res == -EAGAIN && bic->nowait)
777 io_uring_cmd_issue_blocking(cmd);
778 else
779 io_uring_cmd_done(cmd, bic->res, issue_flags);
780 }
> 781 static DEFINE_IO_URING_CMD_TASK_WORK(blk_cmd_complete)
782
783 static void bio_cmd_bio_end_io(struct bio *bio)
> 784 {
785 struct io_uring_cmd *cmd = bio->bi_private;
786 struct blk_iou_cmd *bic = io_uring_cmd_to_pdu(cmd, struct blk_iou_cmd);
787
788 if (unlikely(bio->bi_status) && !bic->res)
789 bic->res = blk_status_to_errno(bio->bi_status);
790
791 io_uring_cmd_do_in_task_lazy(cmd, blk_cmd_complete);
792 bio_put(bio);
793 }
794
795 static int blkdev_cmd_discard(struct io_uring_cmd *cmd,
796 struct block_device *bdev,
797 uint64_t start, uint64_t len, bool nowait)
> 798 {
799 struct blk_iou_cmd *bic = io_uring_cmd_to_pdu(cmd, struct blk_iou_cmd);
800 gfp_t gfp = nowait ? GFP_NOWAIT : GFP_KERNEL;
801 sector_t sector = start >> SECTOR_SHIFT;
802 sector_t nr_sects = len >> SECTOR_SHIFT;
803 struct bio *prev = NULL, *bio;
804 int err;
805
806 if (!bdev_max_discard_sectors(bdev))
807 return -EOPNOTSUPP;
808 if (!(file_to_blk_mode(cmd->file) & BLK_OPEN_WRITE))
809 return -EBADF;
810 if (bdev_read_only(bdev))
811 return -EPERM;
812 err = blk_validate_byte_range(bdev, start, len);
813 if (err)
814 return err;
815
816 err = filemap_invalidate_pages(bdev->bd_mapping, start,
817 start + len - 1, nowait);
818 if (err)
819 return err;
820
821 while (true) {
822 bio = blk_alloc_discard_bio(bdev, §or, &nr_sects, gfp);
823 if (!bio)
824 break;
825 if (nowait) {
826 /*
827 * Don't allow multi-bio non-blocking submissions as
828 * subsequent bios may fail but we won't get a direct
829 * indication of that. Normally, the caller should
830 * retry from a blocking context.
831 */
832 if (unlikely(nr_sects)) {
833 bio_put(bio);
834 return -EAGAIN;
835 }
836 bio->bi_opf |= REQ_NOWAIT;
837 }
838
839 prev = bio_chain_and_submit(prev, bio);
840 }
841 if (unlikely(!prev))
842 return -EAGAIN;
843 if (unlikely(nr_sects))
844 bic->res = -EAGAIN;
845
846 prev->bi_private = cmd;
847 prev->bi_end_io = bio_cmd_bio_end_io;
848 submit_bio(prev);
849 return -EIOCBQUEUED;
850 }
851
852 int blkdev_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags)
> 853 {
854 struct block_device *bdev = I_BDEV(cmd->file->f_mapping->host);
855 struct blk_iou_cmd *bic = io_uring_cmd_to_pdu(cmd, struct blk_iou_cmd);
856 const struct io_uring_sqe *sqe = cmd->sqe;
857 u32 cmd_op = cmd->cmd_op;
858 uint64_t start, len;
859
860 if (unlikely(sqe->ioprio || sqe->__pad1 || sqe->len ||
861 sqe->rw_flags || sqe->file_index))
862 return -EINVAL;
863
864 bic->res = 0;
865 bic->nowait = issue_flags & IO_URING_F_NONBLOCK;
866
867 start = READ_ONCE(sqe->addr);
868 len = READ_ONCE(sqe->addr3);
869
870 switch (cmd_op) {
871 case BLOCK_URING_CMD_DISCARD:
872 return blkdev_cmd_discard(cmd, bdev, start, len, bic->nowait);
873 }
874 return -EINVAL;
875 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
prev parent reply other threads:[~2025-10-23 19:50 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-22 23:13 [PATCH 0/3] io_uring/uring_cmd: avoid double indirect call in task work dispatch Caleb Sander Mateos
2025-10-22 23:13 ` [PATCH 1/3] io_uring: expose io_should_terminate_tw() Caleb Sander Mateos
2025-10-22 23:13 ` [PATCH 2/3] io_uring/uring_cmd: call io_should_terminate_tw() when needed Caleb Sander Mateos
2025-10-22 23:13 ` [PATCH 3/3] io_uring/uring_cmd: avoid double indirect call in task work dispatch Caleb Sander Mateos
2025-10-23 12:05 ` kernel test robot
2025-10-23 13:40 ` Christoph Hellwig
2025-10-23 19:12 ` Caleb Sander Mateos
2025-10-23 19:49 ` kernel test robot [this message]
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=202510240319.bLypyxx1-lkp@intel.com \
--to=lkp@intel.com \
--cc=axboe@kernel.dk \
--cc=chris.mason@fusionio.com \
--cc=csander@purestorage.com \
--cc=dsterba@suse.com \
--cc=hch@lst.de \
--cc=io-uring@vger.kernel.org \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=miklos@szeredi.hu \
--cc=ming.lei@redhat.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sagi@grimberg.me \
/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.