linux/fs/btrfs
Filipe Manana f985078796 btrfs: add and use helpers for reading and writing last_log_commit
Currently, the last_log_commit of a root can be accessed concurrently
without any lock protection. Readers can be calling btrfs_inode_in_log()
early in a fsync call, which reads a root's last_log_commit, while a
writer can change the last_log_commit while a log tree if being synced,
at btrfs_sync_log(). Any races here should be harmless, and in the worst
case they may cause a fsync to log an inode when it's not really needed,
so nothing bad from a functional perspective.

To avoid data race warnings from tools like KCSAN and other issues such
as load and store tearing (amongst others, see [1]), create helpers to
access the last_log_commit field of a root using READ_ONCE() and
WRITE_ONCE(), and use these helpers everywhere.

[1] https://lwn.net/Articles/793253/

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2023-10-12 16:44:17 +02:00
..
tests btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
accessors.c
accessors.h btrfs: qgroup: check generation when recording simple quota delta 2023-10-12 16:44:11 +02:00
acl.c
acl.h
async-thread.c btrfs: merge ordered work callbacks in btrfs_work into one 2023-10-12 16:44:10 +02:00
async-thread.h btrfs: merge ordered work callbacks in btrfs_work into one 2023-10-12 16:44:10 +02:00
backref.c btrfs: switch btrfs_backref_cache::is_reloc to bool 2023-10-12 16:44:13 +02:00
backref.h btrfs: switch btrfs_backref_cache::is_reloc to bool 2023-10-12 16:44:13 +02:00
bio.c btrfs: merge ordered work callbacks in btrfs_work into one 2023-10-12 16:44:10 +02:00
bio.h
block-group.c btrfs: stop reserving excessive space for block group item insertions 2023-10-12 16:44:16 +02:00
block-group.h btrfs: rename add_new_free_space() to btrfs_add_new_free_space() 2023-08-21 14:52:12 +02:00
block-rsv.c btrfs: read raid stripe tree from disk 2023-10-12 16:44:09 +02:00
block-rsv.h
btrfs_inode.h btrfs: add and use helpers for reading and writing last_log_commit 2023-10-12 16:44:17 +02:00
compression.c btrfs: rename errno identifiers to error 2023-10-12 16:44:07 +02:00
compression.h
ctree.c btrfs: move btrfs_realloc_node() from ctree.c into defrag.c 2023-10-12 16:44:14 +02:00
ctree.h btrfs: add and use helpers for reading and writing last_log_commit 2023-10-12 16:44:17 +02:00
defrag.c btrfs: add specific helper for range bit test exists 2023-10-12 16:44:14 +02:00
defrag.h btrfs: move btrfs_defrag_root() to defrag.{c,h} 2023-10-12 16:44:13 +02:00
delalloc-space.c btrfs: don't arbitrarily slow down delalloc if we're committing 2023-10-12 16:44:08 +02:00
delalloc-space.h
delayed-inode.c btrfs: remove redundant root argument from btrfs_delayed_update_inode() 2023-10-12 16:44:12 +02:00
delayed-inode.h btrfs: remove redundant root argument from btrfs_delayed_update_inode() 2023-10-12 16:44:12 +02:00
delayed-ref.c btrfs: stop reserving excessive space for block group item insertions 2023-10-12 16:44:16 +02:00
delayed-ref.h btrfs: stop reserving excessive space for block group item insertions 2023-10-12 16:44:16 +02:00
dev-replace.c btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
dev-replace.h
dir-item.c btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
dir-item.h btrfs: add fscrypt related dependencies to respective headers 2023-10-12 16:44:02 +02:00
discard.c
discard.h
disk-io.c btrfs: add and use helpers for reading and writing last_log_commit 2023-10-12 16:44:17 +02:00
disk-io.h btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
export.c
export.h
extent_io.c btrfs: change test_range_bit to scan the whole range 2023-10-12 16:44:14 +02:00
extent_io.h btrfs: move extent_buffer::lock_owner to debug section 2023-10-12 16:44:05 +02:00
extent_map.c btrfs: fix incorrect splitting in btrfs_drop_extent_map_range 2023-08-18 14:38:10 +02:00
extent_map.h
extent-io-tree.c btrfs: make sure we cache next state in find_first_extent_bit() 2023-10-12 16:44:15 +02:00
extent-io-tree.h btrfs: make wait_extent_bit() static 2023-10-12 16:44:15 +02:00
extent-tree.c btrfs: track data relocation with simple quota 2023-10-12 16:44:12 +02:00
extent-tree.h btrfs: qgroup: track metadata relocation COW with simple quota 2023-10-12 16:44:12 +02:00
file-item.c btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
file-item.h btrfs: scrub: avoid unnecessary csum tree search preparing stripes 2023-08-21 14:54:48 +02:00
file.c btrfs: remove redundant root argument from btrfs_update_inode() 2023-10-12 16:44:12 +02:00
file.h
free-space-cache.c btrfs: remove redundant root argument from btrfs_update_inode() 2023-10-12 16:44:12 +02:00
free-space-cache.h
free-space-tree.c btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
free-space-tree.h
fs.c
fs.h btrfs: qgroup: check generation when recording simple quota delta 2023-10-12 16:44:11 +02:00
inode-item.c btrfs: track owning root in btrfs_ref 2023-10-12 16:44:11 +02:00
inode-item.h btrfs: add fscrypt related dependencies to respective headers 2023-10-12 16:44:02 +02:00
inode.c btrfs: open code btrfs_ordered_inode_tree in btrfs_inode 2023-10-12 16:44:16 +02:00
ioctl.c btrfs: remove redundant root argument from btrfs_update_inode() 2023-10-12 16:44:12 +02:00
ioctl.h
Kconfig btrfs: check-integrity: remove CONFIG_BTRFS_FS_CHECK_INTEGRITY option 2023-10-12 16:44:05 +02:00
locking.c btrfs: add raid stripe tree definitions 2023-10-12 16:44:09 +02:00
locking.h btrfs: do not block starts waiting on previous transaction commit 2023-09-08 14:10:49 +02:00
lru_cache.c
lru_cache.h
lzo.c
Makefile btrfs: add support for inserting raid stripe extents 2023-10-12 16:44:09 +02:00
messages.c btrfs: rename errno identifiers to error 2023-10-12 16:44:07 +02:00
messages.h btrfs: rename errno identifiers to error 2023-10-12 16:44:07 +02:00
misc.h minmax: add in_range() macro 2023-08-24 16:20:18 -07:00
ordered-data.c btrfs: open code btrfs_ordered_inode_tree in btrfs_inode 2023-10-12 16:44:16 +02:00
ordered-data.h btrfs: open code btrfs_ordered_inode_tree in btrfs_inode 2023-10-12 16:44:16 +02:00
orphan.c
orphan.h
print-tree.c btrfs: new inline ref storing owning subvol of data extents 2023-10-12 16:44:11 +02:00
print-tree.h
props.c btrfs: move btrfs_name_hash to dir-item.h 2023-10-12 16:44:02 +02:00
props.h
qgroup.c btrfs: qgroup: only set QUOTA_ENABLED when done reading qgroups 2023-10-12 16:44:12 +02:00
qgroup.h btrfs: qgroup: check generation when recording simple quota delta 2023-10-12 16:44:11 +02:00
raid56.c btrfs: scrub: avoid unnecessary csum tree search preparing stripes 2023-08-21 14:54:48 +02:00
raid56.h btrfs: raid56: remove unused BTRFS_RBIO_REBUILD_MISSING 2023-08-21 14:52:12 +02:00
raid-stripe-tree.c btrfs: tracepoints: add events for raid stripe tree 2023-10-12 16:44:10 +02:00
raid-stripe-tree.h btrfs: zoned: support RAID0/1/10 on top of raid stripe tree 2023-10-12 16:44:09 +02:00
rcu-string.h
ref-verify.c btrfs: new inline ref storing owning subvol of data extents 2023-10-12 16:44:11 +02:00
ref-verify.h
reflink.c btrfs: remove redundant root argument from btrfs_update_inode() 2023-10-12 16:44:12 +02:00
reflink.h
relocation.c btrfs: change test_range_bit to scan the whole range 2023-10-12 16:44:14 +02:00
relocation.h btrfs: relocation: constify parameters where possible 2023-10-12 16:44:13 +02:00
root-tree.c btrfs: qgroup: add new quota mode for simple quotas 2023-10-12 16:44:10 +02:00
root-tree.h btrfs: drop __must_check annotations 2023-10-12 16:44:04 +02:00
scrub.c btrfs: scrub: implement raid stripe tree support 2023-10-12 16:44:09 +02:00
scrub.h
send.c btrfs: remove btrfs_crc32c wrapper 2023-10-12 16:44:02 +02:00
send.h
space-info.c btrfs: adjust overcommit logic when very close to full 2023-10-12 16:44:16 +02:00
space-info.h btrfs: pass a space_info argument to btrfs_reserve_metadata_bytes() 2023-10-12 16:44:05 +02:00
subpage.c
subpage.h
super.c btrfs: scan but don't register device on single device filesystem 2023-10-12 16:44:07 +02:00
super.h
sysfs.c btrfs: sysfs: add simple_quota incompat feature entry 2023-10-12 16:44:10 +02:00
sysfs.h
transaction.c btrfs: stop reserving excessive space for block group item insertions 2023-10-12 16:44:16 +02:00
transaction.h btrfs: move btrfs_defrag_root() to defrag.{c,h} 2023-10-12 16:44:13 +02:00
tree-checker.c btrfs: new inline ref storing owning subvol of data extents 2023-10-12 16:44:11 +02:00
tree-checker.h
tree-log.c btrfs: add and use helpers for reading and writing last_log_commit 2023-10-12 16:44:17 +02:00
tree-log.h
tree-mod-log.c
tree-mod-log.h
ulist.c btrfs: reformat remaining kdoc style comments 2023-10-12 16:44:04 +02:00
ulist.h
uuid-tree.c btrfs: abort transaction on generation mismatch when marking eb as dirty 2023-10-12 16:44:07 +02:00
uuid-tree.h
verity.c btrfs: remove redundant root argument from btrfs_update_inode() 2023-10-12 16:44:12 +02:00
verity.h
volumes.c btrfs: support cloned-device mount capability 2023-10-12 16:44:17 +02:00
volumes.h btrfs: support cloned-device mount capability 2023-10-12 16:44:17 +02:00
xattr.c btrfs: remove redundant root argument from btrfs_update_inode() 2023-10-12 16:44:12 +02:00
xattr.h
zlib.c
zoned.c btrfs: zoned: support RAID0/1/10 on top of raid stripe tree 2023-10-12 16:44:09 +02:00
zoned.h btrfs: zoned: reserve zones for an active metadata/system block group 2023-08-21 14:52:19 +02:00
zstd.c btrfs: reformat remaining kdoc style comments 2023-10-12 16:44:04 +02:00