lkml.org 
[lkml]   [2019]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 106/276] bcache: avoid clang -Wunintialized warning
    Date
    [ Upstream commit 78d4eb8ad9e1d413449d1b7a060f50b6efa81ebd ]

    clang has identified a code path in which it thinks a
    variable may be unused:

    drivers/md/bcache/alloc.c:333:4: error: variable 'bucket' is used uninitialized whenever 'if' condition is false
    [-Werror,-Wsometimes-uninitialized]
    fifo_pop(&ca->free_inc, bucket);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/md/bcache/util.h:219:27: note: expanded from macro 'fifo_pop'
    #define fifo_pop(fifo, i) fifo_pop_front(fifo, (i))
    ^~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/md/bcache/util.h:189:6: note: expanded from macro 'fifo_pop_front'
    if (_r) { \
    ^~
    drivers/md/bcache/alloc.c:343:46: note: uninitialized use occurs here
    allocator_wait(ca, bch_allocator_push(ca, bucket));
    ^~~~~~
    drivers/md/bcache/alloc.c:287:7: note: expanded from macro 'allocator_wait'
    if (cond) \
    ^~~~
    drivers/md/bcache/alloc.c:333:4: note: remove the 'if' if its condition is always true
    fifo_pop(&ca->free_inc, bucket);
    ^
    drivers/md/bcache/util.h:219:27: note: expanded from macro 'fifo_pop'
    #define fifo_pop(fifo, i) fifo_pop_front(fifo, (i))
    ^
    drivers/md/bcache/util.h:189:2: note: expanded from macro 'fifo_pop_front'
    if (_r) { \
    ^
    drivers/md/bcache/alloc.c:331:15: note: initialize the variable 'bucket' to silence this warning
    long bucket;
    ^

    This cannot happen in practice because we only enter the loop
    if there is at least one element in the list.

    Slightly rearranging the code makes this clearer to both the
    reader and the compiler, which avoids the warning.

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/md/bcache/alloc.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
    index 7a28232d868bd..de85b3af3b39d 100644
    --- a/drivers/md/bcache/alloc.c
    +++ b/drivers/md/bcache/alloc.c
    @@ -327,10 +327,11 @@ static int bch_allocator_thread(void *arg)
    * possibly issue discards to them, then we add the bucket to
    * the free list:
    */
    - while (!fifo_empty(&ca->free_inc)) {
    + while (1) {
    long bucket;

    - fifo_pop(&ca->free_inc, bucket);
    + if (!fifo_pop(&ca->free_inc, bucket))
    + break;

    if (ca->discard) {
    mutex_unlock(&ca->set->bucket_lock);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-05-30 06:11    [W:4.135 / U:1.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site