Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f29efe29 authored by Sargun Dhillon's avatar Sargun Dhillon Committed by David Sterba
Browse files

btrfs: add quota override flag to enable quota override for CAP_SYS_RESOURCE



This patch introduces the quota override flag to btrfs_fs_info, and a
change to quota limit checking code to temporarily allow for quota to be
overridden for processes with CAP_SYS_RESOURCE.

It's useful for administrative programs, such as log rotation, that may
need to temporarily use more disk space in order to free up a greater
amount of overall disk space without yielding more disk space to the
rest of userland.

Eventually, we may want to add the idea of an operator-specific quota,
operator reserved space, or something else to allow for administrative
override, but this is perhaps the simplest solution.

Signed-off-by: default avatarSargun Dhillon <sargun@sargun.me>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
[ minor changelog edits ]
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent a5ed45f8
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -716,6 +716,8 @@ struct btrfs_delayed_root;
#define BTRFS_FS_BTREE_ERR			11
#define BTRFS_FS_LOG1_ERR			12
#define BTRFS_FS_LOG2_ERR			13
#define BTRFS_FS_QUOTA_OVERRIDE			14

/*
 * Indicate that a whole-filesystem exclusive operation is running
 * (device replace, resize, device add/delete, balance)
+5 −0
Original line number Diff line number Diff line
@@ -2338,6 +2338,11 @@ static int qgroup_reserve(struct btrfs_root *root, u64 num_bytes, bool enforce)

	if (num_bytes == 0)
		return 0;

	if (test_bit(BTRFS_FS_QUOTA_OVERRIDE, &fs_info->flags) &&
	    capable(CAP_SYS_RESOURCE))
		enforce = false;

retry:
	spin_lock(&fs_info->qgroup_lock);
	quota_root = fs_info->quota_root;