Linux Btrfs filesystem development
 help / color / mirror / Atom feed
* [PATCH 0/3] btrfs: qgroup: Fix the long existing regression of btrfs/153
@ 2020-07-02  0:14 Qu Wenruo
  2020-07-02  0:14 ` [PATCH 1/3] btrfs: Introduce extent_changeset_revert() for qgroup Qu Wenruo
                   ` (4 more replies)
  0 siblings, 5 replies; 19+ messages in thread
From: Qu Wenruo @ 2020-07-02  0:14 UTC (permalink / raw)
  To: linux-btrfs

Since commit c6887cd11149 ("Btrfs: don't do nocow check unless we have to"),
btrfs/153 always fails with early EDQUOT.

This is caused by the fact that:
- We always reserved data space for even NODATACOW buffered write
  This is mostly to improve performance, and not pratical to revert.

- Btrfs qgroup data and meta reserved space share the same limit
  So it's not ensured to return EDQUOT just for that data reservation,
  metadata reservation can also get EDQUOT, means we can't go the same
  solution as that commit.

This patchset will solve it by doing extra qgroup space flushing when
EDQUOT is hit.

This is a little like what we do in ticketing space reservation system,
but since there are very limited ways for qgroup to reclaim space,
currently it's still handled in qgroup realm, not reusing the ticketing
system yet.

By this, this patch could solve the btrfs/153 problem, while still keep
btrfs qgroup space usage under the limit.

The only cost is, when we're near qgroup limit, we will cause more dirty
inodes flush and transaction commit, much like what we do when the
metadata space is near exhausted.
So the cost should be still acceptable.

Qu Wenruo (3):
  btrfs: Introduce extent_changeset_revert() for qgroup
  btrfs: qgroup: Try to flush qgroup space when we get -EDQUOT
  Revert "btrfs: qgroup: Commit transaction in advance to reduce early
    EDQUOT"

 fs/btrfs/ctree.h       |   6 +-
 fs/btrfs/disk-io.c     |   2 +-
 fs/btrfs/extent_io.c   |  43 +++++-
 fs/btrfs/extent_io.h   |  24 +++-
 fs/btrfs/qgroup.c      | 310 ++++++++++++++++++++++++++++-------------
 fs/btrfs/transaction.c |   1 -
 fs/btrfs/transaction.h |  14 --
 7 files changed, 273 insertions(+), 127 deletions(-)

-- 
2.27.0


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2020-07-02 23:36 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-07-02  0:14 [PATCH 0/3] btrfs: qgroup: Fix the long existing regression of btrfs/153 Qu Wenruo
2020-07-02  0:14 ` [PATCH 1/3] btrfs: Introduce extent_changeset_revert() for qgroup Qu Wenruo
2020-07-02 13:40   ` Josef Bacik
2020-07-02 13:50     ` Qu Wenruo
2020-07-02 13:56       ` Josef Bacik
2020-07-02 14:07         ` Qu Wenruo
2020-07-02  0:14 ` [PATCH 2/3] btrfs: qgroup: Try to flush qgroup space when we get -EDQUOT Qu Wenruo
2020-07-02 13:43   ` Josef Bacik
2020-07-02 13:54     ` Qu Wenruo
2020-07-02 13:57       ` Josef Bacik
2020-07-02 14:19         ` Qu Wenruo
2020-07-02 14:58           ` Josef Bacik
2020-07-02 23:36             ` Qu Wenruo
2020-07-02  0:14 ` [PATCH 3/3] Revert "btrfs: qgroup: Commit transaction in advance to reduce early EDQUOT" Qu Wenruo
2020-07-02 13:11   ` David Sterba
2020-07-02 13:22 ` [PATCH 0/3] btrfs: qgroup: Fix the long existing regression of btrfs/153 David Sterba
2020-07-02 13:28 ` Josef Bacik
2020-07-02 13:41   ` David Sterba
2020-07-02 13:44     ` Josef Bacik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox