All of lore.kernel.org
 help / color / mirror / Atom feed
* [jaegeuk-f2fs:dev-test 8/12] fs/f2fs/segment.c:1425:4: warning: Value stored to 'tdc' is never read [clang-analyzer-deadcode.DeadStores]
@ 2023-03-17 11:59 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-03-17 11:59 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp

:::::: 
:::::: Manual check reason: "low confidence static check warning: fs/f2fs/segment.c:1425:4: warning: Value stored to 'tdc' is never read [clang-analyzer-deadcode.DeadStores]"
:::::: 

BCC: lkp@intel.com
CC: llvm@lists.linux.dev
CC: oe-kbuild-all@lists.linux.dev
CC: linux-f2fs-devel@lists.sourceforge.net
TO: Jaegeuk Kim <jaegeuk@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git dev-test
head:   d15180a8d1d72c7bddcb700d2c9ffdab7d2b9481
commit: 7e9775a516ff6c1e73ee2b42ec563cafee38f42f [8/12] f2fs: factor out discard_cmd usage from general rb_tree use
:::::: branch date: 18 hours ago
:::::: commit date: 4 days ago
config: riscv-randconfig-c006-20230312 (https://download.01.org/0day-ci/archive/20230317/202303171906.bAA3G215-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 67409911353323ca5edf2049ef0df54132fa1ca7)
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 riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/commit/?id=7e9775a516ff6c1e73ee2b42ec563cafee38f42f
        git remote add jaegeuk-f2fs https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git
        git fetch --no-tags jaegeuk-f2fs dev-test
        git checkout 7e9775a516ff6c1e73ee2b42ec563cafee38f42f
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer  olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/r/202303171906.bAA3G215-lkp@intel.com/

clang_analyzer warnings: (new ones prefixed by >>)
   fs/f2fs/segment.c:323:4: note: Taking false branch
                           if (!__is_valid_data_blkaddr(blkaddr)) {
                           ^
   fs/f2fs/segment.c:325:15: note: Assuming the condition is false
                           } else if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:325:11: note: Taking false branch
                           } else if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
                                  ^
   fs/f2fs/segment.c:337:10: note: Calling '__replace_atomic_write_block'
                           ret = __replace_atomic_write_block(inode, index, blkaddr,
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:221:6: note: Assuming 'err' is 0
           if (err) {
               ^~~
   fs/f2fs/segment.c:221:2: note: Taking false branch
           if (err) {
           ^
   fs/f2fs/segment.c:230:6: note: Assuming 'err' is not equal to 0
           if (err) {
               ^~~
   fs/f2fs/segment.c:230:2: note: Taking true branch
           if (err) {
           ^
   fs/f2fs/segment.c:337:10: note: Returning from '__replace_atomic_write_block'
                           ret = __replace_atomic_write_block(inode, index, blkaddr,
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:339:8: note: 'ret' is not equal to 0
                           if (ret) {
                               ^~~
   fs/f2fs/segment.c:339:4: note: Taking true branch
                           if (ret) {
                           ^
   fs/f2fs/segment.c:342:5: note: Control jumps to line 356
                                   goto out;
                                   ^
   fs/f2fs/segment.c:356:6: note: 'ret' is not equal to 0
           if (ret) {
               ^~~
   fs/f2fs/segment.c:356:2: note: Taking true branch
           if (ret) {
           ^
   fs/f2fs/segment.c:363:46: note: 'ret' is not equal to 0
           __complete_revoke_list(inode, &revoke_list, ret ? true : false);
                                                       ^~~
   fs/f2fs/segment.c:363:46: note: '?' condition is true
   fs/f2fs/segment.c:363:2: note: Calling '__complete_revoke_list'
           __complete_revoke_list(inode, &revoke_list, ret ? true : false);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:271:2: note: Loop condition is true.  Entering loop body
           list_for_each_entry_safe(cur, tmp, head, list) {
           ^
   include/linux/list.h:776:2: note: expanded from macro 'list_for_each_entry_safe'
           for (pos = list_first_entry(head, typeof(*pos), member),        \
           ^
   fs/f2fs/segment.c:272:7: note: 'revoke' is true
                   if (revoke) {
                       ^~~~~~
   fs/f2fs/segment.c:272:3: note: Taking true branch
                   if (revoke) {
                   ^
   fs/f2fs/segment.c:274:22: note: Passing null pointer value via 4th parameter 'old_addr'
                                                   cur->old_addr, NULL, true);
                                                                  ^
   include/linux/stddef.h:8:14: note: expanded from macro 'NULL'
   #define NULL ((void *)0)
                ^~~~~~~~~~~
   fs/f2fs/segment.c:273:4: note: Calling '__replace_atomic_write_block'
                           __replace_atomic_write_block(inode, cur->index,
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:221:6: note: Assuming 'err' is 0
           if (err) {
               ^~~
   fs/f2fs/segment.c:221:2: note: Taking false branch
           if (err) {
           ^
   fs/f2fs/segment.c:230:6: note: Assuming 'err' is 0
           if (err) {
               ^~~
   fs/f2fs/segment.c:230:2: note: Taking false branch
           if (err) {
           ^
   fs/f2fs/segment.c:235:6: note: 'recover' is true
           if (recover) {
               ^~~~~~~
   fs/f2fs/segment.c:235:2: note: Taking true branch
           if (recover) {
           ^
   fs/f2fs/segment.c:237:3: note: Taking true branch
                   if (!__is_valid_data_blkaddr(new_addr)) {
                   ^
   fs/f2fs/segment.c:238:8: note: 'new_addr' is not equal to NULL_ADDR
                           if (new_addr == NULL_ADDR)
                               ^~~~~~~~
   fs/f2fs/segment.c:238:4: note: Taking false branch
                           if (new_addr == NULL_ADDR)
                           ^
   fs/f2fs/segment.c:260:13: note: Dereference of null pointer (loaded from variable 'old_addr')
                                           index, *old_addr, new_addr, recover);
                                                  ^~~~~~~~~
>> fs/f2fs/segment.c:1425:4: warning: Value stored to 'tdc' is never read [clang-analyzer-deadcode.DeadStores]
                           tdc = prev_dc;
                           ^     ~~~~~~~
   fs/f2fs/segment.c:1425:4: note: Value stored to 'tdc' is never read
                           tdc = prev_dc;
                           ^     ~~~~~~~
   include/linux/math64.h:28:24: warning: Division by zero [clang-analyzer-core.DivideZero]
           *remainder = dividend % divisor;
                                 ^
   fs/f2fs/segment.c:5166:6: note: Assuming 'sm_info' is non-null
           if (!sm_info)
               ^~~~~~~~
   fs/f2fs/segment.c:5166:2: note: Taking false branch
           if (!sm_info)
           ^
   fs/f2fs/segment.c:5180:6: note: Assuming field 'rec_prefree_segments' is <= DEF_MAX_RECLAIM_PREFREE_SEGMENTS
           if (sm_info->rec_prefree_segments > DEF_MAX_RECLAIM_PREFREE_SEGMENTS)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:5180:2: note: Taking false branch
           if (sm_info->rec_prefree_segments > DEF_MAX_RECLAIM_PREFREE_SEGMENTS)
           ^
   fs/f2fs/segment.c:5183:2: note: Taking true branch
           if (!f2fs_lfs_mode(sbi))
           ^
   fs/f2fs/segment.c:5193:2: note: Loop condition is false.  Exiting loop
           init_f2fs_rwsem(&sm_info->curseg_lock);
           ^
   fs/f2fs/f2fs.h:2138:34: note: expanded from macro 'init_f2fs_rwsem'
   #define init_f2fs_rwsem(sem)                                    \
                                                                   ^
   fs/f2fs/segment.c:5196:6: note: 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5196:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5200:6: note: 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5200:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5204:6: note: 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5204:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5207:6: note: 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5207:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5210:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5210:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5215:6: note: 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5215:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5220:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5220:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5223:8: note: Value assigned to field 'segs_per_sec'
           err = sanity_check_curseg(sbi);
                 ^~~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:5224:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   fs/f2fs/segment.c:5224:2: note: Taking false branch
           if (err)
           ^
   fs/f2fs/segment.c:5227:2: note: Calling 'init_min_max_mtime'
           init_min_max_mtime(sbi);
           ^~~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:5141:18: note: Assuming 'segno' is < field 'main_segments'
           for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
                           ^~~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:5141:2: note: Loop condition is true.  Entering loop body
           for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
           ^
   fs/f2fs/segment.c:5145:15: note: Assuming 'i' is >= field 'segs_per_sec'
                   for (i = 0; i < sbi->segs_per_sec; i++)
                               ^~~~~~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:5145:3: note: Loop condition is false. Execution continues on line 5148
                   for (i = 0; i < sbi->segs_per_sec; i++)
                   ^
   fs/f2fs/segment.c:5148:26: note: Passing the value 0 via 2nd parameter 'divisor'
                   mtime = div_u64(mtime, sbi->segs_per_sec);
                                          ^~~~~~~~~~~~~~~~~
   fs/f2fs/segment.c:5148:11: note: Calling 'div_u64'
                   mtime = div_u64(mtime, sbi->segs_per_sec);

vim +/tdc +1425 fs/f2fs/segment.c

3d6a650febdd76 Yunlei He         2017-03-02  1370  
004b68621897f0 Chao Yu           2017-04-14  1371  static void __update_discard_tree_range(struct f2fs_sb_info *sbi,
004b68621897f0 Chao Yu           2017-04-14  1372  				struct block_device *bdev, block_t lstart,
004b68621897f0 Chao Yu           2017-04-14  1373  				block_t start, block_t len)
275b66b09e85cf Chao Yu           2016-08-29  1374  {
0b54fb8458199d Jaegeuk Kim       2017-01-11  1375  	struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
004b68621897f0 Chao Yu           2017-04-14  1376  	struct discard_cmd *prev_dc = NULL, *next_dc = NULL;
004b68621897f0 Chao Yu           2017-04-14  1377  	struct discard_cmd *dc;
004b68621897f0 Chao Yu           2017-04-14  1378  	struct discard_info di = {0};
004b68621897f0 Chao Yu           2017-04-14  1379  	struct rb_node **insert_p = NULL, *insert_parent = NULL;
35ec7d57488497 Chao Yu           2018-08-06  1380  	unsigned int max_discard_blocks =
cf0fbf894bb543 Christoph Hellwig 2022-04-15  1381  			SECTOR_TO_BLOCK(bdev_max_discard_sectors(bdev));
004b68621897f0 Chao Yu           2017-04-14  1382  	block_t end = lstart + len;
275b66b09e85cf Chao Yu           2016-08-29  1383  
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1384  	dc = __lookup_discard_cmd_ret(&dcc->root, lstart,
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1385  				&prev_dc, &next_dc, &insert_p, &insert_parent);
004b68621897f0 Chao Yu           2017-04-14  1386  	if (dc)
004b68621897f0 Chao Yu           2017-04-14  1387  		prev_dc = dc;
004b68621897f0 Chao Yu           2017-04-14  1388  
004b68621897f0 Chao Yu           2017-04-14  1389  	if (!prev_dc) {
004b68621897f0 Chao Yu           2017-04-14  1390  		di.lstart = lstart;
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1391  		di.len = next_dc ? next_dc->di.lstart - lstart : len;
004b68621897f0 Chao Yu           2017-04-14  1392  		di.len = min(di.len, len);
004b68621897f0 Chao Yu           2017-04-14  1393  		di.start = start;
4e6a8d9b224f88 Jaegeuk Kim       2016-12-29  1394  	}
4e6a8d9b224f88 Jaegeuk Kim       2016-12-29  1395  
004b68621897f0 Chao Yu           2017-04-14  1396  	while (1) {
004b68621897f0 Chao Yu           2017-04-14  1397  		struct rb_node *node;
004b68621897f0 Chao Yu           2017-04-14  1398  		struct discard_cmd *tdc = NULL;
004b68621897f0 Chao Yu           2017-04-14  1399  
004b68621897f0 Chao Yu           2017-04-14  1400  		if (prev_dc) {
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1401  			di.lstart = prev_dc->di.lstart + prev_dc->di.len;
004b68621897f0 Chao Yu           2017-04-14  1402  			if (di.lstart < lstart)
004b68621897f0 Chao Yu           2017-04-14  1403  				di.lstart = lstart;
004b68621897f0 Chao Yu           2017-04-14  1404  			if (di.lstart >= end)
004b68621897f0 Chao Yu           2017-04-14  1405  				break;
004b68621897f0 Chao Yu           2017-04-14  1406  
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1407  			if (!next_dc || next_dc->di.lstart > end)
004b68621897f0 Chao Yu           2017-04-14  1408  				di.len = end - di.lstart;
004b68621897f0 Chao Yu           2017-04-14  1409  			else
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1410  				di.len = next_dc->di.lstart - di.lstart;
004b68621897f0 Chao Yu           2017-04-14  1411  			di.start = start + di.lstart - lstart;
004b68621897f0 Chao Yu           2017-04-14  1412  		}
004b68621897f0 Chao Yu           2017-04-14  1413  
004b68621897f0 Chao Yu           2017-04-14  1414  		if (!di.len)
004b68621897f0 Chao Yu           2017-04-14  1415  			goto next;
004b68621897f0 Chao Yu           2017-04-14  1416  
004b68621897f0 Chao Yu           2017-04-14  1417  		if (prev_dc && prev_dc->state == D_PREP &&
004b68621897f0 Chao Yu           2017-04-14  1418  			prev_dc->bdev == bdev &&
35ec7d57488497 Chao Yu           2018-08-06  1419  			__is_discard_back_mergeable(&di, &prev_dc->di,
35ec7d57488497 Chao Yu           2018-08-06  1420  							max_discard_blocks)) {
004b68621897f0 Chao Yu           2017-04-14  1421  			prev_dc->di.len += di.len;
d84d1cbdec6b5d Chao Yu           2017-04-18  1422  			dcc->undiscard_blks += di.len;
ba48a33ef6faa5 Chao Yu           2017-04-15  1423  			__relocate_discard_cmd(dcc, prev_dc);
004b68621897f0 Chao Yu           2017-04-14  1424  			di = prev_dc->di;
004b68621897f0 Chao Yu           2017-04-14 @1425  			tdc = prev_dc;
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1426  			goto next;
004b68621897f0 Chao Yu           2017-04-14  1427  		}
004b68621897f0 Chao Yu           2017-04-14  1428  
004b68621897f0 Chao Yu           2017-04-14  1429  		if (next_dc && next_dc->state == D_PREP &&
004b68621897f0 Chao Yu           2017-04-14  1430  			next_dc->bdev == bdev &&
35ec7d57488497 Chao Yu           2018-08-06  1431  			__is_discard_front_mergeable(&di, &next_dc->di,
35ec7d57488497 Chao Yu           2018-08-06  1432  							max_discard_blocks)) {
004b68621897f0 Chao Yu           2017-04-14  1433  			next_dc->di.lstart = di.lstart;
004b68621897f0 Chao Yu           2017-04-14  1434  			next_dc->di.len += di.len;
004b68621897f0 Chao Yu           2017-04-14  1435  			next_dc->di.start = di.start;
d84d1cbdec6b5d Chao Yu           2017-04-18  1436  			dcc->undiscard_blks += di.len;
ba48a33ef6faa5 Chao Yu           2017-04-15  1437  			__relocate_discard_cmd(dcc, next_dc);
004b68621897f0 Chao Yu           2017-04-14  1438  			if (tdc)
004b68621897f0 Chao Yu           2017-04-14  1439  				__remove_discard_cmd(sbi, tdc);
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1440  			goto next;
004b68621897f0 Chao Yu           2017-04-14  1441  		}
004b68621897f0 Chao Yu           2017-04-14  1442  
7e9775a516ff6c Jaegeuk Kim       2023-03-10  1443  		__insert_discard_cmd(sbi, bdev, di.lstart, di.start, di.len);
004b68621897f0 Chao Yu           2017-04-14  1444   next:
004b68621897f0 Chao Yu           2017-04-14  1445  		prev_dc = next_dc;
004b68621897f0 Chao Yu           2017-04-14  1446  		if (!prev_dc)
004b68621897f0 Chao Yu           2017-04-14  1447  			break;
004b68621897f0 Chao Yu           2017-04-14  1448  
004b68621897f0 Chao Yu           2017-04-14  1449  		node = rb_next(&prev_dc->rb_node);
004b68621897f0 Chao Yu           2017-04-14  1450  		next_dc = rb_entry_safe(node, struct discard_cmd, rb_node);
004b68621897f0 Chao Yu           2017-04-14  1451  	}
004b68621897f0 Chao Yu           2017-04-14  1452  }
004b68621897f0 Chao Yu           2017-04-14  1453  

:::::: The code at line 1425 was first introduced by commit
:::::: 004b68621897f06aa2817e7438469d23f4a3a284 f2fs: use rb-tree to track pending discard commands

:::::: TO: Chao Yu <yuchao0@huawei.com>
:::::: CC: Jaegeuk Kim <jaegeuk@kernel.org>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

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

only message in thread, other threads:[~2023-03-17 12:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-17 11:59 [jaegeuk-f2fs:dev-test 8/12] fs/f2fs/segment.c:1425:4: warning: Value stored to 'tdc' is never read [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.