* [PATCH 0/4] btrfs: qgroup API cleanups
@ 2026-03-17 19:46 fdmanana
2026-03-17 19:47 ` [PATCH 1/4] btrfs: removed unused qgroup functions for pertrans reservation and freeing fdmanana
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: fdmanana @ 2026-03-17 19:46 UTC (permalink / raw)
To: linux-btrfs
From: Filipe Manana <fdmanana@suse.com>
Remove some unnecessary qgroup functions and exports and make the API
simpler.
Filipe Manana (4):
btrfs: removed unused qgroup functions for pertrans reservation and freeing
btrfs: collapse __btrfs_qgroup_free_meta() into btrfs_qgroup_free_meta_prealloc()
btrfs: collapse __btrfs_qgroup_reserve_meta() into btrfs_qgroup_reserve_meta_prealloc()
btrfs: unexport btrfs_qgroup_reserve_meta()
fs/btrfs/delayed-inode.c | 3 +--
fs/btrfs/qgroup.c | 27 ++++++++++++++------------
fs/btrfs/qgroup.h | 42 +++-------------------------------------
3 files changed, 19 insertions(+), 53 deletions(-)
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] btrfs: removed unused qgroup functions for pertrans reservation and freeing
2026-03-17 19:46 [PATCH 0/4] btrfs: qgroup API cleanups fdmanana
@ 2026-03-17 19:47 ` fdmanana
2026-03-17 19:47 ` [PATCH 2/4] btrfs: collapse __btrfs_qgroup_free_meta() into btrfs_qgroup_free_meta_prealloc() fdmanana
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: fdmanana @ 2026-03-17 19:47 UTC (permalink / raw)
To: linux-btrfs
From: Filipe Manana <fdmanana@suse.com>
They have no more users since commit a6496849671a ("btrfs: fix start
transaction qgroup rsv double free"), so remove them.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
fs/btrfs/qgroup.h | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h
index a979fd59a4da..419f3c4120ce 100644
--- a/fs/btrfs/qgroup.h
+++ b/fs/btrfs/qgroup.h
@@ -397,14 +397,7 @@ int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
int __btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
enum btrfs_qgroup_rsv_type type, bool enforce,
bool noflush);
-/* Reserve metadata space for pertrans and prealloc type */
-static inline int btrfs_qgroup_reserve_meta_pertrans(struct btrfs_root *root,
- int num_bytes, bool enforce)
-{
- return __btrfs_qgroup_reserve_meta(root, num_bytes,
- BTRFS_QGROUP_RSV_META_PERTRANS,
- enforce, false);
-}
+
static inline int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root,
int num_bytes, bool enforce,
bool noflush)
@@ -417,14 +410,6 @@ static inline int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root,
void __btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes,
enum btrfs_qgroup_rsv_type type);
-/* Free per-transaction meta reservation for error handling */
-static inline void btrfs_qgroup_free_meta_pertrans(struct btrfs_root *root,
- int num_bytes)
-{
- __btrfs_qgroup_free_meta(root, num_bytes,
- BTRFS_QGROUP_RSV_META_PERTRANS);
-}
-
/* Pre-allocated meta reservation can be freed at need */
static inline void btrfs_qgroup_free_meta_prealloc(struct btrfs_root *root,
int num_bytes)
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] btrfs: collapse __btrfs_qgroup_free_meta() into btrfs_qgroup_free_meta_prealloc()
2026-03-17 19:46 [PATCH 0/4] btrfs: qgroup API cleanups fdmanana
2026-03-17 19:47 ` [PATCH 1/4] btrfs: removed unused qgroup functions for pertrans reservation and freeing fdmanana
@ 2026-03-17 19:47 ` fdmanana
2026-03-17 19:47 ` [PATCH 3/4] btrfs: collapse __btrfs_qgroup_reserve_meta() into btrfs_qgroup_reserve_meta_prealloc() fdmanana
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: fdmanana @ 2026-03-17 19:47 UTC (permalink / raw)
To: linux-btrfs
From: Filipe Manana <fdmanana@suse.com>
Since __btrfs_qgroup_free_meta() is only called by
btrfs_qgroup_free_meta_prealloc(), which is a simple inline wrapper, get
rid of the later and rename __btrfs_qgroup_free_meta() to the later.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
fs/btrfs/qgroup.c | 12 +++++++-----
fs/btrfs/qgroup.h | 10 +---------
2 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 65ec45859507..8a9039fba158 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -4551,8 +4551,7 @@ void btrfs_qgroup_free_meta_all_pertrans(struct btrfs_root *root)
BTRFS_QGROUP_RSV_META_PERTRANS);
}
-void __btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes,
- enum btrfs_qgroup_rsv_type type)
+void btrfs_qgroup_free_meta_prealloc(struct btrfs_root *root, int num_bytes)
{
struct btrfs_fs_info *fs_info = root->fs_info;
@@ -4565,10 +4564,13 @@ void __btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes,
* which can lead to underflow.
* Here ensure we will only free what we really have reserved.
*/
- num_bytes = sub_root_meta_rsv(root, num_bytes, type);
+ num_bytes = sub_root_meta_rsv(root, num_bytes,
+ BTRFS_QGROUP_RSV_META_PREALLOC);
BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize));
- trace_btrfs_qgroup_meta_reserve(root, -(s64)num_bytes, type);
- btrfs_qgroup_free_refroot(fs_info, btrfs_root_id(root), num_bytes, type);
+ trace_btrfs_qgroup_meta_reserve(root, -(s64)num_bytes,
+ BTRFS_QGROUP_RSV_META_PREALLOC);
+ btrfs_qgroup_free_refroot(fs_info, btrfs_root_id(root), num_bytes,
+ BTRFS_QGROUP_RSV_META_PREALLOC);
}
static void qgroup_convert_meta(struct btrfs_fs_info *fs_info, u64 ref_root,
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h
index 419f3c4120ce..190efe3ca64b 100644
--- a/fs/btrfs/qgroup.h
+++ b/fs/btrfs/qgroup.h
@@ -407,16 +407,8 @@ static inline int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root,
enforce, noflush);
}
-void __btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes,
- enum btrfs_qgroup_rsv_type type);
-
/* Pre-allocated meta reservation can be freed at need */
-static inline void btrfs_qgroup_free_meta_prealloc(struct btrfs_root *root,
- int num_bytes)
-{
- __btrfs_qgroup_free_meta(root, num_bytes,
- BTRFS_QGROUP_RSV_META_PREALLOC);
-}
+void btrfs_qgroup_free_meta_prealloc(struct btrfs_root *root, int num_bytes);
void btrfs_qgroup_free_meta_all_pertrans(struct btrfs_root *root);
void btrfs_qgroup_convert_reserved_meta(struct btrfs_root *root, int num_bytes);
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] btrfs: collapse __btrfs_qgroup_reserve_meta() into btrfs_qgroup_reserve_meta_prealloc()
2026-03-17 19:46 [PATCH 0/4] btrfs: qgroup API cleanups fdmanana
2026-03-17 19:47 ` [PATCH 1/4] btrfs: removed unused qgroup functions for pertrans reservation and freeing fdmanana
2026-03-17 19:47 ` [PATCH 2/4] btrfs: collapse __btrfs_qgroup_free_meta() into btrfs_qgroup_free_meta_prealloc() fdmanana
@ 2026-03-17 19:47 ` fdmanana
2026-03-17 19:47 ` [PATCH 4/4] btrfs: unexport btrfs_qgroup_reserve_meta() fdmanana
2026-03-18 3:42 ` [PATCH 0/4] btrfs: qgroup API cleanups Qu Wenruo
4 siblings, 0 replies; 6+ messages in thread
From: fdmanana @ 2026-03-17 19:47 UTC (permalink / raw)
To: linux-btrfs
From: Filipe Manana <fdmanana@suse.com>
Since __btrfs_qgroup_reserve_meta() is only called by
btrfs_qgroup_reserve_meta_prealloc(), which is a simple inline wrapper,
get rid of the later and rename __btrfs_qgroup_reserve_meta() to the
later.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
fs/btrfs/qgroup.c | 11 ++++++-----
fs/btrfs/qgroup.h | 15 ++-------------
2 files changed, 8 insertions(+), 18 deletions(-)
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 8a9039fba158..702338580601 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -4516,20 +4516,21 @@ int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
return ret;
}
-int __btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
- enum btrfs_qgroup_rsv_type type, bool enforce,
- bool noflush)
+int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root, int num_bytes,
+ bool enforce, bool noflush)
{
int ret;
- ret = btrfs_qgroup_reserve_meta(root, num_bytes, type, enforce);
+ ret = btrfs_qgroup_reserve_meta(root, num_bytes,
+ BTRFS_QGROUP_RSV_META_PREALLOC, enforce);
if ((ret <= 0 && ret != -EDQUOT) || noflush)
return ret;
ret = try_flush_qgroup(root);
if (ret < 0)
return ret;
- return btrfs_qgroup_reserve_meta(root, num_bytes, type, enforce);
+ return btrfs_qgroup_reserve_meta(root, num_bytes,
+ BTRFS_QGROUP_RSV_META_PREALLOC, enforce);
}
/*
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h
index 190efe3ca64b..1c568fc9544e 100644
--- a/fs/btrfs/qgroup.h
+++ b/fs/btrfs/qgroup.h
@@ -394,19 +394,8 @@ int btrfs_qgroup_free_data(struct btrfs_inode *inode,
u64 len, u64 *freed);
int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
enum btrfs_qgroup_rsv_type type, bool enforce);
-int __btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
- enum btrfs_qgroup_rsv_type type, bool enforce,
- bool noflush);
-
-static inline int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root,
- int num_bytes, bool enforce,
- bool noflush)
-{
- return __btrfs_qgroup_reserve_meta(root, num_bytes,
- BTRFS_QGROUP_RSV_META_PREALLOC,
- enforce, noflush);
-}
-
+int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root, int num_bytes,
+ bool enforce, bool noflush);
/* Pre-allocated meta reservation can be freed at need */
void btrfs_qgroup_free_meta_prealloc(struct btrfs_root *root, int num_bytes);
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] btrfs: unexport btrfs_qgroup_reserve_meta()
2026-03-17 19:46 [PATCH 0/4] btrfs: qgroup API cleanups fdmanana
` (2 preceding siblings ...)
2026-03-17 19:47 ` [PATCH 3/4] btrfs: collapse __btrfs_qgroup_reserve_meta() into btrfs_qgroup_reserve_meta_prealloc() fdmanana
@ 2026-03-17 19:47 ` fdmanana
2026-03-18 3:42 ` [PATCH 0/4] btrfs: qgroup API cleanups Qu Wenruo
4 siblings, 0 replies; 6+ messages in thread
From: fdmanana @ 2026-03-17 19:47 UTC (permalink / raw)
To: linux-btrfs
From: Filipe Manana <fdmanana@suse.com>
There's only one caller outside qgroup.c of btrfs_qgroup_reserve_meta()
and we have btrfs_qgroup_reserve_meta_prealloc() is a wrapper around
that function. Make that caller use btrfs_qgroup_reserve_meta_prealloc()
and unexport btrfs_qgroup_reserve_meta(), simplifying the external API.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
fs/btrfs/delayed-inode.c | 3 +--
fs/btrfs/qgroup.c | 4 ++--
fs/btrfs/qgroup.h | 2 --
3 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index 56ff8afe9a22..09795439b9fb 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -596,8 +596,7 @@ static int btrfs_delayed_inode_reserve_metadata(
*/
if (!src_rsv || (!trans->bytes_reserved &&
src_rsv->type != BTRFS_BLOCK_RSV_DELALLOC)) {
- ret = btrfs_qgroup_reserve_meta(root, num_bytes,
- BTRFS_QGROUP_RSV_META_PREALLOC, true);
+ ret = btrfs_qgroup_reserve_meta_prealloc(root, num_bytes, true, true);
if (ret < 0)
return ret;
ret = btrfs_block_rsv_add(fs_info, dst_rsv, num_bytes,
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 702338580601..0bf3ebc1ffb7 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -4489,8 +4489,8 @@ static int sub_root_meta_rsv(struct btrfs_root *root, int num_bytes,
return num_bytes;
}
-int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
- enum btrfs_qgroup_rsv_type type, bool enforce)
+static int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
+ enum btrfs_qgroup_rsv_type type, bool enforce)
{
struct btrfs_fs_info *fs_info = root->fs_info;
int ret;
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h
index 1c568fc9544e..80dd2dacd56d 100644
--- a/fs/btrfs/qgroup.h
+++ b/fs/btrfs/qgroup.h
@@ -392,8 +392,6 @@ int btrfs_qgroup_release_data(struct btrfs_inode *inode, u64 start, u64 len, u64
int btrfs_qgroup_free_data(struct btrfs_inode *inode,
struct extent_changeset *reserved, u64 start,
u64 len, u64 *freed);
-int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes,
- enum btrfs_qgroup_rsv_type type, bool enforce);
int btrfs_qgroup_reserve_meta_prealloc(struct btrfs_root *root, int num_bytes,
bool enforce, bool noflush);
/* Pre-allocated meta reservation can be freed at need */
--
2.47.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/4] btrfs: qgroup API cleanups
2026-03-17 19:46 [PATCH 0/4] btrfs: qgroup API cleanups fdmanana
` (3 preceding siblings ...)
2026-03-17 19:47 ` [PATCH 4/4] btrfs: unexport btrfs_qgroup_reserve_meta() fdmanana
@ 2026-03-18 3:42 ` Qu Wenruo
4 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2026-03-18 3:42 UTC (permalink / raw)
To: fdmanana, linux-btrfs
在 2026/3/18 06:16, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
>
> Remove some unnecessary qgroup functions and exports and make the API
> simpler.
Reviewed-by: Qu Wenruo <wqu@suse.com>
Thanks,
Qu
>
> Filipe Manana (4):
> btrfs: removed unused qgroup functions for pertrans reservation and freeing
> btrfs: collapse __btrfs_qgroup_free_meta() into btrfs_qgroup_free_meta_prealloc()
> btrfs: collapse __btrfs_qgroup_reserve_meta() into btrfs_qgroup_reserve_meta_prealloc()
> btrfs: unexport btrfs_qgroup_reserve_meta()
>
> fs/btrfs/delayed-inode.c | 3 +--
> fs/btrfs/qgroup.c | 27 ++++++++++++++------------
> fs/btrfs/qgroup.h | 42 +++-------------------------------------
> 3 files changed, 19 insertions(+), 53 deletions(-)
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-03-18 3:43 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-17 19:46 [PATCH 0/4] btrfs: qgroup API cleanups fdmanana
2026-03-17 19:47 ` [PATCH 1/4] btrfs: removed unused qgroup functions for pertrans reservation and freeing fdmanana
2026-03-17 19:47 ` [PATCH 2/4] btrfs: collapse __btrfs_qgroup_free_meta() into btrfs_qgroup_free_meta_prealloc() fdmanana
2026-03-17 19:47 ` [PATCH 3/4] btrfs: collapse __btrfs_qgroup_reserve_meta() into btrfs_qgroup_reserve_meta_prealloc() fdmanana
2026-03-17 19:47 ` [PATCH 4/4] btrfs: unexport btrfs_qgroup_reserve_meta() fdmanana
2026-03-18 3:42 ` [PATCH 0/4] btrfs: qgroup API cleanups Qu Wenruo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox