Skip to content

Commit

Permalink
btrfs: sysfs: expose quota mode via sysfs
Browse files Browse the repository at this point in the history
Add a new sysfs file /sys/fs/btrfs/<uuid>/qgroups/mode
which prints out the mode qgroups is running in. The possible modes are
qgroup, and squota.

If quotas are not enabled, then the qgroups directory will not exist,
so don't handle that mode.

Signed-off-by: Boris Burkov <boris@bur.io>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Boris Burkov authored and David Sterba committed Oct 12, 2023
1 parent 182940f commit 0182764
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions fs/btrfs/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2089,6 +2089,33 @@ static ssize_t qgroup_enabled_show(struct kobject *qgroups_kobj,
}
BTRFS_ATTR(qgroups, enabled, qgroup_enabled_show);

static ssize_t qgroup_mode_show(struct kobject *qgroups_kobj,
struct kobj_attribute *a,
char *buf)
{
struct btrfs_fs_info *fs_info = to_fs_info(qgroups_kobj->parent);
ssize_t ret = 0;

spin_lock(&fs_info->qgroup_lock);
ASSERT(btrfs_qgroup_enabled(fs_info));
switch (btrfs_qgroup_mode(fs_info)) {
case BTRFS_QGROUP_MODE_FULL:
ret = sysfs_emit(buf, "qgroup\n");
break;
case BTRFS_QGROUP_MODE_SIMPLE:
ret = sysfs_emit(buf, "squota\n");
break;
default:
btrfs_warn(fs_info, "unexpected qgroup mode %d\n",
btrfs_qgroup_mode(fs_info));
break;
}
spin_unlock(&fs_info->qgroup_lock);

return ret;
}
BTRFS_ATTR(qgroups, mode, qgroup_mode_show);

static ssize_t qgroup_inconsistent_show(struct kobject *qgroups_kobj,
struct kobj_attribute *a,
char *buf)
Expand Down Expand Up @@ -2151,6 +2178,7 @@ static struct attribute *qgroups_attrs[] = {
BTRFS_ATTR_PTR(qgroups, enabled),
BTRFS_ATTR_PTR(qgroups, inconsistent),
BTRFS_ATTR_PTR(qgroups, drop_subtree_threshold),
BTRFS_ATTR_PTR(qgroups, mode),
NULL
};
ATTRIBUTE_GROUPS(qgroups);
Expand Down

0 comments on commit 0182764

Please sign in to comment.