All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: xiaoguang.wang@linux.alibaba.com
Cc: io-uring@vger.kernel.org
Subject: [bug report] io_uring: refactor io_sq_thread() handling
Date: Wed, 11 Nov 2020 14:38:10 +0300	[thread overview]
Message-ID: <20201111113810.GA1248583@mwanda> (raw)

Hello Xiaoguang Wang,

The patch e0c06f5ab2c5: "io_uring: refactor io_sq_thread() handling"
from Nov 3, 2020, leads to the following static checker warning:

	fs/io_uring.c:6939 io_sq_thread()
	error: uninitialized symbol 'timeout'.

fs/io_uring.c
  6883  static int io_sq_thread(void *data)
  6884  {
  6885          struct cgroup_subsys_state *cur_css = NULL;
  6886          struct files_struct *old_files = current->files;
  6887          struct nsproxy *old_nsproxy = current->nsproxy;
  6888          struct pid *old_thread_pid = current->thread_pid;
  6889          const struct cred *old_cred = NULL;
  6890          struct io_sq_data *sqd = data;
  6891          struct io_ring_ctx *ctx;
  6892          unsigned long timeout;
                ^^^^^^^^^^^^^^^^^^^^^^

  6893          DEFINE_WAIT(wait);
  6894  
  6895          task_lock(current);
  6896          current->files = NULL;
  6897          current->nsproxy = NULL;
  6898          current->thread_pid = NULL;
  6899          task_unlock(current);
  6900  
  6901          while (!kthread_should_stop()) {
  6902                  int ret;
  6903                  bool cap_entries, sqt_spin, needs_sched;
  6904  
  6905                  /*
  6906                   * Any changes to the sqd lists are synchronized through the
  6907                   * kthread parking. This synchronizes the thread vs users,
  6908                   * the users are synchronized on the sqd->ctx_lock.
  6909                   */
  6910                  if (kthread_should_park())
  6911                          kthread_parkme();
  6912  
  6913                  if (unlikely(!list_empty(&sqd->ctx_new_list))) {
  6914                          io_sqd_init_new(sqd);
  6915                          timeout = jiffies + sqd->sq_thread_idle;
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
timeout not set on else path.

  6916                  }
  6917  
  6918                  sqt_spin = false;
  6919                  cap_entries = !list_is_singular(&sqd->ctx_list);
  6920                  list_for_each_entry(ctx, &sqd->ctx_list, sqd_list) {
  6921                          if (current->cred != ctx->creds) {
  6922                                  if (old_cred)
  6923                                          revert_creds(old_cred);
  6924                                  old_cred = override_creds(ctx->creds);
  6925                          }
  6926                          io_sq_thread_associate_blkcg(ctx, &cur_css);
  6927  #ifdef CONFIG_AUDIT
  6928                          current->loginuid = ctx->loginuid;
  6929                          current->sessionid = ctx->sessionid;
  6930  #endif
  6931  
  6932                          ret = __io_sq_thread(ctx, cap_entries);
  6933                          if (!sqt_spin && (ret > 0 || !list_empty(&ctx->iopoll_list)))
  6934                                  sqt_spin = true;
  6935  
  6936                          io_sq_thread_drop_mm_files();
  6937                  }
  6938  
  6939                  if (sqt_spin || !time_after(jiffies, timeout)) {
                                                             ^^^^^^^
warning

  6940                          io_run_task_work();
  6941                          cond_resched();
  6942                          if (sqt_spin)
  6943                                  timeout = jiffies + sqd->sq_thread_idle;
  6944                          continue;
  6945                  }
  6946  
  6947                  if (kthread_should_park())
  6948                          continue;
  6949  
  6950                  needs_sched = true;
  6951                  prepare_to_wait(&sqd->wait, &wait, TASK_INTERRUPTIBLE);
  6952                  list_for_each_entry(ctx, &sqd->ctx_list, sqd_list) {
  6953                          if ((ctx->flags & IORING_SETUP_IOPOLL) &&
  6954                              !list_empty_careful(&ctx->iopoll_list)) {
  6955                                  needs_sched = false;
  6956                                  break;
  6957                          }
  6958                          if (io_sqring_entries(ctx)) {
  6959                                  needs_sched = false;
  6960                                  break;
  6961                          }
  6962                  }
  6963  
  6964                  if (needs_sched) {
  6965                          list_for_each_entry(ctx, &sqd->ctx_list, sqd_list)
  6966                                  io_ring_set_wakeup_flag(ctx);
  6967  
  6968                          schedule();
  6969                          list_for_each_entry(ctx, &sqd->ctx_list, sqd_list)
  6970                                  io_ring_clear_wakeup_flag(ctx);
  6971                  }
  6972  
  6973                  finish_wait(&sqd->wait, &wait);
  6974                  timeout = jiffies + sqd->sq_thread_idle;
  6975          }
  6976  
  6977          io_run_task_work();
  6978  
  6979          if (cur_css)
  6980                  io_sq_thread_unassociate_blkcg();
  6981          if (old_cred)
  6982                  revert_creds(old_cred);
  6983  
  6984          task_lock(current);
  6985          current->files = old_files;
  6986          current->nsproxy = old_nsproxy;
  6987          current->thread_pid = old_thread_pid;
  6988          task_unlock(current);
  6989  
  6990          kthread_parkme();
  6991  
  6992          return 0;
  6993  }

regards,
dan carpenter

             reply	other threads:[~2020-11-11 11:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-11 11:38 Dan Carpenter [this message]
2020-11-11 14:04 ` [bug report] io_uring: refactor io_sq_thread() handling Xiaoguang Wang
2020-11-11 15:55   ` 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 \
    --in-reply-to=20201111113810.GA1248583@mwanda \
    --to=dan.carpenter@oracle.com \
    --cc=io-uring@vger.kernel.org \
    --cc=xiaoguang.wang@linux.alibaba.com \
    /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.