CC: [email protected]
TO: Pavel Begunkov <[email protected]>
CC: Jens Axboe <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git 
for-5.9/io_uring
head:   4e147a766da5b3209edbc00d686dbf0124591442
commit: 4e147a766da5b3209edbc00d686dbf0124591442 [109/109] io_uring: fix racy 
req->flags modification
:::::: branch date: 7 hours ago
:::::: commit date: 7 hours ago
config: alpha-randconfig-c021-20200725 (attached as .config)
compiler: alpha-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Julia Lawall <[email protected]>


coccinelle warnings: (new ones prefixed by >>)

>> fs/io_uring.c:7908:0-1: preceding lock on line 7875

# 
https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git/commit/?id=4e147a766da5b3209edbc00d686dbf0124591442
git remote add block 
https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
git remote update block
git checkout 4e147a766da5b3209edbc00d686dbf0124591442
vim +7908 fs/io_uring.c

67c4d9e693e3bb Pavel Begunkov 2020-06-15  7841  
fcb323cc53e29d Jens Axboe     2019-10-24  7842  static void 
io_uring_cancel_files(struct io_ring_ctx *ctx,
fcb323cc53e29d Jens Axboe     2019-10-24  7843                                  
  struct files_struct *files)
fcb323cc53e29d Jens Axboe     2019-10-24  7844  {
67c4d9e693e3bb Pavel Begunkov 2020-06-15  7845          if 
(list_empty_careful(&ctx->inflight_list))
67c4d9e693e3bb Pavel Begunkov 2020-06-15  7846                  return;
67c4d9e693e3bb Pavel Begunkov 2020-06-15  7847  
67c4d9e693e3bb Pavel Begunkov 2020-06-15  7848          /* cancel all at once, 
should be faster than doing it one by one*/
67c4d9e693e3bb Pavel Begunkov 2020-06-15  7849          
io_wq_cancel_cb(ctx->io_wq, io_wq_files_match, files, true);
67c4d9e693e3bb Pavel Begunkov 2020-06-15  7850  
fcb323cc53e29d Jens Axboe     2019-10-24  7851          while 
(!list_empty_careful(&ctx->inflight_list)) {
d8f1b9716cfd1a Xiaoguang Wang 2020-04-26  7852                  struct io_kiocb 
*cancel_req = NULL, *req;
d8f1b9716cfd1a Xiaoguang Wang 2020-04-26  7853                  
DEFINE_WAIT(wait);
fcb323cc53e29d Jens Axboe     2019-10-24  7854  
fcb323cc53e29d Jens Axboe     2019-10-24  7855                  
spin_lock_irq(&ctx->inflight_lock);
fcb323cc53e29d Jens Axboe     2019-10-24  7856                  
list_for_each_entry(req, &ctx->inflight_list, inflight_entry) {
768134d4f48109 Jens Axboe     2019-11-10  7857                          if 
(req->work.files != files)
768134d4f48109 Jens Axboe     2019-11-10  7858                                  
continue;
768134d4f48109 Jens Axboe     2019-11-10  7859                          /* req 
is being completed, ignore */
768134d4f48109 Jens Axboe     2019-11-10  7860                          if 
(!refcount_inc_not_zero(&req->refs))
768134d4f48109 Jens Axboe     2019-11-10  7861                                  
continue;
768134d4f48109 Jens Axboe     2019-11-10  7862                          
cancel_req = req;
fcb323cc53e29d Jens Axboe     2019-10-24  7863                          break;
fcb323cc53e29d Jens Axboe     2019-10-24  7864                  }
768134d4f48109 Jens Axboe     2019-11-10  7865                  if (cancel_req)
fcb323cc53e29d Jens Axboe     2019-10-24  7866                          
prepare_to_wait(&ctx->inflight_wait, &wait,
fcb323cc53e29d Jens Axboe     2019-10-24  7867                                  
                TASK_UNINTERRUPTIBLE);
fcb323cc53e29d Jens Axboe     2019-10-24  7868                  
spin_unlock_irq(&ctx->inflight_lock);
fcb323cc53e29d Jens Axboe     2019-10-24  7869  
768134d4f48109 Jens Axboe     2019-11-10  7870                  /* We need to 
keep going until we don't find a matching req */
768134d4f48109 Jens Axboe     2019-11-10  7871                  if (!cancel_req)
fcb323cc53e29d Jens Axboe     2019-10-24  7872                          break;
2f6d9b9d6357ed Bob Liu        2019-11-13  7873  
2ca10259b4189a Jens Axboe     2020-02-13  7874                  if 
(cancel_req->flags & REQ_F_OVERFLOW) {
2ca10259b4189a Jens Axboe     2020-02-13 @7875                          
spin_lock_irq(&ctx->completion_lock);
4e147a766da5b3 Pavel Begunkov 2020-07-25  7876  
4e147a766da5b3 Pavel Begunkov 2020-07-25  7877                          if 
(list_empty(&cancel_req->compl.list))
4e147a766da5b3 Pavel Begunkov 2020-07-25  7878                                  
goto out_wait;
4e147a766da5b3 Pavel Begunkov 2020-07-25  7879                          
list_del_init(&cancel_req->compl.list);
4e147a766da5b3 Pavel Begunkov 2020-07-25  7880  
2ca10259b4189a Jens Axboe     2020-02-13  7881                          if 
(list_empty(&ctx->cq_overflow_list)) {
2ca10259b4189a Jens Axboe     2020-02-13  7882                                  
clear_bit(0, &ctx->sq_check_overflow);
2ca10259b4189a Jens Axboe     2020-02-13  7883                                  
clear_bit(0, &ctx->cq_check_overflow);
6d5f904904608a Xiaoguang Wang 2020-07-09  7884                                  
ctx->rings->sq_flags &= ~IORING_SQ_CQ_OVERFLOW;
2ca10259b4189a Jens Axboe     2020-02-13  7885                          }
2ca10259b4189a Jens Axboe     2020-02-13  7886                          
spin_unlock_irq(&ctx->completion_lock);
2ca10259b4189a Jens Axboe     2020-02-13  7887  
2ca10259b4189a Jens Axboe     2020-02-13  7888                          
WRITE_ONCE(ctx->rings->cq_overflow,
2ca10259b4189a Jens Axboe     2020-02-13  7889                                  
atomic_inc_return(&ctx->cached_cq_overflow));
2ca10259b4189a Jens Axboe     2020-02-13  7890  
2ca10259b4189a Jens Axboe     2020-02-13  7891                          /*
2ca10259b4189a Jens Axboe     2020-02-13  7892                           * Put 
inflight ref and overflow ref. If that's
2ca10259b4189a Jens Axboe     2020-02-13  7893                           * all 
we had, then we're done with this request.
2ca10259b4189a Jens Axboe     2020-02-13  7894                           */
2ca10259b4189a Jens Axboe     2020-02-13  7895                          if 
(refcount_sub_and_test(2, &cancel_req->refs)) {
4518a3cc273cf8 Pavel Begunkov 2020-05-26  7896                                  
io_free_req(cancel_req);
d8f1b9716cfd1a Xiaoguang Wang 2020-04-26  7897                                  
finish_wait(&ctx->inflight_wait, &wait);
2ca10259b4189a Jens Axboe     2020-02-13  7898                                  
continue;
2ca10259b4189a Jens Axboe     2020-02-13  7899                          }
7b53d59859bc93 Pavel Begunkov 2020-05-30  7900                  } else {
2f6d9b9d6357ed Bob Liu        2019-11-13  7901                          
io_wq_cancel_work(ctx->io_wq, &cancel_req->work);
2f6d9b9d6357ed Bob Liu        2019-11-13  7902                          
io_put_req(cancel_req);
7b53d59859bc93 Pavel Begunkov 2020-05-30  7903                  }
4e147a766da5b3 Pavel Begunkov 2020-07-25  7904  out_wait:
fcb323cc53e29d Jens Axboe     2019-10-24  7905                  schedule();
768134d4f48109 Jens Axboe     2019-11-10  7906                  
finish_wait(&ctx->inflight_wait, &wait);
fcb323cc53e29d Jens Axboe     2019-10-24  7907          }
d8f1b9716cfd1a Xiaoguang Wang 2020-04-26 @7908  }
fcb323cc53e29d Jens Axboe     2019-10-24  7909  

:::::: The code at line 7908 was first introduced by commit
:::::: d8f1b9716cfd1a1f74c0fedad40c5f65a25aa208 io_uring: fix mismatched 
finish_wait() calls in io_uring_cancel_files()

:::::: TO: Xiaoguang Wang <[email protected]>
:::::: CC: Jens Axboe <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to