linux/fs/btrfs
Filipe Manana dfba78dc1c btrfs: reduce the scope of the tree log mutex during transaction commit
In the transaction commit path we are acquiring the tree log mutex too
early and we have a stale comment because:

1) It mentions a function named btrfs_commit_tree_roots(), which does not
   exists anymore, it was the old name of commit_cowonly_roots(), renamed
   a very long time ago by commit 5d4f98a28c ("Btrfs: Mixed back
   reference  (FORWARD ROLLING FORMAT CHANGE)"));

2) It mentions that we need to acquire the tree log mutex at that point
   to ensure we have no running log writers. That is not correct anymore,
   for many years at least, since we are guaranteed that we do not have
   any log writers at that point simply because we have set the state of
   the transaction to TRANS_STATE_COMMIT_DOING and have waited for all
   writers to complete - meaning no one can log until we change the state
   of the transaction to TRANS_STATE_UNBLOCKED. Any attempts to join the
   transaction or start a new one will block until we do that state
   transition;

3) The comment mentions a "trans mutex" which doesn't exists since 2011,
   commit a4abeea41a ("Btrfs: kill trans_mutex") removed it;

4) The current use of the tree log mutex is to ensure proper serialization
   of super block writes - if someone started a new transaction and uses it
   for logging, it will wait for the previous transaction to write its
   super block before writing the super block when attempting to sync the
   log.

So acquire the tree log mutex only when it's absolutely needed, before
setting the transaction state to TRANS_STATE_UNBLOCKED, fix and move the
stale comment, add some assertions and new comments where appropriate.

Also, this has no effect on concurrency or performance, since the new
start of the critical section is still when the transaction is in the
state TRANS_STATE_COMMIT_DOING.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2022-01-03 15:09:44 +01:00
..
tests btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
acl.c overlayfs update for 5.15 2021-09-02 09:21:27 -07:00
async-thread.c btrfs: fix memory ordering between normal and ordered work functions 2021-11-16 16:50:23 +01:00
async-thread.h
backref.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
backref.h
block-group.c btrfs: remove spurious unlock/lock of unused_bgs_lock 2022-01-03 15:09:42 +01:00
block-group.h btrfs: fix deadlock between chunk allocation and chunk btree modifications 2021-10-26 19:08:07 +02:00
block-rsv.c
block-rsv.h
btrfs_inode.h btrfs: only copy dir index keys when logging a directory 2022-01-03 15:09:42 +01:00
check-integrity.c btrfs: check-integrity: stop storing the block device name in btrfsic_dev_state 2021-10-26 19:08:07 +02:00
check-integrity.h
compression.c for-5.16-tag 2021-11-01 12:48:25 -07:00
compression.h btrfs: determine stripe boundary at bio allocation time in btrfs_submit_compressed_write 2021-10-26 19:08:04 +02:00
ctree.c btrfs: rename btrfs_item_end_nr to btrfs_item_data_end 2022-01-03 15:09:43 +01:00
ctree.h btrfs: rename btrfs_item_end_nr to btrfs_item_data_end 2022-01-03 15:09:43 +01:00
delalloc-space.c btrfs: free exchange changeset on failures 2021-12-08 15:42:32 +01:00
delalloc-space.h
delayed-inode.c btrfs: loop only once over data sizes array when inserting an item batch 2021-10-26 19:08:03 +02:00
delayed-inode.h
delayed-ref.c btrfs: pull up qgroup checks from delayed-ref core to init time 2021-10-26 19:08:06 +02:00
delayed-ref.h btrfs: make btrfs_ref::real_root optional 2021-10-26 19:08:06 +02:00
dev-replace.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
dev-replace.h
dir-item.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
discard.c
discard.h
disk-io.c for-5.16-rc5-tag 2021-12-17 13:50:58 -08:00
disk-io.h btrfs: make btrfs_super_block size match BTRFS_SUPER_INFO_SIZE 2021-10-26 19:08:07 +02:00
export.c
export.h
extent-io-tree.h
extent-tree.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
extent_io.c btrfs: check WRITE_ERR when trying to read an extent buffer 2021-12-15 17:07:31 +01:00
extent_io.h btrfs: cleanup for extent_write_locked_range() 2021-10-26 19:08:04 +02:00
extent_map.c btrfs: rename btrfs_bio to btrfs_io_context 2021-10-26 19:08:02 +02:00
extent_map.h
file-item.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
file.c btrfs: fix deadlock due to page faults during direct IO reads and writes 2021-11-09 13:46:07 +01:00
free-space-cache.c btrfs: subpage: add bitmap for PageChecked flag 2021-10-26 19:08:03 +02:00
free-space-cache.h
free-space-tree.c btrfs: fix invalid delayed ref after subvolume creation failure 2021-12-15 17:07:33 +01:00
free-space-tree.h
inode-item.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
inode.c btrfs: make btrfs_file_extent_inline_item_len take a slot 2022-01-03 15:09:43 +01:00
ioctl.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
Kconfig
locking.c
locking.h btrfs: assert that extent buffers are write locked instead of only locked 2021-10-26 19:08:02 +02:00
lzo.c for-5.16-rc2-tag 2021-11-26 11:24:32 -08:00
Makefile btrfs: initial fsverity support 2021-08-23 13:19:09 +02:00
misc.h btrfs: use correct header for div_u64 in misc.h 2021-09-07 14:29:50 +02:00
ordered-data.c btrfs: zoned: fix double counting of split ordered extent 2021-09-07 14:30:41 +02:00
ordered-data.h
orphan.c
print-tree.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
print-tree.h
props.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
props.h
qgroup.c btrfs: fix deadlock between quota enable and other quota operations 2022-01-03 15:09:41 +01:00
qgroup.h
raid56.c btrfs: remove btrfs_raid_bio::fs_info member 2021-10-26 19:08:03 +02:00
raid56.h btrfs: remove btrfs_raid_bio::fs_info member 2021-10-26 19:08:03 +02:00
rcu-string.h
reada.c btrfs: rename btrfs_bio to btrfs_io_context 2021-10-26 19:08:02 +02:00
ref-verify.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
ref-verify.h
reflink.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
reflink.h
relocation.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
root-tree.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
scrub.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
send.c btrfs: send: remove unused type parameter to iterate_inode_ref_t 2022-01-03 15:09:44 +01:00
send.h btrfs: send: prepare for v2 protocol 2021-10-29 12:38:43 +02:00
space-info.c btrfs: do not infinite loop in data reclaim if we aborted 2021-10-26 19:08:05 +02:00
space-info.h
struct-funcs.c
subpage.c btrfs: handle page locking in btrfs_page_end_writer_lock with no writers 2021-10-26 19:08:05 +02:00
subpage.h btrfs: rework page locking in __extent_writepage() 2021-10-26 19:08:05 +02:00
super.c btrfs: add a BTRFS_FS_ERROR helper 2021-10-26 19:08:05 +02:00
sysfs.c btrfs: sysfs: convert scnprintf and snprintf to sysfs_emit 2021-10-26 19:08:07 +02:00
sysfs.h
transaction.c btrfs: reduce the scope of the tree log mutex during transaction commit 2022-01-03 15:09:44 +01:00
transaction.h
tree-checker.c btrfs: rename btrfs_item_end_nr to btrfs_item_data_end 2022-01-03 15:09:43 +01:00
tree-checker.h
tree-defrag.c
tree-log.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
tree-log.h btrfs: change error handling for btrfs_delete_*_in_log 2021-10-26 19:08:05 +02:00
tree-mod-log.c
tree-mod-log.h
ulist.c
ulist.h
uuid-tree.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
verity.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
volumes.c btrfs: consolidate device_list_mutex in prepare_sprout to its parent 2022-01-03 15:09:44 +01:00
volumes.h btrfs: use btrfs_get_dev_args_from_path in dev removal ioctls 2021-10-26 19:08:07 +02:00
xattr.c btrfs: drop the _nr from the item helpers 2022-01-03 15:09:43 +01:00
xattr.h
zlib.c Revert "btrfs: compression: drop kmap/kunmap from zlib" 2021-10-29 13:03:05 +02:00
zoned.c btrfs: zoned: clear data relocation bg on zone finish 2021-12-08 15:42:32 +01:00
zoned.h btrfs: zoned: add a dedicated data relocation block group 2021-10-26 19:08:01 +02:00
zstd.c lib: zstd: Add kernel-specific API 2021-11-08 16:55:21 -08:00