All of lore.kernel.org
 help / color / mirror / Atom feed
* [ammarfaizi2-block:axboe/linux-block/for-next 14/27] fs/io-wq.c:1058:3: warning: The expression is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
@ 2022-02-12 10:39 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-02-12 10:39 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 13714 bytes --]

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: "GNU/Weeb Mailing List" <gwml@vger.gnuweeb.org>
CC: linux-kernel(a)vger.kernel.org
TO: Hao Xu <haoxu@linux.alibaba.com>
CC: Jens Axboe <axboe@kernel.dk>

tree:   https://github.com/ammarfaizi2/linux-block axboe/linux-block/for-next
head:   9c63ffcf47865ad2d20e09d6d6531c4611674cf1
commit: 785d7c2aaac454a6c36028e424f18405c999acac [14/27] io-wq: decouple work_list protection from the big wqe->lock
:::::: branch date: 11 hours ago
:::::: commit date: 16 hours ago
config: mips-randconfig-c004-20220211 (https://download.01.org/0day-ci/archive/20220212/202202121637.Gfbmvobl-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f6685f774697c85d6a352dcea013f46a99f9fe31)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://github.com/ammarfaizi2/linux-block/commit/785d7c2aaac454a6c36028e424f18405c999acac
        git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
        git fetch --no-tags ammarfaizi2-block axboe/linux-block/for-next
        git checkout 785d7c2aaac454a6c36028e424f18405c999acac
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                   while (!err && left) {
                          ^
   kernel/sysctl.c:1440:3: note: Loop condition is true.  Entering loop body
                   while (!err && left) {
                   ^
   kernel/sysctl.c:1447:10: note: Calling 'proc_get_long'
                           err = proc_get_long(&p, &left, &val_a, &neg, tr_a,
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/sysctl.c:411:2: note: Taking false branch
           if (!*size)
           ^
   kernel/sysctl.c:415:6: note: Assuming the condition is false
           if (len > TMPBUFLEN - 1)
               ^~~~~~~~~~~~~~~~~~~
   kernel/sysctl.c:415:2: note: Taking false branch
           if (len > TMPBUFLEN - 1)
           ^
   kernel/sysctl.c:422:6: note: Assuming the condition is false
           if (*p == '-' && *size > 1) {
               ^~~~~~~~~
   kernel/sysctl.c:422:16: note: Left side of '&&' is false
           if (*p == '-' && *size > 1) {
                         ^
   kernel/sysctl.c:426:3: note: The value 0 is assigned to 'neg', which participates in a condition later
                   *neg = false;
                   ^~~~~~~~~~~~
   kernel/sysctl.c:427:2: note: Taking false branch
           if (!isdigit(*p))
           ^
   kernel/sysctl.c:430:2: note: Taking false branch
           if (strtoul_lenient(p, &p, 0, val))
           ^
   kernel/sysctl.c:438:6: note: Assuming the condition is false
           if (len == TMPBUFLEN - 1)
               ^~~~~~~~~~~~~~~~~~~~
   kernel/sysctl.c:438:2: note: Taking false branch
           if (len == TMPBUFLEN - 1)
           ^
   kernel/sysctl.c:441:6: note: Assuming the condition is false
           if (len < *size && perm_tr_len && !memchr(perm_tr, *p, perm_tr_len))
               ^~~~~~~~~~~
   kernel/sysctl.c:441:18: note: Left side of '&&' is false
           if (len < *size && perm_tr_len && !memchr(perm_tr, *p, perm_tr_len))
                           ^
   kernel/sysctl.c:444:6: note: 'tr' is non-null
           if (tr && (len < *size))
               ^~
   kernel/sysctl.c:444:6: note: Left side of '&&' is true
   kernel/sysctl.c:444:2: note: Taking false branch
           if (tr && (len < *size))
           ^
   kernel/sysctl.c:450:2: note: Returning without writing to '*tr'
           return 0;
           ^
   kernel/sysctl.c:450:2: note: Returning zero, which participates in a condition later
           return 0;
           ^~~~~~~~
   kernel/sysctl.c:1447:10: note: Returning from 'proc_get_long'
                           err = proc_get_long(&p, &left, &val_a, &neg, tr_a,
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/sysctl.c:1454:9: note: Assuming 'left' is <= 1
                           if ((left <= 1) && skipped) {
                                ^~~~~~~~~
   kernel/sysctl.c:1454:8: note: Left side of '&&' is true
                           if ((left <= 1) && skipped) {
                               ^
   kernel/sysctl.c:1454:23: note: 'skipped' is 0
                           if ((left <= 1) && skipped) {
                                              ^~~~~~~
   kernel/sysctl.c:1454:4: note: Taking false branch
                           if ((left <= 1) && skipped) {
                           ^
   kernel/sysctl.c:1459:8: note: 'err' is 0
                           if (err)
                               ^~~
   kernel/sysctl.c:1459:4: note: Taking false branch
                           if (err)
                           ^
   kernel/sysctl.c:1461:8: note: Assuming 'val_a' is < 'bitmap_len'
                           if (val_a >= bitmap_len || neg) {
                               ^~~~~~~~~~~~~~~~~~~
   kernel/sysctl.c:1461:8: note: Left side of '||' is false
   kernel/sysctl.c:1461:31: note: 'neg' is false
                           if (val_a >= bitmap_len || neg) {
                                                      ^~~
   kernel/sysctl.c:1461:4: note: Taking false branch
                           if (val_a >= bitmap_len || neg) {
                           ^
   kernel/sysctl.c:1467:8: note: Assuming 'left' is 0
                           if (left) {
                               ^~~~
   kernel/sysctl.c:1467:4: note: Taking false branch
                           if (left) {
                           ^
   kernel/sysctl.c:1472:10: note: The left operand of '==' is a garbage value
                           if (c == '-') {
                               ~ ^
   Suppressed 14 warnings (14 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   8 warnings generated.
>> fs/io-wq.c:1058:3: warning: The expression is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
                   match->nr_pending++;
                   ^
   fs/io-wq.c:979:2: note: Calling 'io_wqe_enqueue'
           io_wqe_enqueue(wqe, work);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:933:6: note: Assuming the condition is false
           if (test_bit(IO_WQ_BIT_EXIT, &wqe->wq->state) ||
               ^
   include/asm-generic/bitops/non-atomic.h:120:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   fs/io-wq.c:933:6: note: Left side of '||' is false
           if (test_bit(IO_WQ_BIT_EXIT, &wqe->wq->state) ||
               ^
   include/asm-generic/bitops/non-atomic.h:120:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   fs/io-wq.c:934:7: note: Assuming the condition is false
               (work->flags & IO_WQ_WORK_CANCEL)) {
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:933:2: note: Taking false branch
           if (test_bit(IO_WQ_BIT_EXIT, &wqe->wq->state) ||
           ^
   fs/io-wq.c:940:2: note: Calling 'io_wqe_insert_work'
           io_wqe_insert_work(wqe, work);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:902:6: note: Assuming the condition is false
           if (!io_wq_is_hashed(work)) {
               ^~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:902:2: note: Taking false branch
           if (!io_wq_is_hashed(work)) {
           ^
   fs/io-wq.c:911:6: note: Assuming 'tail' is non-null
           if (!tail)
               ^~~~~
   fs/io-wq.c:911:2: note: Taking false branch
           if (!tail)
           ^
   fs/io-wq.c:914:2: note: Calling 'wq_list_add_after'
           wq_list_add_after(&work->list, &tail->list, &acct->work_list);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.h:51:6: note: Assuming 'next' is non-null
           if (!next)
               ^~~~~
   fs/io-wq.h:51:2: note: Taking false branch
           if (!next)
           ^
   fs/io-wq.h:53:1: note: Returning without writing to 'list->first', which participates in a condition later
   }
   ^
   fs/io-wq.c:914:2: note: Returning from 'wq_list_add_after'
           wq_list_add_after(&work->list, &tail->list, &acct->work_list);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:940:2: note: Returning from 'io_wqe_insert_work'
           io_wqe_insert_work(wqe, work);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:946:14: note: Assuming the condition is true
           do_create = !io_wqe_activate_free_worker(wqe, acct);
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:951:6: note: 'do_create' is true
           if (do_create && ((work_flags & IO_WQ_WORK_CONCURRENT) ||
               ^~~~~~~~~
   fs/io-wq.c:951:6: note: Left side of '&&' is true
   fs/io-wq.c:951:21: note: Assuming the condition is false
           if (do_create && ((work_flags & IO_WQ_WORK_CONCURRENT) ||
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:951:20: note: Left side of '||' is false
           if (do_create && ((work_flags & IO_WQ_WORK_CONCURRENT) ||
                             ^
   fs/io-wq.c:952:6: note: Assuming the condition is true
               !atomic_read(&acct->nr_running))) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:951:2: note: Taking true branch
           if (do_create && ((work_flags & IO_WQ_WORK_CONCURRENT) ||
           ^
   fs/io-wq.c:956:3: note: Taking false branch
                   if (likely(did_create))
                   ^
   fs/io-wq.c:960:7: note: Assuming field 'nr_workers' is 0
                   if (acct->nr_workers) {
                       ^~~~~~~~~~~~~~~~
   fs/io-wq.c:960:3: note: Taking false branch
                   if (acct->nr_workers) {
                   ^
   fs/io-wq.c:971:3: note: Calling 'io_acct_cancel_pending_work'
                   io_acct_cancel_pending_work(wqe, acct, &match);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:1051:2: note: Loop condition is true.  Entering loop body
           wq_list_for_each(node, prev, &acct->work_list) {
           ^
   fs/io-wq.h:33:2: note: expanded from macro 'wq_list_for_each'
           for (pos = (head)->first, prv = NULL; pos; prv = pos, pos = (pos)->next)
           ^
   fs/io-wq.c:1053:8: note: Calling 'io_wq_work_match_item'
                   if (!match->fn(work, match->data))
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io-wq.c:919:9: note: Assuming 'work' is equal to 'data'
           return work == data;
                  ^~~~~~~~~~~~
   fs/io-wq.c:919:2: note: Returning the value 1, which participates in a condition later

vim +1058 fs/io-wq.c

204361a77f40186 Pavel Begunkov 2020-08-23  1042  
3146cba99aa284b Jens Axboe     2021-09-01  1043  static bool io_acct_cancel_pending_work(struct io_wqe *wqe,
3146cba99aa284b Jens Axboe     2021-09-01  1044  					struct io_wqe_acct *acct,
2293b4195800f88 Pavel Begunkov 2020-03-07  1045  					struct io_cb_cancel_data *match)
771b53d033e8663 Jens Axboe     2019-10-22  1046  {
6206f0e180d4edd Jens Axboe     2019-11-26  1047  	struct io_wq_work_node *node, *prev;
771b53d033e8663 Jens Axboe     2019-10-22  1048  	struct io_wq_work *work;
f95dc207b93da9c Jens Axboe     2021-08-31  1049  
785d7c2aaac454a Hao Xu         2022-02-06  1050  	raw_spin_lock(&acct->lock);
f95dc207b93da9c Jens Axboe     2021-08-31  1051  	wq_list_for_each(node, prev, &acct->work_list) {
6206f0e180d4edd Jens Axboe     2019-11-26  1052  		work = container_of(node, struct io_wq_work, list);
4f26bda1522c35d Pavel Begunkov 2020-06-15  1053  		if (!match->fn(work, match->data))
4f26bda1522c35d Pavel Begunkov 2020-06-15  1054  			continue;
204361a77f40186 Pavel Begunkov 2020-08-23  1055  		io_wqe_remove_pending(wqe, work, prev);
785d7c2aaac454a Hao Xu         2022-02-06  1056  		raw_spin_unlock(&acct->lock);
e9fd939654f1765 Pavel Begunkov 2020-03-04  1057  		io_run_cancel(work, wqe);
4f26bda1522c35d Pavel Begunkov 2020-06-15 @1058  		match->nr_pending++;
4f26bda1522c35d Pavel Begunkov 2020-06-15  1059  		/* not safe to continue after unlock */
3146cba99aa284b Jens Axboe     2021-09-01  1060  		return true;
3146cba99aa284b Jens Axboe     2021-09-01  1061  	}
785d7c2aaac454a Hao Xu         2022-02-06  1062  	raw_spin_unlock(&acct->lock);
3146cba99aa284b Jens Axboe     2021-09-01  1063  
3146cba99aa284b Jens Axboe     2021-09-01  1064  	return false;
3146cba99aa284b Jens Axboe     2021-09-01  1065  }
3146cba99aa284b Jens Axboe     2021-09-01  1066  

:::::: The code at line 1058 was first introduced by commit
:::::: 4f26bda1522c35d2701fc219368c7101c17005c1 io-wq: add an option to cancel all matched reqs

:::::: TO: Pavel Begunkov <asml.silence@gmail.com>
:::::: CC: Jens Axboe <axboe@kernel.dk>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-02-12 10:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-12 10:39 [ammarfaizi2-block:axboe/linux-block/for-next 14/27] fs/io-wq.c:1058:3: warning: The expression is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign] kernel test robot

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.