diff options
author | Chris Mason <clm@fb.com> | 2014-08-12 10:47:42 -0700 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-08-15 07:43:42 -0700 |
commit | 8d875f95da43c6a8f18f77869f2ef26e9594fecc (patch) | |
tree | 601416f676c0e2291bdbed359092eb284f1c32dc /fs/btrfs/transaction.h | |
parent | 27b9a8122ff71a8cadfbffb9c4f0694300464f3b (diff) | |
download | op-kernel-dev-8d875f95da43c6a8f18f77869f2ef26e9594fecc.zip op-kernel-dev-8d875f95da43c6a8f18f77869f2ef26e9594fecc.tar.gz |
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>
Diffstat (limited to 'fs/btrfs/transaction.h')
-rw-r--r-- | fs/btrfs/transaction.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/btrfs/transaction.h b/fs/btrfs/transaction.h index 7dd558e..579be51 100644 --- a/fs/btrfs/transaction.h +++ b/fs/btrfs/transaction.h @@ -55,7 +55,6 @@ struct btrfs_transaction { wait_queue_head_t writer_wait; wait_queue_head_t commit_wait; struct list_head pending_snapshots; - struct list_head ordered_operations; struct list_head pending_chunks; struct list_head switch_commits; struct btrfs_delayed_ref_root delayed_refs; |