• Coly Li's avatar
    bcache: fix incorrect data type usage in btree_flush_write() · d1c3cc34
    Coly Li authored
    Dan Carpenter points out that from commit 2aa8c529 ("bcache: avoid
    unnecessary btree nodes flushing in btree_flush_write()"), there is a
    incorrect data type usage which leads to the following static checker
    warning:
    	drivers/md/bcache/journal.c:444 btree_flush_write()
    	warn: 'ref_nr' unsigned <= 0
    
    drivers/md/bcache/journal.c
       422  static void btree_flush_write(struct cache_set *c)
       423  {
       424          struct btree *b, *t, *btree_nodes[BTREE_FLUSH_NR];
       425          unsigned int i, nr, ref_nr;
                                        ^^^^^^
    
       426          atomic_t *fifo_front_p, *now_fifo_front_p;
       427          size_t mask;
       428
       429          if (c->journal.btree_flushing)
       430                  return;
       431
       432          spin_lock(&c->journal.flush_write_lock);
       433          if (c->journal.btree_flushing) {
       434                  spin_unlock(&c->journal.flush_write_lock);
       435                  return;
       436          }
       437          c->journal.btree_flushing = true;
       438          spin_unlock(&c->journal.flush_write_lock);
       439
       440          /* get the oldest journal entry and check its refcount */
       441          spin_lock(&c->journal.lock);
       442          fifo_front_p = &fifo_front(&c->journal.pin);
       443          ref_nr = atomic_read(fifo_front_p);
       444          if (ref_nr <= 0) {
                        ^^^^^^^^^^^
    Unsigned can't be less than zero.
    
       445                  /*
       446                   * do nothing if no btree node references
       447                   * the oldest journal entry
       448                   */
       449                  spin_unlock(&c->journal.lock);
       450                  goto out;
       451          }
       452          spin_unlock(&c->journal.lock);
    
    As the warning information indicates, local varaible ref_nr in unsigned
    int type is wrong, which does not matche atomic_read() and the "<= 0"
    checking.
    
    This patch fixes the above error by defining local variable ref_nr as
    int type.
    
    Fixes: 2aa8c529 ("bcache: avoid unnecessary btree nodes flushing in btree_flush_write()")
    Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    d1c3cc34
journal.c 23.7 KB