CC: [email protected] BCC: [email protected] CC: [email protected] TO: Alexander Lobakin <[email protected]> CC: Marco Elver <[email protected]>
tree: https://github.com/alobakin/linux bitops head: 3d9705b33014389e95ff8ac2eeadd081934aa571 commit: e9cfd713a4977a015d0bec5f26abb0ad7111e202 [6/9] bitops: let optimize out non-atomic bitops on compile-time constants :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: x86_64-rhel-8.3-kselftests compiler: gcc-11 (Debian 11.3.0-3) 11.3.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: fs/ext4/ialloc.c:296 ext4_free_inode() error: we previously assumed '&(grp->bb_state)' could be null (see line 296) fs/ext4/mballoc.c:1500 ext4_mb_load_buddy_gfp() error: we previously assumed '&(grp->bb_state)' could be null (see line 1500) fs/ext4/mballoc.c:1792 mb_free_blocks() error: we previously assumed '&((e4b->bd_info)->bb_state)' could be null (see line 1792) fs/ext4/mballoc.c:2211 ext4_mb_find_by_goal() error: we previously assumed '&((e4b->bd_info)->bb_state)' could be null (see line 2211) fs/ext4/mballoc.c:2426 ext4_mb_good_group() error: we previously assumed '&(grp->bb_state)' could be null (see line 2426) fs/ext4/mballoc.c:2882 ext4_mb_seq_groups_show() error: we previously assumed '&(grinfo->bb_state)' could be null (see line 2882) fs/ext4/mballoc.c:6529 ext4_trim_fs() error: we previously assumed '&(grp->bb_state)' could be null (see line 6529) Old smatch warnings: include/asm-generic/bitops/generic-non-atomic.h:158 const_test_bit() warn: ignoring unreachable code. include/asm-generic/bitops/instrumented-non-atomic.h:141 _test_bit() warn: ignoring unreachable code. include/asm-generic/bitops/generic-non-atomic.h:98 generic___test_and_clear_bit() warn: ignoring unreachable code. include/asm-generic/bitops/instrumented-non-atomic.h:114 ___test_and_clear_bit() warn: ignoring unreachable code. include/asm-generic/bitops/generic-non-atomic.h:78 generic___test_and_set_bit() warn: ignoring unreachable code. include/asm-generic/bitops/instrumented-non-atomic.h:99 ___test_and_set_bit() warn: ignoring unreachable code. include/asm-generic/bitops/instrumented-non-atomic.h:141 _test_bit() warn: ignoring unreachable code. include/asm-generic/bitops/generic-non-atomic.h:158 const_test_bit() warn: ignoring unreachable code. include/asm-generic/bitops/generic-non-atomic.h:98 generic___test_and_clear_bit() warn: ignoring unreachable code. include/asm-generic/bitops/instrumented-non-atomic.h:114 ___test_and_clear_bit() warn: ignoring unreachable code. fs/ext4/mballoc.c:3994 ext4_mb_mark_bb() error: uninitialized symbol 'err'. fs/ext4/mballoc.c:4625 ext4_mb_put_pa() warn: inconsistent returns '&pa->pa_lock'. vim +296 fs/ext4/ialloc.c ac27a0ec112a08 Dave Kleikamp 2006-10-11 218 ac27a0ec112a08 Dave Kleikamp 2006-10-11 219 /* ac27a0ec112a08 Dave Kleikamp 2006-10-11 220 * NOTE! When we get the inode, we're the only people ac27a0ec112a08 Dave Kleikamp 2006-10-11 221 * that have access to it, and as such there are no ac27a0ec112a08 Dave Kleikamp 2006-10-11 222 * race conditions we have to worry about. The inode ac27a0ec112a08 Dave Kleikamp 2006-10-11 223 * is not on the hash-lists, and it cannot be reached ac27a0ec112a08 Dave Kleikamp 2006-10-11 224 * through the filesystem because the directory entry ac27a0ec112a08 Dave Kleikamp 2006-10-11 225 * has been deleted earlier. ac27a0ec112a08 Dave Kleikamp 2006-10-11 226 * ac27a0ec112a08 Dave Kleikamp 2006-10-11 227 * HOWEVER: we must make sure that we get no aliases, ac27a0ec112a08 Dave Kleikamp 2006-10-11 228 * which means that we have to call "clear_inode()" ac27a0ec112a08 Dave Kleikamp 2006-10-11 229 * _before_ we mark the inode not in use in the inode ac27a0ec112a08 Dave Kleikamp 2006-10-11 230 * bitmaps. Otherwise a newly created file might use ac27a0ec112a08 Dave Kleikamp 2006-10-11 231 * the same inode number (not actually the same pointer ac27a0ec112a08 Dave Kleikamp 2006-10-11 232 * though), and then we'd have two inodes sharing the ac27a0ec112a08 Dave Kleikamp 2006-10-11 233 * same inode number and space on the harddisk. ac27a0ec112a08 Dave Kleikamp 2006-10-11 234 */ 617ba13b31fbf5 Mingming Cao 2006-10-11 235 void ext4_free_inode(handle_t *handle, struct inode *inode) ac27a0ec112a08 Dave Kleikamp 2006-10-11 236 { ac27a0ec112a08 Dave Kleikamp 2006-10-11 237 struct super_block *sb = inode->i_sb; ac27a0ec112a08 Dave Kleikamp 2006-10-11 238 int is_directory; ac27a0ec112a08 Dave Kleikamp 2006-10-11 239 unsigned long ino; ac27a0ec112a08 Dave Kleikamp 2006-10-11 240 struct buffer_head *bitmap_bh = NULL; ac27a0ec112a08 Dave Kleikamp 2006-10-11 241 struct buffer_head *bh2; fd2d42912f9f09 Avantika Mathur 2008-01-28 242 ext4_group_t block_group; ac27a0ec112a08 Dave Kleikamp 2006-10-11 243 unsigned long bit; 617ba13b31fbf5 Mingming Cao 2006-10-11 244 struct ext4_group_desc *gdp; 617ba13b31fbf5 Mingming Cao 2006-10-11 245 struct ext4_super_block *es; 617ba13b31fbf5 Mingming Cao 2006-10-11 246 struct ext4_sb_info *sbi; 7ce9d5d1f3c873 Eric Sandeen 2009-03-04 247 int fatal = 0, err, count, cleared; 87a39389be3e3b Darrick J. Wong 2013-08-28 248 struct ext4_group_info *grp; ac27a0ec112a08 Dave Kleikamp 2006-10-11 249 92b9781658dba2 Theodore Ts'o 2012-03-19 250 if (!sb) { 92b9781658dba2 Theodore Ts'o 2012-03-19 251 printk(KERN_ERR "EXT4-fs: %s:%d: inode on " 92b9781658dba2 Theodore Ts'o 2012-03-19 252 "nonexistent device\n", __func__, __LINE__); 92b9781658dba2 Theodore Ts'o 2012-03-19 253 return; 92b9781658dba2 Theodore Ts'o 2012-03-19 254 } ac27a0ec112a08 Dave Kleikamp 2006-10-11 255 if (atomic_read(&inode->i_count) > 1) { 92b9781658dba2 Theodore Ts'o 2012-03-19 256 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: count=%d", 92b9781658dba2 Theodore Ts'o 2012-03-19 257 __func__, __LINE__, inode->i_ino, ac27a0ec112a08 Dave Kleikamp 2006-10-11 258 atomic_read(&inode->i_count)); ac27a0ec112a08 Dave Kleikamp 2006-10-11 259 return; ac27a0ec112a08 Dave Kleikamp 2006-10-11 260 } ac27a0ec112a08 Dave Kleikamp 2006-10-11 261 if (inode->i_nlink) { 92b9781658dba2 Theodore Ts'o 2012-03-19 262 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: nlink=%d\n", 92b9781658dba2 Theodore Ts'o 2012-03-19 263 __func__, __LINE__, inode->i_ino, inode->i_nlink); ac27a0ec112a08 Dave Kleikamp 2006-10-11 264 return; ac27a0ec112a08 Dave Kleikamp 2006-10-11 265 } 617ba13b31fbf5 Mingming Cao 2006-10-11 266 sbi = EXT4_SB(sb); ac27a0ec112a08 Dave Kleikamp 2006-10-11 267 ac27a0ec112a08 Dave Kleikamp 2006-10-11 268 ino = inode->i_ino; 617ba13b31fbf5 Mingming Cao 2006-10-11 269 ext4_debug("freeing inode %lu\n", ino); 9bffad1ed2a003 Theodore Ts'o 2009-06-17 270 trace_ext4_free_inode(inode); ac27a0ec112a08 Dave Kleikamp 2006-10-11 271 871a293155a245 Christoph Hellwig 2010-03-03 272 dquot_initialize(inode); 63936ddaa16b94 Christoph Hellwig 2010-03-03 273 dquot_free_inode(inode); ac27a0ec112a08 Dave Kleikamp 2006-10-11 274 ac27a0ec112a08 Dave Kleikamp 2006-10-11 275 is_directory = S_ISDIR(inode->i_mode); ac27a0ec112a08 Dave Kleikamp 2006-10-11 276 ac27a0ec112a08 Dave Kleikamp 2006-10-11 277 /* Do this BEFORE marking the inode not in use or returning an error */ 0930fcc1ee2f0a Al Viro 2010-06-07 278 ext4_clear_inode(inode); ac27a0ec112a08 Dave Kleikamp 2006-10-11 279 49598e04b5a1c3 Jun Piao 2018-01-11 280 es = sbi->s_es; 617ba13b31fbf5 Mingming Cao 2006-10-11 281 if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { 12062dddda4509 Eric Sandeen 2010-02-15 282 ext4_error(sb, "reserved or nonexistent inode %lu", ino); ac27a0ec112a08 Dave Kleikamp 2006-10-11 283 goto error_return; ac27a0ec112a08 Dave Kleikamp 2006-10-11 284 } 617ba13b31fbf5 Mingming Cao 2006-10-11 285 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); 617ba13b31fbf5 Mingming Cao 2006-10-11 286 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); e29d1cde63be0b Eric Sandeen 2008-08-02 287 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); 87a39389be3e3b Darrick J. Wong 2013-08-28 288 /* Don't bother if the inode bitmap is corrupt. */ 9008a58e5dcee0 Darrick J. Wong 2015-10-17 289 if (IS_ERR(bitmap_bh)) { 9008a58e5dcee0 Darrick J. Wong 2015-10-17 290 fatal = PTR_ERR(bitmap_bh); 9008a58e5dcee0 Darrick J. Wong 2015-10-17 291 bitmap_bh = NULL; 9008a58e5dcee0 Darrick J. Wong 2015-10-17 292 goto error_return; 9008a58e5dcee0 Darrick J. Wong 2015-10-17 293 } 8016e29f4362e2 Harshad Shirwadkar 2020-10-15 294 if (!(sbi->s_mount_state & EXT4_FC_REPLAY)) { 8016e29f4362e2 Harshad Shirwadkar 2020-10-15 295 grp = ext4_get_group_info(sb, block_group); 9008a58e5dcee0 Darrick J. Wong 2015-10-17 @296 if (unlikely(EXT4_MB_GRP_IBITMAP_CORRUPT(grp))) { 9008a58e5dcee0 Darrick J. Wong 2015-10-17 297 fatal = -EFSCORRUPTED; ac27a0ec112a08 Dave Kleikamp 2006-10-11 298 goto error_return; 9008a58e5dcee0 Darrick J. Wong 2015-10-17 299 } 8016e29f4362e2 Harshad Shirwadkar 2020-10-15 300 } ac27a0ec112a08 Dave Kleikamp 2006-10-11 301 ac27a0ec112a08 Dave Kleikamp 2006-10-11 302 BUFFER_TRACE(bitmap_bh, "get_write_access"); 188c299e2a26cc Jan Kara 2021-08-16 303 fatal = ext4_journal_get_write_access(handle, sb, bitmap_bh, 188c299e2a26cc Jan Kara 2021-08-16 304 EXT4_JTR_NONE); ac27a0ec112a08 Dave Kleikamp 2006-10-11 305 if (fatal) ac27a0ec112a08 Dave Kleikamp 2006-10-11 306 goto error_return; ac27a0ec112a08 Dave Kleikamp 2006-10-11 307 d17413c08cd2b1 Dmitry Monakhov 2010-05-16 308 fatal = -ESRCH; 617ba13b31fbf5 Mingming Cao 2006-10-11 309 gdp = ext4_get_group_desc(sb, block_group, &bh2); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 310 if (gdp) { ac27a0ec112a08 Dave Kleikamp 2006-10-11 311 BUFFER_TRACE(bh2, "get_write_access"); 188c299e2a26cc Jan Kara 2021-08-16 312 fatal = ext4_journal_get_write_access(handle, sb, bh2, 188c299e2a26cc Jan Kara 2021-08-16 313 EXT4_JTR_NONE); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 314 } 955ce5f5be67df Aneesh Kumar K.V 2009-05-02 315 ext4_lock_group(sb, block_group); 597d508c17a6dc Akinobu Mita 2011-12-28 316 cleared = ext4_test_and_clear_bit(bit, bitmap_bh->b_data); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 317 if (fatal || !cleared) { d17413c08cd2b1 Dmitry Monakhov 2010-05-16 318 ext4_unlock_group(sb, block_group); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 319 goto out; d17413c08cd2b1 Dmitry Monakhov 2010-05-16 320 } d17413c08cd2b1 Dmitry Monakhov 2010-05-16 321 560671a0d3c9ad Aneesh Kumar K.V 2009-01-05 322 count = ext4_free_inodes_count(sb, gdp) + 1; 560671a0d3c9ad Aneesh Kumar K.V 2009-01-05 323 ext4_free_inodes_set(sb, gdp, count); 560671a0d3c9ad Aneesh Kumar K.V 2009-01-05 324 if (is_directory) { 560671a0d3c9ad Aneesh Kumar K.V 2009-01-05 325 count = ext4_used_dirs_count(sb, gdp) - 1; 560671a0d3c9ad Aneesh Kumar K.V 2009-01-05 326 ext4_used_dirs_set(sb, gdp, count); b45f189a19b38e Ritesh Harjani 2021-04-29 327 if (percpu_counter_initialized(&sbi->s_dirs_counter)) d17413c08cd2b1 Dmitry Monakhov 2010-05-16 328 percpu_counter_dec(&sbi->s_dirs_counter); 560671a0d3c9ad Aneesh Kumar K.V 2009-01-05 329 } 41a246d1ff75a9 Darrick J. Wong 2012-04-29 330 ext4_inode_bitmap_csum_set(sb, block_group, gdp, bitmap_bh, 41a246d1ff75a9 Darrick J. Wong 2012-04-29 331 EXT4_INODES_PER_GROUP(sb) / 8); feb0ab32a57e4e Darrick J. Wong 2012-04-29 332 ext4_group_desc_csum_set(sb, block_group, gdp); 955ce5f5be67df Aneesh Kumar K.V 2009-05-02 333 ext4_unlock_group(sb, block_group); ac27a0ec112a08 Dave Kleikamp 2006-10-11 334 b45f189a19b38e Ritesh Harjani 2021-04-29 335 if (percpu_counter_initialized(&sbi->s_freeinodes_counter)) d17413c08cd2b1 Dmitry Monakhov 2010-05-16 336 percpu_counter_inc(&sbi->s_freeinodes_counter); 772cb7c83ba256 Jose R. Santos 2008-07-11 337 if (sbi->s_log_groups_per_flex) { 7c990728b99ed6 Suraj Jitindar Singh 2020-02-18 338 struct flex_groups *fg; 9f24e4208f7ee2 Theodore Ts'o 2009-03-04 339 7c990728b99ed6 Suraj Jitindar Singh 2020-02-18 340 fg = sbi_array_rcu_deref(sbi, s_flex_groups, 7c990728b99ed6 Suraj Jitindar Singh 2020-02-18 341 ext4_flex_group(sbi, block_group)); 7c990728b99ed6 Suraj Jitindar Singh 2020-02-18 342 atomic_inc(&fg->free_inodes); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 343 if (is_directory) 7c990728b99ed6 Suraj Jitindar Singh 2020-02-18 344 atomic_dec(&fg->used_dirs); ac27a0ec112a08 Dave Kleikamp 2006-10-11 345 } 0390131ba84fd3 Frank Mayhar 2009-01-07 346 BUFFER_TRACE(bh2, "call ext4_handle_dirty_metadata"); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 347 fatal = ext4_handle_dirty_metadata(handle, NULL, bh2); d17413c08cd2b1 Dmitry Monakhov 2010-05-16 348 out: d17413c08cd2b1 Dmitry Monakhov 2010-05-16 349 if (cleared) { 0390131ba84fd3 Frank Mayhar 2009-01-07 350 BUFFER_TRACE(bitmap_bh, "call ext4_handle_dirty_metadata"); 0390131ba84fd3 Frank Mayhar 2009-01-07 351 err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); ac27a0ec112a08 Dave Kleikamp 2006-10-11 352 if (!fatal) ac27a0ec112a08 Dave Kleikamp 2006-10-11 353 fatal = err; 87a39389be3e3b Darrick J. Wong 2013-08-28 354 } else { d17413c08cd2b1 Dmitry Monakhov 2010-05-16 355 ext4_error(sb, "bit already cleared for inode %lu", ino); db79e6d1fb1f71 Wang Shilong 2018-05-12 356 ext4_mark_group_bitmap_corrupted(sb, block_group, db79e6d1fb1f71 Wang Shilong 2018-05-12 357 EXT4_GROUP_INFO_IBITMAP_CORRUPT); 87a39389be3e3b Darrick J. Wong 2013-08-28 358 } d17413c08cd2b1 Dmitry Monakhov 2010-05-16 359 ac27a0ec112a08 Dave Kleikamp 2006-10-11 360 error_return: ac27a0ec112a08 Dave Kleikamp 2006-10-11 361 brelse(bitmap_bh); 617ba13b31fbf5 Mingming Cao 2006-10-11 362 ext4_std_error(sb, fatal); ac27a0ec112a08 Dave Kleikamp 2006-10-11 363 } ac27a0ec112a08 Dave Kleikamp 2006-10-11 364 :::::: The code at line 296 was first introduced by commit :::::: 9008a58e5dcee014f5de69d154e2620870f9224e ext4: make the bitmap read routines return real error codes :::::: TO: Darrick J. Wong <[email protected]> :::::: CC: Theodore Ts'o <[email protected]> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
