Data races in ext4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I've encountered several data races while running custom test cases on ext4 (kernel 3.13.5), inside a QEMU based VM, but I'm not sure whether all of these data races are harmful.

Bellow I'm listing the data races summary, including the variable name, IP addresses, function names and source code files/line numbers. In addition, the pastbin links include snippets of the code at those locations and also include examples of racing pairs of instructions (which can be useful when there are more than two instructions racing). Several of the races reported affect either the function generic_fillattr() or the function ext4_do_update_inode(), so I'm grouping them bellow to simplify the analysis. Feel free to ask for more information in case it's needed.

I was hoping someone could have a look at these data races and let me know if they're going to be fixed.

Thanks,
Pedro


** Data races:
Variable: mapping->nrpages Addresses: c107d9f3 c110c8d7
c107d9f3 add_to_page_cache_locked /linux-3.13.5/mm/filemap.c:487
c110c8d7 ext4_writepages /linux-3.13.5/fs/ext4/inode.c:2413

Variable: raw_inode->i_size_lo  Addresses: c110abf0 c110abdb
c110abf0 ext4_isize_set /linux-3.13.5/fs/ext4/ext4.h:2395
c110abdb ext4_isize /linux-3.13.5/fs/ext4/ext4.h:2387

Variable: mapping->writeback_index      Addresses: c108320f
c108320f write_cache_pages /linux-3.13.5/mm/page-writeback.c:2012

Variable: ei->i_datasync_tid    Addresses: c110adb3
c110adb3 ext4_update_inode_fsync_trans /linux-3.13.5/fs/ext4/ext4_jbd2.h:384

Variable: ei->i_sync_tid        Addresses: c112ae80 c110ae6f
c112ae80 ext4_update_inode_fsync_trans /linux-3.13.5/fs/ext4/ext4_jbd2.h:382 c110ae6f ext4_update_inode_fsync_trans /linux-3.13.5/fs/ext4/ext4_jbd2.h:382

Variable: kaddr/link    Addresses: c10ade1a c12d40eb
c10ade1a generic_readlinkat()->page_follow_link_light()->page_getlink()->nd_terminate_link /linux-3.13.5/include/linux/namei.h:98 c12d40eb generic_readlinkat()->vfs_readlink()->strlen /linux-3.13.5/arch/x86/lib/string_32.c:168

Variable: journal->j_running_transaction Addresses: c1138ca1 c1136b02 c1136ca9
c1136ca9 jbd2_get_transaction /linux-3.13.5/fs/jbd2/transaction.c:103
c1138ca1 jbd2_journal_commit_transaction /linux-3.13.5/fs/jbd2/commit.c:539
c1136b02 start_this_handle /linux-3.13.5/fs/jbd2/transaction.c:280

Variable: inode->i_state Addresses: c10c035e c10c03cb c10c0352 c10c093a c10bffe2
c10c0352 __writeback_single_inode /linux-3.13.5/fs/fs-writeback.c:473
c10bffe2 inode_sync_complete /linux-3.13.5/fs/fs-writeback.c:217
c10c035e __writeback_single_inode /linux-3.13.5/fs/fs-writeback.c:475
c10c093a writeback_sb_inodes /linux-3.13.5/fs/fs-writeback.c:666
c10c03cb __mark_inode_dirty /linux-3.13.5/fs/fs-writeback.c:1149

Variable: raw_inode->i_size_high        Addresses: c110abf3 c110abde
c110abde ext4_isize /linux-3.13.5/fs/ext4/ext4.h:2387
c110abf3 ext4_isize_set /linux-3.13.5/fs/ext4/ext4.h:2396
http://pastebin.com/gSGUMC31


** Races involving/related to the function generic_fillattr():
Variable: inode->i_blocks Addresses: c10aa04b c10aa891 c10a9f72
c10a9f72 __inode_sub_bytes /linux-3.13.5/fs/stat.c:471
c10aa891 __inode_add_bytes /linux-3.13.5/fs/stat.c:451
c10aa04b generic_fillattr /linux-3.13.5/fs/stat.c:35

Variable: inode->i_ctime        Addresses: c10aa032 c110b231
c10aa032 generic_fillattr /linux-3.13.5/fs/stat.c:33
c110b231 ext4_current_time /linux-3.13.5/fs/ext4/inode.c:3769

Variable: inode->i_blocks Addresses: c10a9f75 c110ab50 c10aa048 c10aa894
c10a9f75 __inode_sub_bytes /linux-3.13.5/fs/stat.c:471
c110ab50 ext4_inode_blocks_set /linux-3.13.5/fs/ext4/inode.c:4238
c10aa048 generic_fillattr /linux-3.13.5/fs/stat.c:35
c10aa894 __inode_add_bytes /linux-3.13.5/fs/stat.c:451

Variable: inode->i_ctime        Addresses: c10b79e9 c110b22b c10aa02f
c110b22b ext4_current_time /linux-3.13.5/fs/ext4/inode.c:3769
c10b79e9 update_time /linux-3.13.5/fs/inode.c:1510
c10aa02f generic_fillattr /linux-3.13.5/fs/stat.c:33

Variable: inode->i_atime Addresses: c10b7f62 c10b79a9 c10aa017 c10b7fcb
c10b7f62 timespec_compare /linux-3.13.5/include/linux/time.h:35
c10b7fcb timespec_equal /linux-3.13.5/include/linux/time.h:25
c10aa017 generic_fillattr /linux-3.13.5/fs/stat.c:31
c10b79a9 update_time /linux-3.13.5/fs/inode.c:1506

Variable: inode->i_mtime        Addresses: c10b79f9 c10aa023 c110b237
c110b237 ext4_truncate /linux-3.13.5/fs/ext4/inode.c:3769
c10b79f9 update_time /linux-3.13.5/fs/inode.c:1512
c10aa023 generic_fillattr /linux-3.13.5/fs/stat.c:32
http://pastebin.com/6cHQsZJk


** Races involving/related to the function ext4_do_update_inode():
Variable: inode->i_ctime    Addresses: c110aac1 c10b79ec
c110aac1 ext4_encode_extra_time /linux-3.13.5/fs/ext4/ext4.h:729
c10b79ec update_time /linux-3.13.5/fs/inode.c:1510

Variable: i_crtime  Addresses: c110ab4a
c110ab4a ext4_encode_extra_time /linux-3.13.5/fs/ext4/ext4.h:729

Variable: ei->i_disksize        Addresses: c110c813 c110ac06
c110c813 ext4_wb_update_i_disksize /linux-3.13.5/fs/ext4/ext4.h:2476
c110ac06 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4342

Variable: raw_inode->i_gid_high Addresses: c110aa6a
c110aa6a ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4311

Variable: raw_inode->i_dtime    Addresses: c110adf2
c110adf2 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4331

Variable: i_mtime       Addresses: c110aac7
c110aac7 ext4_encode_extra_time /linux-3.13.5/fs/ext4/ext4.h:729

Variable: i_mtime       Addresses: c110aad0
c110aad0 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4325

Variable: raw_inode->i_file_acl_high    Addresses: c110abbf
c110abbf ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4336

Variable: raw_inode->i_flags   Addresses: c110adf8
c110adf8 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4332

Variable: raw_inode->i_file_acl_lo      Addresses: c110abc6
c110abc6 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4337

Variable: raw_inode->i_blocks_lo        Addresses: c110ab5e
c110ab5e ext4_inode_blocks_set /linux-3.13.5/fs/ext4/inode.c:4246

Variable: raw_inode->i_links_count      Addresses: c110aaa6
c110aaa6 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4322

Variable: raw_inode->i_mode     Addresses: c110aa52 c110aa3a c110abc9
c110aa3a ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4297
c110aa52 ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4301
c110abc9 ext4_isize /linux-3.13.5/fs/ext4/ext4.h:2386

Variable: EXT4_I(inode)->i_disksize Addresses: c110c810 c110c147 c110abcb c110c7d2
c110c810 ext4_wb_update_i_disksize /linux-3.13.5/fs/ext4/ext4.h:2476
c110abcb ext4_do_update_inode /linux-3.13.5/fs/ext4/inode.c:4338
c110c7d2 mpage_map_and_submit_extent /linux-3.13.5/fs/ext4/inode.c:2236
c110c147 ext4_da_write_end /linux-3.13.5/fs/ext4/inode.c:2758
http://pastebin.com/Sqhf1b92




--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux