tree:
https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git
queue-5.10
head: 9ced6633127bd25a94939777d9ecda54800859fc
commit: 28095f9cb8c185be018e34390a9cbdd5a39648d7 [46/74] io_uring: don't take
uring_lock during iowq cancel
config: nios2-defconfig (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0
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://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git/c...
git remote add sashal-linux-stable
https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git
git fetch --no-tags sashal-linux-stable queue-5.10
git checkout 28095f9cb8c185be018e34390a9cbdd5a39648d7
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
fs/io_uring.c: In function 'io_prep_async_work':
fs/io_uring.c:1431:22: warning: variable 'id' set but not used
[-Wunused-but-set-variable]
1431 | struct io_identity *id;
| ^~
fs/io_uring.c: In function 'io_close':
fs/io_uring.c:4283:22: error: 'IO_WQ_WORK_NO_CANCEL' undeclared (first use in
this function); did you mean 'IO_WQ_WORK_CANCEL'?
4283 | req->work.flags |= IO_WQ_WORK_NO_CANCEL;
| ^~~~~~~~~~~~~~~~~~~~
| IO_WQ_WORK_CANCEL
fs/io_uring.c:4283:22: note: each undeclared identifier is reported only once for each
function it appears in
fs/io_uring.c: In function 'io_wq_submit_work':
> fs/io_uring.c:6108:3: error: implicit declaration of function
'io_req_task_work_add_fallback'; did you mean 'io_req_task_work_add'?
[-Werror=implicit-function-declaration]
6108 |
io_req_task_work_add_fallback(req, io_req_task_cancel);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| io_req_task_work_add
fs/io_uring.c:6109:3: error: 'return' with no value, in function returning
non-void [-Werror=return-type]
6109 | return;
| ^~~~~~
fs/io_uring.c:6094:27: note: declared here
6094 | static struct io_wq_work *io_wq_submit_work(struct io_wq_work *work)
| ^~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +6108 fs/io_uring.c
6093
6094 static struct io_wq_work *io_wq_submit_work(struct io_wq_work *work)
6095 {
6096 struct io_kiocb *req = container_of(work, struct io_kiocb, work);
6097 struct io_kiocb *timeout;
6098 int ret = 0;
6099
6100 timeout = io_prep_linked_timeout(req);
6101 if (timeout)
6102 io_queue_linked_timeout(timeout);
6103
6104 if (work->flags & IO_WQ_WORK_CANCEL) {
6105 /* io-wq is going to take down one */
6106 refcount_inc(&req->refs);
6107 percpu_ref_get(&req->ctx->refs);
6108 io_req_task_work_add_fallback(req, io_req_task_cancel);
6109 return;
6110 }
6111
6112 if (!ret) {
6113 do {
6114 ret = io_issue_sqe(req, false, NULL);
6115 /*
6116 * We can get EAGAIN for polled IO even though we're
6117 * forcing a sync submission from here, since we can't
6118 * wait for request slots on the block side.
6119 */
6120 if (ret != -EAGAIN)
6121 break;
6122 cond_resched();
6123 } while (1);
6124 }
6125
6126 if (ret) {
6127 struct io_ring_ctx *lock_ctx = NULL;
6128
6129 if (req->ctx->flags & IORING_SETUP_IOPOLL)
6130 lock_ctx = req->ctx;
6131
6132 /*
6133 * io_iopoll_complete() does not hold completion_lock to
6134 * complete polled io, so here for polled io, we can not call
6135 * io_req_complete() directly, otherwise there maybe concurrent
6136 * access to cqring, defer_list, etc, which is not safe. Given
6137 * that io_iopoll_complete() is always called under uring_lock,
6138 * so here for polled io, we also get uring_lock to complete
6139 * it.
6140 */
6141 if (lock_ctx)
6142 mutex_lock(&lock_ctx->uring_lock);
6143
6144 req_set_fail_links(req);
6145 io_req_complete(req, ret);
6146
6147 if (lock_ctx)
6148 mutex_unlock(&lock_ctx->uring_lock);
6149 }
6150
6151 return io_steal_work(req);
6152 }
6153
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org