Linux Btrfs filesystem development
 help / color / mirror / Atom feed
* [PATCH 0/3] btrfs: qgroup fixes and a cleanup
@ 2025-07-01 15:42 fdmanana
  2025-07-01 15:42 ` [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations fdmanana
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: fdmanana @ 2025-07-01 15:42 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

A couple fixes and a cleanup, details in the change logs.

Filipe Manana (3):
  btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations
  btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled
  btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls

 fs/btrfs/ioctl.c       | 24 ++++--------------------
 fs/btrfs/qgroup.c      | 10 +++++-----
 fs/btrfs/transaction.c |  6 ++++--
 3 files changed, 13 insertions(+), 27 deletions(-)

-- 
2.47.2


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

* [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations
  2025-07-01 15:42 [PATCH 0/3] btrfs: qgroup fixes and a cleanup fdmanana
@ 2025-07-01 15:42 ` fdmanana
  2025-07-01 22:15   ` Qu Wenruo
  2025-07-01 15:42 ` [PATCH 2/3] btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled fdmanana
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: fdmanana @ 2025-07-01 15:42 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

Before waiting for the rescan worker to finish and flushing reservations,
we clear the BTRFS_FS_QUOTA_ENABLED flag from fs_info. If we fail flushing
reservations we leave with the flag not set which is not correct since
quotas are still enabled - we must set back the flag on error paths, such
as when we fail to start a transaction, except for error paths that abort
a transaction. The reservation flushing happens very early before we do
any operation that actually disables quotas and before we start a
transaction, so set back BTRFS_FS_QUOTA_ENABLED if it fails.

Fixes: af0e2aab3b70 ("btrfs: qgroup: flush reservations during quota disable")
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/qgroup.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 42d3cfb84318..eb1bb57dee7d 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -1334,11 +1334,14 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)
 
 	/*
 	 * We have nothing held here and no trans handle, just return the error
-	 * if there is one.
+	 * if there is one and set back the quota enabled bit since we didn't
+	 * actually disable quotas.
 	 */
 	ret = flush_reservations(fs_info);
-	if (ret)
+	if (ret) {
+		set_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
 		return ret;
+	}
 
 	/*
 	 * 1 For the root item
-- 
2.47.2


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

* [PATCH 2/3] btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled
  2025-07-01 15:42 [PATCH 0/3] btrfs: qgroup fixes and a cleanup fdmanana
  2025-07-01 15:42 ` [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations fdmanana
@ 2025-07-01 15:42 ` fdmanana
  2025-07-01 22:22   ` Qu Wenruo
  2025-07-01 15:42 ` [PATCH 3/3] btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls fdmanana
  2025-07-01 16:20 ` [PATCH 0/3] btrfs: qgroup fixes and a cleanup David Sterba
  3 siblings, 1 reply; 8+ messages in thread
From: fdmanana @ 2025-07-01 15:42 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

When quotas are disabled qgroup ioctls are supposed to return -ENOTCONN,
but the qgroup create ioctl stopped doing that when it races with a quota
disable operation, returning 0 instead. This change of behaviour happened
in commit 6ed05643ddb1 ("btrfs: create qgroup earlier in snapshot
creation").

The issue happens as follows:

1) Task A enters btrfs_ioctl_qgroup_create(), qgroups are enabled and so
   qgroup_enabled() returns true since fs_info->quota_root is not NULL;

2) Task B enters btrfs_ioctl_quota_ctl() -> btrfs_quota_disable() and
   disables qgroups, so now fs_info->quota_root is NULL;

3) Task A enters btrfs_create_qgroup() and calls btrfs_qgroup_mode(),
   which returns BTRFS_QGROUP_MODE_DISABLED since quotas are disabled,
   and then btrfs_create_qgroup() returns 0 to the caller, which makes
   the ioctl return 0 instead of -ENOTCONN.

   The check for fs_info->quota_root and returning -ENOTCONN if it's NULL
   is made only after the call btrfs_qgroup_mode().

Fix this by moving the check for disabled quotas with btrfs_qgroup_mode()
into transaction.c:create_pending_snapshot(), so that we don't abort the
transaction if btrfs_create_qgroup() returns -ENOTCONN and quotas are
disabled.

Fixes: 6ed05643ddb1 ("btrfs: create qgroup earlier in snapshot creation")
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/qgroup.c      | 3 ---
 fs/btrfs/transaction.c | 6 ++++--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index eb1bb57dee7d..ae9bc7c71a34 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -1662,9 +1662,6 @@ int btrfs_create_qgroup(struct btrfs_trans_handle *trans, u64 qgroupid)
 	struct btrfs_qgroup *prealloc = NULL;
 	int ret = 0;
 
-	if (btrfs_qgroup_mode(fs_info) == BTRFS_QGROUP_MODE_DISABLED)
-		return 0;
-
 	mutex_lock(&fs_info->qgroup_ioctl_lock);
 	if (!fs_info->quota_root) {
 		ret = -ENOTCONN;
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 2e07c90be5cd..c5c0d9cf1a80 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -1735,8 +1735,10 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
 
 	ret = btrfs_create_qgroup(trans, objectid);
 	if (ret && ret != -EEXIST) {
-		btrfs_abort_transaction(trans, ret);
-		goto fail;
+		if (ret != -ENOTCONN || btrfs_qgroup_enabled(fs_info)) {
+			btrfs_abort_transaction(trans, ret);
+			goto fail;
+		}
 	}
 
 	/*
-- 
2.47.2


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

* [PATCH 3/3] btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls
  2025-07-01 15:42 [PATCH 0/3] btrfs: qgroup fixes and a cleanup fdmanana
  2025-07-01 15:42 ` [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations fdmanana
  2025-07-01 15:42 ` [PATCH 2/3] btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled fdmanana
@ 2025-07-01 15:42 ` fdmanana
  2025-07-01 22:28   ` Qu Wenruo
  2025-07-01 16:20 ` [PATCH 0/3] btrfs: qgroup fixes and a cleanup David Sterba
  3 siblings, 1 reply; 8+ messages in thread
From: fdmanana @ 2025-07-01 15:42 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

We have a publicly exported btrfs_qgroup_enabled() and an ioctl.c private
qgroup_enabled() helper. Both of these test if qgroups are enabled, the
first check if the flag BTRFS_FS_QUOTA_ENABLED is set in fs_info->flags
while the second checks if fs_info->quota_root is not NULL while holding
the mutex fs_info->qgroup_ioctl_lock.

We can get away with the private ioctl.c:qgroup_enabled(), as all entry
points into the qgroup code check if fs_info->quota_root is NULL or not
while holding the mutex fs_info->qgroup_ioctl_lock, and returning the
error -ENOTCONN in case it's NULL.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/ioctl.c | 24 ++++--------------------
 1 file changed, 4 insertions(+), 20 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 3621ed2eacd1..3c4619375bc9 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3714,22 +3714,6 @@ static long btrfs_ioctl_quota_ctl(struct file *file, void __user *arg)
 	return ret;
 }
 
-/*
- * Quick check for ioctl handlers if quotas are enabled. Proper locking must be
- * done before any operations.
- */
-static bool qgroup_enabled(struct btrfs_fs_info *fs_info)
-{
-	bool ret = true;
-
-	mutex_lock(&fs_info->qgroup_ioctl_lock);
-	if (!fs_info->quota_root)
-		ret = false;
-	mutex_unlock(&fs_info->qgroup_ioctl_lock);
-
-	return ret;
-}
-
 static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg)
 {
 	struct inode *inode = file_inode(file);
@@ -3744,7 +3728,7 @@ static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg)
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
 
-	if (!qgroup_enabled(root->fs_info))
+	if (!btrfs_qgroup_enabled(fs_info))
 		return -ENOTCONN;
 
 	ret = mnt_want_write_file(file);
@@ -3814,7 +3798,7 @@ static long btrfs_ioctl_qgroup_create(struct file *file, void __user *arg)
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
 
-	if (!qgroup_enabled(root->fs_info))
+	if (!btrfs_qgroup_enabled(root->fs_info))
 		return -ENOTCONN;
 
 	ret = mnt_want_write_file(file);
@@ -3873,7 +3857,7 @@ static long btrfs_ioctl_qgroup_limit(struct file *file, void __user *arg)
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
 
-	if (!qgroup_enabled(root->fs_info))
+	if (!btrfs_qgroup_enabled(root->fs_info))
 		return -ENOTCONN;
 
 	ret = mnt_want_write_file(file);
@@ -3921,7 +3905,7 @@ static long btrfs_ioctl_quota_rescan(struct file *file, void __user *arg)
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
 
-	if (!qgroup_enabled(fs_info))
+	if (!btrfs_qgroup_enabled(fs_info))
 		return -ENOTCONN;
 
 	ret = mnt_want_write_file(file);
-- 
2.47.2


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

* Re: [PATCH 0/3] btrfs: qgroup fixes and a cleanup
  2025-07-01 15:42 [PATCH 0/3] btrfs: qgroup fixes and a cleanup fdmanana
                   ` (2 preceding siblings ...)
  2025-07-01 15:42 ` [PATCH 3/3] btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls fdmanana
@ 2025-07-01 16:20 ` David Sterba
  3 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2025-07-01 16:20 UTC (permalink / raw)
  To: fdmanana; +Cc: linux-btrfs

On Tue, Jul 01, 2025 at 04:42:19PM +0100, fdmanana@kernel.org wrote:
> From: Filipe Manana <fdmanana@suse.com>
> 
> A couple fixes and a cleanup, details in the change logs.
> 
> Filipe Manana (3):
>   btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations
>   btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled
>   btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls

Reviewed-by: David Sterba <dsterba@suse.com>

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

* Re: [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations
  2025-07-01 15:42 ` [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations fdmanana
@ 2025-07-01 22:15   ` Qu Wenruo
  0 siblings, 0 replies; 8+ messages in thread
From: Qu Wenruo @ 2025-07-01 22:15 UTC (permalink / raw)
  To: fdmanana, linux-btrfs



在 2025/7/2 01:12, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
> 
> Before waiting for the rescan worker to finish and flushing reservations,
> we clear the BTRFS_FS_QUOTA_ENABLED flag from fs_info. If we fail flushing
> reservations we leave with the flag not set which is not correct since
> quotas are still enabled - we must set back the flag on error paths, such
> as when we fail to start a transaction, except for error paths that abort
> a transaction. The reservation flushing happens very early before we do
> any operation that actually disables quotas and before we start a
> transaction, so set back BTRFS_FS_QUOTA_ENABLED if it fails.
> 
> Fixes: af0e2aab3b70 ("btrfs: qgroup: flush reservations during quota disable")
> Signed-off-by: Filipe Manana <fdmanana@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

I initially thought it will be a little racy when setting/clearing the 
ENABLED flag without qgroup_ioctl_mutex, but since we're already holding 
subvol_sem() for both enable and disable, it should be fine.

Thanks,
Qu

> ---
>   fs/btrfs/qgroup.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
> index 42d3cfb84318..eb1bb57dee7d 100644
> --- a/fs/btrfs/qgroup.c
> +++ b/fs/btrfs/qgroup.c
> @@ -1334,11 +1334,14 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)
>   
>   	/*
>   	 * We have nothing held here and no trans handle, just return the error
> -	 * if there is one.
> +	 * if there is one and set back the quota enabled bit since we didn't
> +	 * actually disable quotas.
>   	 */
>   	ret = flush_reservations(fs_info);
> -	if (ret)
> +	if (ret) {
> +		set_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
>   		return ret;
> +	}
>   
>   	/*
>   	 * 1 For the root item


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

* Re: [PATCH 2/3] btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled
  2025-07-01 15:42 ` [PATCH 2/3] btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled fdmanana
@ 2025-07-01 22:22   ` Qu Wenruo
  0 siblings, 0 replies; 8+ messages in thread
From: Qu Wenruo @ 2025-07-01 22:22 UTC (permalink / raw)
  To: fdmanana, linux-btrfs



在 2025/7/2 01:12, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
> 
> When quotas are disabled qgroup ioctls are supposed to return -ENOTCONN,
> but the qgroup create ioctl stopped doing that when it races with a quota
> disable operation, returning 0 instead. This change of behaviour happened
> in commit 6ed05643ddb1 ("btrfs: create qgroup earlier in snapshot
> creation").
> 
> The issue happens as follows:
> 
> 1) Task A enters btrfs_ioctl_qgroup_create(), qgroups are enabled and so
>     qgroup_enabled() returns true since fs_info->quota_root is not NULL;
> 
> 2) Task B enters btrfs_ioctl_quota_ctl() -> btrfs_quota_disable() and
>     disables qgroups, so now fs_info->quota_root is NULL;
> 
> 3) Task A enters btrfs_create_qgroup() and calls btrfs_qgroup_mode(),
>     which returns BTRFS_QGROUP_MODE_DISABLED since quotas are disabled,
>     and then btrfs_create_qgroup() returns 0 to the caller, which makes
>     the ioctl return 0 instead of -ENOTCONN.
> 
>     The check for fs_info->quota_root and returning -ENOTCONN if it's NULL
>     is made only after the call btrfs_qgroup_mode().
> 
> Fix this by moving the check for disabled quotas with btrfs_qgroup_mode()
> into transaction.c:create_pending_snapshot(), so that we don't abort the
> transaction if btrfs_create_qgroup() returns -ENOTCONN and quotas are
> disabled.
> 
> Fixes: 6ed05643ddb1 ("btrfs: create qgroup earlier in snapshot creation")
> Signed-off-by: Filipe Manana <fdmanana@suse.com>

Since create_pending_snapshot() is called during 
btrfs_commit_transaction(), we're safe from a btrfs_quota_enable() call 
as it requires a trans handle.

So there will not be a race between create_pending_snapshot() and 
btrfs_quota_enable().

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu


> ---
>   fs/btrfs/qgroup.c      | 3 ---
>   fs/btrfs/transaction.c | 6 ++++--
>   2 files changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
> index eb1bb57dee7d..ae9bc7c71a34 100644
> --- a/fs/btrfs/qgroup.c
> +++ b/fs/btrfs/qgroup.c
> @@ -1662,9 +1662,6 @@ int btrfs_create_qgroup(struct btrfs_trans_handle *trans, u64 qgroupid)
>   	struct btrfs_qgroup *prealloc = NULL;
>   	int ret = 0;
>   
> -	if (btrfs_qgroup_mode(fs_info) == BTRFS_QGROUP_MODE_DISABLED)
> -		return 0;
> -
>   	mutex_lock(&fs_info->qgroup_ioctl_lock);
>   	if (!fs_info->quota_root) {
>   		ret = -ENOTCONN;
> diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
> index 2e07c90be5cd..c5c0d9cf1a80 100644
> --- a/fs/btrfs/transaction.c
> +++ b/fs/btrfs/transaction.c
> @@ -1735,8 +1735,10 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
>   
>   	ret = btrfs_create_qgroup(trans, objectid);
>   	if (ret && ret != -EEXIST) {
> -		btrfs_abort_transaction(trans, ret);
> -		goto fail;
> +		if (ret != -ENOTCONN || btrfs_qgroup_enabled(fs_info)) {
> +			btrfs_abort_transaction(trans, ret);
> +			goto fail;
> +		}
>   	}
>   
>   	/*


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

* Re: [PATCH 3/3] btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls
  2025-07-01 15:42 ` [PATCH 3/3] btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls fdmanana
@ 2025-07-01 22:28   ` Qu Wenruo
  0 siblings, 0 replies; 8+ messages in thread
From: Qu Wenruo @ 2025-07-01 22:28 UTC (permalink / raw)
  To: fdmanana, linux-btrfs



在 2025/7/2 01:12, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
> 
> We have a publicly exported btrfs_qgroup_enabled() and an ioctl.c private
> qgroup_enabled() helper. Both of these test if qgroups are enabled, the
> first check if the flag BTRFS_FS_QUOTA_ENABLED is set in fs_info->flags
> while the second checks if fs_info->quota_root is not NULL while holding
> the mutex fs_info->qgroup_ioctl_lock.
> 
> We can get away with the private ioctl.c:qgroup_enabled(), as all entry
> points into the qgroup code check if fs_info->quota_root is NULL or not
> while holding the mutex fs_info->qgroup_ioctl_lock, and returning the
> error -ENOTCONN in case it's NULL.
> 
> Signed-off-by: Filipe Manana <fdmanana@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu

> ---
>   fs/btrfs/ioctl.c | 24 ++++--------------------
>   1 file changed, 4 insertions(+), 20 deletions(-)
> 
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 3621ed2eacd1..3c4619375bc9 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -3714,22 +3714,6 @@ static long btrfs_ioctl_quota_ctl(struct file *file, void __user *arg)
>   	return ret;
>   }
>   
> -/*
> - * Quick check for ioctl handlers if quotas are enabled. Proper locking must be
> - * done before any operations.
> - */
> -static bool qgroup_enabled(struct btrfs_fs_info *fs_info)
> -{
> -	bool ret = true;
> -
> -	mutex_lock(&fs_info->qgroup_ioctl_lock);
> -	if (!fs_info->quota_root)
> -		ret = false;
> -	mutex_unlock(&fs_info->qgroup_ioctl_lock);
> -
> -	return ret;
> -}
> -
>   static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg)
>   {
>   	struct inode *inode = file_inode(file);
> @@ -3744,7 +3728,7 @@ static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg)
>   	if (!capable(CAP_SYS_ADMIN))
>   		return -EPERM;
>   
> -	if (!qgroup_enabled(root->fs_info))
> +	if (!btrfs_qgroup_enabled(fs_info))
>   		return -ENOTCONN;
>   
>   	ret = mnt_want_write_file(file);
> @@ -3814,7 +3798,7 @@ static long btrfs_ioctl_qgroup_create(struct file *file, void __user *arg)
>   	if (!capable(CAP_SYS_ADMIN))
>   		return -EPERM;
>   
> -	if (!qgroup_enabled(root->fs_info))
> +	if (!btrfs_qgroup_enabled(root->fs_info))
>   		return -ENOTCONN;
>   
>   	ret = mnt_want_write_file(file);
> @@ -3873,7 +3857,7 @@ static long btrfs_ioctl_qgroup_limit(struct file *file, void __user *arg)
>   	if (!capable(CAP_SYS_ADMIN))
>   		return -EPERM;
>   
> -	if (!qgroup_enabled(root->fs_info))
> +	if (!btrfs_qgroup_enabled(root->fs_info))
>   		return -ENOTCONN;
>   
>   	ret = mnt_want_write_file(file);
> @@ -3921,7 +3905,7 @@ static long btrfs_ioctl_quota_rescan(struct file *file, void __user *arg)
>   	if (!capable(CAP_SYS_ADMIN))
>   		return -EPERM;
>   
> -	if (!qgroup_enabled(fs_info))
> +	if (!btrfs_qgroup_enabled(fs_info))
>   		return -ENOTCONN;
>   
>   	ret = mnt_want_write_file(file);


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

end of thread, other threads:[~2025-07-01 22:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-01 15:42 [PATCH 0/3] btrfs: qgroup fixes and a cleanup fdmanana
2025-07-01 15:42 ` [PATCH 1/3] btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations fdmanana
2025-07-01 22:15   ` Qu Wenruo
2025-07-01 15:42 ` [PATCH 2/3] btrfs: qgroup: fix qgroup create ioctl returning success after quotas disabled fdmanana
2025-07-01 22:22   ` Qu Wenruo
2025-07-01 15:42 ` [PATCH 3/3] btrfs: qgroup: use btrfs_qgroup_enabled() in ioctls fdmanana
2025-07-01 22:28   ` Qu Wenruo
2025-07-01 16:20 ` [PATCH 0/3] btrfs: qgroup fixes and a cleanup David Sterba

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