From: kernel test robot <[email protected]>
To: Kanchan Joshi <[email protected]>, [email protected], [email protected]
Cc: [email protected], [email protected],
[email protected], [email protected],
[email protected], [email protected],
[email protected], [email protected],
Kanchan Joshi <[email protected]>,
Anuj Gupta <[email protected]>
Subject: Re: [PATCH 4/4] nvme: wire up async polling for io passthrough commands
Date: Sat, 6 Aug 2022 09:38:19 +0800 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
Hi Kanchan,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on axboe-block/for-next]
[also build test ERROR on linus/master]
[cannot apply to hch-configfs/for-next v5.19]
[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/Kanchan-Joshi/fs-add-file_operations-uring_cmd_iopoll/20220806-004320
base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
config: hexagon-randconfig-r015-20220805 (https://download.01.org/0day-ci/archive/20220806/[email protected]/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 5f1c7e2cc5a3c07cbc2412e851a7283c1841f520)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/0964795577fbf09d8b315269504b5e87b5ac492b
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Kanchan-Joshi/fs-add-file_operations-uring_cmd_iopoll/20220806-004320
git checkout 0964795577fbf09d8b315269504b5e87b5ac492b
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/nvme/host/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
All error/warnings (new ones prefixed by >>):
>> drivers/nvme/host/ioctl.c:638:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/hexagon/include/asm/bitops.h:175:28: note: expanded from macro 'test_bit'
#define test_bit(nr, addr) __test_bit(nr, addr)
^
drivers/nvme/host/ioctl.c:641:9: note: uninitialized use occurs here
return ret;
^~~
drivers/nvme/host/ioctl.c:638:2: note: remove the 'if' if its condition is always true
if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/ioctl.c:638:6: warning: variable 'ret' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/hexagon/include/asm/bitops.h:175:28: note: expanded from macro 'test_bit'
#define test_bit(nr, addr) __test_bit(nr, addr)
^
drivers/nvme/host/ioctl.c:641:9: note: uninitialized use occurs here
return ret;
^~~
drivers/nvme/host/ioctl.c:638:6: note: remove the '&&' if its condition is always true
if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/hexagon/include/asm/bitops.h:175:28: note: expanded from macro 'test_bit'
#define test_bit(nr, addr) __test_bit(nr, addr)
^
>> drivers/nvme/host/ioctl.c:638:6: warning: variable 'ret' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/hexagon/include/asm/bitops.h:175:28: note: expanded from macro 'test_bit'
#define test_bit(nr, addr) __test_bit(nr, addr)
^~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/ioctl.c:641:9: note: uninitialized use occurs here
return ret;
^~~
drivers/nvme/host/ioctl.c:638:6: note: remove the '&&' if its condition is always true
if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/hexagon/include/asm/bitops.h:175:28: note: expanded from macro 'test_bit'
#define test_bit(nr, addr) __test_bit(nr, addr)
^
drivers/nvme/host/ioctl.c:629:9: note: initialize the variable 'ret' to silence this warning
int ret;
^
= 0
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:49:33: note: expanded from macro 'READ_ONCE'
compiletime_assert_rwonce_type(x); \
^
include/asm-generic/rwonce.h:36:35: note: expanded from macro 'compiletime_assert_rwonce_type'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^
include/linux/compiler_types.h:321:10: note: expanded from macro '__native_word'
(sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
^
include/linux/compiler_types.h:354:22: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~
include/linux/compiler_types.h:342:23: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~
include/linux/compiler_types.h:334:9: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:49:33: note: expanded from macro 'READ_ONCE'
compiletime_assert_rwonce_type(x); \
^
include/asm-generic/rwonce.h:36:35: note: expanded from macro 'compiletime_assert_rwonce_type'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^
include/linux/compiler_types.h:321:39: note: expanded from macro '__native_word'
(sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
^
include/linux/compiler_types.h:354:22: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~
include/linux/compiler_types.h:342:23: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~
include/linux/compiler_types.h:334:9: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:49:33: note: expanded from macro 'READ_ONCE'
compiletime_assert_rwonce_type(x); \
^
include/asm-generic/rwonce.h:36:35: note: expanded from macro 'compiletime_assert_rwonce_type'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^
include/linux/compiler_types.h:322:10: note: expanded from macro '__native_word'
sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
^
include/linux/compiler_types.h:354:22: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~
include/linux/compiler_types.h:342:23: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~
include/linux/compiler_types.h:334:9: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:49:33: note: expanded from macro 'READ_ONCE'
compiletime_assert_rwonce_type(x); \
^
include/asm-generic/rwonce.h:36:35: note: expanded from macro 'compiletime_assert_rwonce_type'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^
include/linux/compiler_types.h:322:38: note: expanded from macro '__native_word'
sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
^
include/linux/compiler_types.h:354:22: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~
include/linux/compiler_types.h:342:23: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~
include/linux/compiler_types.h:334:9: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:49:33: note: expanded from macro 'READ_ONCE'
compiletime_assert_rwonce_type(x); \
^
include/asm-generic/rwonce.h:36:48: note: expanded from macro 'compiletime_assert_rwonce_type'
compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
^
include/linux/compiler_types.h:354:22: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^~~~~~~~~
include/linux/compiler_types.h:342:23: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^~~~~~~~~
include/linux/compiler_types.h:334:9: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:50:14: note: expanded from macro 'READ_ONCE'
__READ_ONCE(x); \
^
include/asm-generic/rwonce.h:44:65: note: expanded from macro '__READ_ONCE'
#define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
^
include/linux/compiler_types.h:310:13: note: expanded from macro '__unqual_scalar_typeof'
_Generic((x), \
^
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:50:14: note: expanded from macro 'READ_ONCE'
__READ_ONCE(x); \
^
include/asm-generic/rwonce.h:44:65: note: expanded from macro '__READ_ONCE'
#define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
^
include/linux/compiler_types.h:317:15: note: expanded from macro '__unqual_scalar_typeof'
default: (x)))
^
>> drivers/nvme/host/ioctl.c:737:27: error: no member named 'private' in 'struct io_uring_cmd'
bio = READ_ONCE(ioucmd->private);
~~~~~~ ^
include/asm-generic/rwonce.h:50:14: note: expanded from macro 'READ_ONCE'
__READ_ONCE(x); \
^
include/asm-generic/rwonce.h:44:72: note: expanded from macro '__READ_ONCE'
#define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
^
>> drivers/nvme/host/ioctl.c:737:7: error: assigning to 'struct bio *' from incompatible type 'void'
bio = READ_ONCE(ioucmd->private);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
3 warnings and 9 errors generated.
vim +737 drivers/nvme/host/ioctl.c
625
626 int nvme_ns_chr_uring_cmd_iopoll(struct io_uring_cmd *ioucmd)
627 {
628 struct bio *bio;
629 int ret;
630 struct nvme_ns *ns;
631 struct request_queue *q;
632
633 rcu_read_lock();
634 bio = READ_ONCE(ioucmd->cookie);
635 ns = container_of(file_inode(ioucmd->file)->i_cdev,
636 struct nvme_ns, cdev);
637 q = ns->queue;
> 638 if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio && bio->bi_bdev)
639 ret = bio_poll(bio, 0, 0);
640 rcu_read_unlock();
641 return ret;
642 }
643 #ifdef CONFIG_NVME_MULTIPATH
644 static int nvme_ns_head_ctrl_ioctl(struct nvme_ns *ns, unsigned int cmd,
645 void __user *argp, struct nvme_ns_head *head, int srcu_idx)
646 __releases(&head->srcu)
647 {
648 struct nvme_ctrl *ctrl = ns->ctrl;
649 int ret;
650
651 nvme_get_ctrl(ns->ctrl);
652 srcu_read_unlock(&head->srcu, srcu_idx);
653 ret = nvme_ctrl_ioctl(ns->ctrl, cmd, argp);
654
655 nvme_put_ctrl(ctrl);
656 return ret;
657 }
658
659 int nvme_ns_head_ioctl(struct block_device *bdev, fmode_t mode,
660 unsigned int cmd, unsigned long arg)
661 {
662 struct nvme_ns_head *head = bdev->bd_disk->private_data;
663 void __user *argp = (void __user *)arg;
664 struct nvme_ns *ns;
665 int srcu_idx, ret = -EWOULDBLOCK;
666
667 srcu_idx = srcu_read_lock(&head->srcu);
668 ns = nvme_find_path(head);
669 if (!ns)
670 goto out_unlock;
671
672 /*
673 * Handle ioctls that apply to the controller instead of the namespace
674 * seperately and drop the ns SRCU reference early. This avoids a
675 * deadlock when deleting namespaces using the passthrough interface.
676 */
677 if (is_ctrl_ioctl(cmd))
678 return nvme_ns_head_ctrl_ioctl(ns, cmd, argp, head, srcu_idx);
679
680 ret = nvme_ns_ioctl(ns, cmd, argp);
681 out_unlock:
682 srcu_read_unlock(&head->srcu, srcu_idx);
683 return ret;
684 }
685
686 long nvme_ns_head_chr_ioctl(struct file *file, unsigned int cmd,
687 unsigned long arg)
688 {
689 struct cdev *cdev = file_inode(file)->i_cdev;
690 struct nvme_ns_head *head =
691 container_of(cdev, struct nvme_ns_head, cdev);
692 void __user *argp = (void __user *)arg;
693 struct nvme_ns *ns;
694 int srcu_idx, ret = -EWOULDBLOCK;
695
696 srcu_idx = srcu_read_lock(&head->srcu);
697 ns = nvme_find_path(head);
698 if (!ns)
699 goto out_unlock;
700
701 if (is_ctrl_ioctl(cmd))
702 return nvme_ns_head_ctrl_ioctl(ns, cmd, argp, head, srcu_idx);
703
704 ret = nvme_ns_ioctl(ns, cmd, argp);
705 out_unlock:
706 srcu_read_unlock(&head->srcu, srcu_idx);
707 return ret;
708 }
709
710 int nvme_ns_head_chr_uring_cmd(struct io_uring_cmd *ioucmd,
711 unsigned int issue_flags)
712 {
713 struct cdev *cdev = file_inode(ioucmd->file)->i_cdev;
714 struct nvme_ns_head *head = container_of(cdev, struct nvme_ns_head, cdev);
715 int srcu_idx = srcu_read_lock(&head->srcu);
716 struct nvme_ns *ns = nvme_find_path(head);
717 int ret = -EINVAL;
718
719 if (ns)
720 ret = nvme_ns_uring_cmd(ns, ioucmd, issue_flags);
721 srcu_read_unlock(&head->srcu, srcu_idx);
722 return ret;
723 }
724
725 int nvme_ns_head_chr_uring_cmd_iopoll(struct io_uring_cmd *ioucmd)
726 {
727 struct cdev *cdev = file_inode(ioucmd->file)->i_cdev;
728 struct nvme_ns_head *head = container_of(cdev, struct nvme_ns_head, cdev);
729 int srcu_idx = srcu_read_lock(&head->srcu);
730 struct nvme_ns *ns = nvme_find_path(head);
731 struct bio *bio;
732 int ret = 0;
733 struct request_queue *q;
734
735 if (ns) {
736 rcu_read_lock();
> 737 bio = READ_ONCE(ioucmd->private);
738 q = ns->queue;
739 if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags) && bio
740 && bio->bi_bdev)
741 ret = bio_poll(bio, 0, 0);
742 rcu_read_unlock();
743 }
744 srcu_read_unlock(&head->srcu, srcu_idx);
745 return ret;
746 }
747 #endif /* CONFIG_NVME_MULTIPATH */
748
--
0-DAY CI Kernel Test Service
https://01.org/lkp
next prev parent reply other threads:[~2022-08-06 1:38 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20220805155300epcas5p1b98722e20990d0095238964e2be9db34@epcas5p1.samsung.com>
2022-08-05 15:42 ` [PATCH 0/4] iopoll support for io_uring/nvme passthrough Kanchan Joshi
[not found] ` <CGME20220805155304epcas5p1bb687a8f9b25317af39def01696626e8@epcas5p1.samsung.com>
2022-08-05 15:42 ` [PATCH 1/4] fs: add file_operations->uring_cmd_iopoll Kanchan Joshi
[not found] ` <CGME20220805155307epcas5p4bab3f05dc13d8fc2f03c7a26e9bd8c7c@epcas5p4.samsung.com>
2022-08-05 15:42 ` [PATCH 2/4] io_uring: add iopoll infrastructure for io_uring_cmd Kanchan Joshi
[not found] ` <CGME20220805155310epcas5p2bd7ec5b9bee73893958f4bc84038eca0@epcas5p2.samsung.com>
2022-08-05 15:42 ` [PATCH 3/4] block: export blk_rq_is_poll Kanchan Joshi
[not found] ` <CGME20220805155313epcas5p2d35d22831bd07ef33fbdc28bd99ae1d0@epcas5p2.samsung.com>
2022-08-05 15:42 ` [PATCH 4/4] nvme: wire up async polling for io passthrough commands Kanchan Joshi
2022-08-05 17:03 ` Jens Axboe
2022-08-05 17:07 ` Kanchan Joshi
2022-08-05 21:22 ` kernel test robot
2022-08-06 0:06 ` kernel test robot
2022-08-06 1:38 ` kernel test robot [this message]
2022-08-07 12:25 ` kernel test robot
2022-08-05 17:04 ` [PATCH 0/4] iopoll support for io_uring/nvme passthrough Jens Axboe
2022-08-05 17:13 ` Kanchan Joshi
2022-08-05 17:27 ` Jens Axboe
2022-08-05 17:18 ` Jens Axboe
2022-08-05 18:11 ` Keith Busch
2022-08-05 18:15 ` Jens Axboe
2022-08-07 17:58 ` Kanchan Joshi
2022-08-07 18:46 ` Jens Axboe
2022-08-05 18:21 ` Jens Axboe
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 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox