* drivers/block/loop.c:2121:38: warning: Although the value stored to 'xfer' is used in the enclosing expression, the value is never actually read from 'xfer' [clang-analyzer-deadcode.DeadStores]
@ 2021-08-31 2:18 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-08-31 2:18 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17133 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
CC: 0day robot <lkp@intel.com>
tree: https://github.com/0day-ci/linux/commits/UPDATE-20210829-092430/Tetsuo-Handa/loop-replace-loop_ctl_mutex-with-loop_idr_spinlock/20210827-000519
head: d1d1d6b0374667ffe7418416765eedda70f0b6a5
commit: d1d1d6b0374667ffe7418416765eedda70f0b6a5 loop: reduce the loop_ctl_mutex scope
date: 2 days ago
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: x86_64-randconfig-c007-20210829 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 510e106fa8635e7f9c51c896180b971de6309b2f)
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/0day-ci/linux/commit/d1d1d6b0374667ffe7418416765eedda70f0b6a5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review UPDATE-20210829-092430/Tetsuo-Handa/loop-replace-loop_ctl_mutex-with-loop_idr_spinlock/20210827-000519
git checkout d1d1d6b0374667ffe7418416765eedda70f0b6a5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 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 >>)
note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert'
do { \
^
kernel/locking/rtmutex.c:298:30: note: Passing null pointer value via 1st parameter 'left'
return rt_mutex_waiter_less(__node_2_pi_waiter(a), __node_2_pi_waiter(b));
^
kernel/locking/rtmutex.c:293:2: note: expanded from macro '__node_2_pi_waiter'
rb_entry((node), struct rt_mutex_waiter, pi_tree_entry)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/rbtree.h:38:37: note: expanded from macro 'rb_entry'
#define rb_entry(ptr, type, member) container_of(ptr, type, member)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:493:41: note: expanded from macro 'container_of'
#define container_of(ptr, type, member) ({ \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rtmutex.c:298:9: note: Calling 'rt_mutex_waiter_less'
return rt_mutex_waiter_less(__node_2_pi_waiter(a), __node_2_pi_waiter(b));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rtmutex.c:235:6: note: Access to field 'prio' results in a dereference of a null pointer (loaded from variable 'left')
if (left->prio < right->prio)
^~~~
kernel/locking/rtmutex.c:285:6: warning: Access to field '__rb_parent_color' results in a dereference of a null pointer [clang-analyzer-core.NullDereference]
if (RB_EMPTY_NODE(&waiter->tree_entry))
^
include/linux/rbtree.h:44:3: note: expanded from macro 'RB_EMPTY_NODE'
((node)->__rb_parent_color == (unsigned long)(node))
^
kernel/locking/rtmutex.c:1764:6: note: Assuming the condition is true
if (rt_mutex_owner(lock) != current) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rtmutex.c:1764:2: note: Taking true branch
if (rt_mutex_owner(lock) != current) {
^
kernel/locking/rtmutex.c:1765:23: note: Passing value via 2nd parameter 'waiter'
remove_waiter(lock, waiter);
^~~~~~
kernel/locking/rtmutex.c:1765:3: note: Calling 'remove_waiter'
remove_waiter(lock, waiter);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rtmutex.c:1042:24: note: Assuming pointer value is null
bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rtmutex.c:1046:2: note: 'debug_locks' is 0
lockdep_assert_held(&lock->wait_lock);
^
include/linux/lockdep.h:310:11: note: expanded from macro 'lockdep_assert_held'
WARN_ON(debug_locks && \
^~~~~~~~~~~
include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition); \
^~~~~~~~~
kernel/locking/rtmutex.c:1046:2: note: Left side of '&&' is false
lockdep_assert_held(&lock->wait_lock);
^
include/linux/lockdep.h:310:23: note: expanded from macro 'lockdep_assert_held'
WARN_ON(debug_locks && \
^
kernel/locking/rtmutex.c:1046:2: note: Taking false branch
lockdep_assert_held(&lock->wait_lock);
^
include/linux/lockdep.h:310:3: note: expanded from macro 'lockdep_assert_held'
WARN_ON(debug_locks && \
^
include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON'
if (unlikely(__ret_warn_on)) \
^
kernel/locking/rtmutex.c:1046:2: note: Loop condition is false. Exiting loop
lockdep_assert_held(&lock->wait_lock);
^
include/linux/lockdep.h:309:32: note: expanded from macro 'lockdep_assert_held'
#define lockdep_assert_held(l) do { \
^
kernel/locking/rtmutex.c:1049:25: note: Passing null pointer value via 2nd parameter 'waiter'
rt_mutex_dequeue(lock, waiter);
^~~~~~
kernel/locking/rtmutex.c:1049:2: note: Calling 'rt_mutex_dequeue'
rt_mutex_dequeue(lock, waiter);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/locking/rtmutex.c:285:6: note: Access to field '__rb_parent_color' results in a dereference of a null pointer
if (RB_EMPTY_NODE(&waiter->tree_entry))
^
include/linux/rbtree.h:44:3: note: expanded from macro 'RB_EMPTY_NODE'
((node)->__rb_parent_color == (unsigned long)(node))
^~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 3 warnings (2 in non-user code, 1 with check filters).
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.
drivers/block/loop.c:1000:19: warning: Value stored to 'node' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
struct rb_node **node = &(lo->worker_tree.rb_node), *parent = NULL;
^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/block/loop.c:1000:19: note: Value stored to 'node' during its initialization is never read
struct rb_node **node = &(lo->worker_tree.rb_node), *parent = NULL;
^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/block/loop.c:2121:38: warning: Although the value stored to 'xfer' is used in the enclosing expression, the value is never actually read from 'xfer' [clang-analyzer-deadcode.DeadStores]
if (n == 0 || n >= MAX_LO_CRYPT || (xfer = xfer_funcs[n]) == NULL)
^ ~~~~~~~~~~~~~
drivers/block/loop.c:2121:38: note: Although the value stored to 'xfer' is used in the enclosing expression, the value is never actually read from 'xfer'
if (n == 0 || n >= MAX_LO_CRYPT || (xfer = xfer_funcs[n]) == NULL)
^ ~~~~~~~~~~~~~
drivers/block/loop.c:2332:2: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
err = -ENOMEM;
^ ~~~~~~~
drivers/block/loop.c:2332:2: note: Value stored to 'err' is never read
err = -ENOMEM;
^ ~~~~~~~
>> drivers/block/loop.c:2469:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
ret = -EBUSY;
^ ~~~~~~
drivers/block/loop.c:2469:3: note: Value stored to 'ret' is never read
ret = -EBUSY;
^ ~~~~~~
Suppressed 4 warnings (4 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.
5 warnings generated.
drivers/block/drbd/drbd_bitmap.c:654:3: warning: Value stored to 'owords' is never read [clang-analyzer-deadcode.DeadStores]
owords = b->bm_words;
^ ~~~~~~~~~~~
drivers/block/drbd/drbd_bitmap.c:654:3: note: Value stored to 'owords' is never read
owords = b->bm_words;
^ ~~~~~~~~~~~
drivers/block/drbd/drbd_bitmap.c:1156:6: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc]
if (ctx->error) {
^
drivers/block/drbd/drbd_bitmap.c:1244:9: note: Calling 'bm_rw'
return bm_rw(device, BM_AIO_WRITE_HINTED | BM_AIO_COPY_PAGES, 0);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/block/drbd/drbd_bitmap.c:1050:6: note: Assuming 'ctx' is non-null
if (!ctx)
^~~~
drivers/block/drbd/drbd_bitmap.c:1050:2: note: Taking false branch
if (!ctx)
^
drivers/block/drbd/drbd_bitmap.c:1063:7: note: '?' condition is true
if (!get_ldev_if_state(device, D_ATTACHING)) { /* put is in drbd_bm_aio_ctx_destroy() */
^
drivers/block/drbd/drbd_int.h:2083:3: note: expanded from macro 'get_ldev_if_state'
(_get_ldev_if_state((_device), (_min_state)) ? \
^
drivers/block/drbd/drbd_bitmap.c:1063:2: note: Taking false branch
if (!get_ldev_if_state(device, D_ATTACHING)) { /* put is in drbd_bm_aio_ctx_destroy() */
^
drivers/block/drbd/drbd_bitmap.c:1071:2: note: Taking false branch
if (0 == (ctx->flags & ~BM_AIO_READ))
^
drivers/block/drbd/drbd_bitmap.c:1084:2: note: Taking false branch
if (flags & BM_AIO_READ) {
^
drivers/block/drbd/drbd_bitmap.c:1091:9: note: Taking true branch
} else if (flags & BM_AIO_WRITE_HINTED) {
^
drivers/block/drbd/drbd_bitmap.c:1094:18: note: Assuming 'hint' is >= field 'n_bitmap_hints'
for (hint = 0; hint < b->n_bitmap_hints; hint++) {
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/block/drbd/drbd_bitmap.c:1094:3: note: Loop condition is false. Execution continues on line 1141
for (hint = 0; hint < b->n_bitmap_hints; hint++) {
^
drivers/block/drbd/drbd_bitmap.c:1141:6: note: Assuming the condition is false
if (!atomic_dec_and_test(&ctx->in_flight))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/block/drbd/drbd_bitmap.c:1141:2: note: Taking false branch
if (!atomic_dec_and_test(&ctx->in_flight))
^
drivers/block/drbd/drbd_bitmap.c:1144:3: note: Calling 'kref_put'
kref_put(&ctx->kref, &drbd_bm_aio_ctx_destroy);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/kref.h:64:2: note: Taking true branch
if (refcount_dec_and_test(&kref->refcount)) {
^
include/linux/kref.h:65:3: note: Calling 'drbd_bm_aio_ctx_destroy'
release(kref);
^~~~~~~~~~~~~
drivers/block/drbd/drbd_bitmap.c:926:32: note: Left side of '&&' is false
struct drbd_bm_aio_ctx *ctx = container_of(kref, struct drbd_bm_aio_ctx, kref);
^
include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^
drivers/block/drbd/drbd_bitmap.c:926:32: note: Taking false branch
struct drbd_bm_aio_ctx *ctx = container_of(kref, struct drbd_bm_aio_ctx, kref);
^
include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^
include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^
include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^
drivers/block/drbd/drbd_bitmap.c:926:32: note: Loop condition is false. Exiting loop
struct drbd_bm_aio_ctx *ctx = container_of(kref, struct drbd_bm_aio_ctx, kref);
^
include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^
include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^
include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
vim +2121 drivers/block/loop.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 2115
^1da177e4c3f41 Linus Torvalds 2005-04-16 2116 int loop_unregister_transfer(int number)
^1da177e4c3f41 Linus Torvalds 2005-04-16 2117 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2118 unsigned int n = number;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2119 struct loop_func_table *xfer;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2120
^1da177e4c3f41 Linus Torvalds 2005-04-16 @2121 if (n == 0 || n >= MAX_LO_CRYPT || (xfer = xfer_funcs[n]) == NULL)
^1da177e4c3f41 Linus Torvalds 2005-04-16 2122 return -EINVAL;
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2123 /*
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2124 * This function is called from only cleanup_cryptoloop().
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2125 * Given that each loop device that has a transfer enabled holds a
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2126 * reference to the module implementing it we should never get here
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2127 * with a transfer that is set (unless forced module unloading is
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2128 * requested). Thus, check module's refcount and warn if this is
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2129 * not a clean unloading.
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2130 */
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2131 #ifdef CONFIG_MODULE_UNLOAD
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2132 if (xfer->owner && module_refcount(xfer->owner) != -1)
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2133 pr_err("Unregistering a transfer function in use. Expect kernel crashes.\n");
d1d1d6b0374667 Tetsuo Handa 2021-08-29 2134 #endif
^1da177e4c3f41 Linus Torvalds 2005-04-16 2135
^1da177e4c3f41 Linus Torvalds 2005-04-16 2136 xfer_funcs[n] = NULL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2137 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2138 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 2139
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 41080 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-08-31 2:18 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-31 2:18 drivers/block/loop.c:2121:38: warning: Although the value stored to 'xfer' is used in the enclosing expression, the value is never actually read from 'xfer' [clang-analyzer-deadcode.DeadStores] 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.