Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: fdmanana@kernel.org
To: linux-btrfs@vger.kernel.org
Cc: josef@toxicpanda.com, Filipe Manana <fdmanana@suse.com>
Subject: [PATCH 0/2] btrfs: fix races between clone, fallocate and memory mapped writes
Date: Mon, 14 Dec 2020 09:56:40 +0000	[thread overview]
Message-ID: <cover.1607939569.git.fdmanana@suse.com> (raw)

From: Filipe Manana <fdmanana@suse.com>

For a very long time there's been a race between clone/dedupe and memory
mapped writes as well as between fallocate and memory mapped writes. For
both cases the consequence of the race is that it can makes us deadlock
when we are low on available metadata space, since clone/dedupe/fallocate
start a transaction while holding file ranges locked, and allocating the
metadata can result in the async reclaim task to flush the inodes being
used by clone/dedupe/fallocate, if a memory mapped write happened before
we locked the file ranges.

For the dedupe case, Josef's recent fix [1] ("btrfs: fix race between dedupe
and mmap") happens to fix this deadlock problem as well. The first patch
in this patchset fixes the issue for both clone and dedupe, as it's centered
on the shared extent locking function, and it is independent of Josef's fix
(works both with and without that fix).

[1] https://lore.kernel.org/linux-btrfs/afdc2109f83fff1a925d7a66a6a047d4400721d4.1607724668.git.josef@toxicpanda.com/

Filipe Manana (2):
  btrfs: fix race between cloning and memory mapped writes leading to
    deadlock
  btrfs: fix race between fallocate and memory mapped writes leading to
    deadlock

 fs/btrfs/extent_io.c    |  2 +-
 fs/btrfs/file.c         | 38 +++++---------------------------
 fs/btrfs/inode.c        |  4 ++--
 fs/btrfs/ordered-data.c | 48 ++++++++++++++++++++++++++++++++---------
 fs/btrfs/ordered-data.h |  6 +++---
 fs/btrfs/reflink.c      | 28 ++++++++++++++++++------
 6 files changed, 71 insertions(+), 55 deletions(-)

-- 
2.28.0


             reply	other threads:[~2020-12-14  9:57 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-14  9:56 fdmanana [this message]
2020-12-14  9:56 ` [PATCH 1/2] btrfs: fix race between cloning and memory mapped writes leading to deadlock fdmanana
2020-12-14  9:56 ` [PATCH 2/2] btrfs: fix race between fallocate " fdmanana
2020-12-17 15:02 ` [PATCH 0/2] btrfs: fix races between clone, fallocate and memory mapped writes David Sterba
2020-12-17 15:11   ` Filipe Manana
2020-12-17 16:10     ` David Sterba

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1607939569.git.fdmanana@suse.com \
    --to=fdmanana@kernel.org \
    --cc=fdmanana@suse.com \
    --cc=josef@toxicpanda.com \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox