Re: [PATCH v6 0/2] btrfs: Don't block system suspend during fstrim

From: Qu Wenruo
Date: Wed Sep 18 2024 - 17:35:10 EST




在 2024/9/18 06:03, Luca Stefani 写道:
Changes since v5:
* Make chunk size a define
* Remove superfluous trim_interrupted checks
after moving them to trim_no_bitmap/trim_bitmaps

Changes since v4:
* Set chunk size to 1G
* Set proper error return codes in case of interruption
* Dropped fstrim_range fixup as pulled in -next

Changes since v3:
* Went back to manual chunk size

Changes since v2:
* Use blk_alloc_discard_bio directly
* Reset ret to ERESTARTSYS

Changes since v1:
* Use bio_discard_limit to calculate chunk size
* Makes use of the split chunks

Original discussion: https://lore.kernel.org/lkml/20240822164908.4957-1-luca.stefani.ge1@xxxxxxxxx/
v1: https://lore.kernel.org/lkml/20240902114303.922472-1-luca.stefani.ge1@xxxxxxxxx/
v2: https://lore.kernel.org/lkml/20240902205828.943155-1-luca.stefani.ge1@xxxxxxxxx/
v3: https://lore.kernel.org/lkml/20240903071625.957275-4-luca.stefani.ge1@xxxxxxxxx/
v4: https://lore.kernel.org/lkml/20240916101615.116164-1-luca.stefani.ge1@xxxxxxxxx/
v5: https://lore.kernel.org/lkml/20240916125707.127118-1-luca.stefani.ge1@xxxxxxxxx/

Reviewed-by: Qu Wenruo <wqu@xxxxxxxx>

---

NB: I didn't change btrfs_discard_workfn yet to add error checks
as I don't know what semantics we should have in that case.
The work queue is always re-scheduled and created with WQ_FREEZABLE
so it should be automatically frozen. Shall I simply add some logs?

And that is for async discard, which has a much smaller discard size and iops limits.

The main part of large discard is the free extents discarding, which is already addressed by your patch correctly now.

IIRC we do not need to bother that much for it.

Thanks,
Qu


---

Luca Stefani (2):
btrfs: Split remaining space to discard in chunks
btrfs: Don't block system suspend during fstrim

fs/btrfs/extent-tree.c | 26 +++++++++++++++++++++-----
fs/btrfs/free-space-cache.c | 4 ++--
fs/btrfs/free-space-cache.h | 6 ++++++
fs/btrfs/volumes.h | 1 +
4 files changed, 30 insertions(+), 7 deletions(-)