mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 05:31:15 +00:00
btrfs: disable strict file flushes for renames and truncates
Truncates and renames are often used to replace old versions of a file with new versions. Applications often expect this to be an atomic replacement, even if they haven't done anything to make sure the new version is fully on disk. Btrfs has strict flushing in place to make sure that renaming over an old file with a new file will fully flush out the new file before allowing the transaction commit with the rename to complete. This ordering means the commit code needs to be able to lock file pages, and there are a few paths in the filesystem where we will try to end a transaction with the page lock held. It's rare, but these things can deadlock. This patch removes the ordered flushes and switches to a best effort filemap_flush like ext4 uses. It's not perfect, but it should fix the deadlocks. Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
27b9a8122f
commit
8d875f95da
8 changed files with 6 additions and 267 deletions
|
@ -84,12 +84,6 @@ struct btrfs_inode {
|
|||
*/
|
||||
struct list_head delalloc_inodes;
|
||||
|
||||
/*
|
||||
* list for tracking inodes that must be sent to disk before a
|
||||
* rename or truncate commit
|
||||
*/
|
||||
struct list_head ordered_operations;
|
||||
|
||||
/* node for the red-black tree that links inodes in subvolume root */
|
||||
struct rb_node rb_node;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue