From 42f2740affb83d97ec80598816aabdf16d852e93 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Fri, 10 Jan 2025 12:20:50 +0100 Subject: [PATCH] shared: image_set_pool_limit() --- src/shared/discover-image.c | 23 +++++++++++++++++++++++ src/shared/discover-image.h | 1 + 2 files changed, 24 insertions(+) diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c index 53e98214128..e2f05dca93d 100644 --- a/src/shared/discover-image.c +++ b/src/shared/discover-image.c @@ -1590,6 +1590,29 @@ int image_set_limit(Image *i, uint64_t referenced_max) { return 0; } +int image_set_pool_limit(ImageClass class, uint64_t referenced_max) { + const char *dir; + int r; + + assert(class >= 0 && class < _IMAGE_CLASS_MAX); + + dir = image_root_to_string(class); + + r = btrfs_qgroup_set_limit(dir, /* qgroupid = */ 0, referenced_max); + if (ERRNO_IS_NEG_NOT_SUPPORTED(r)) + return r; + if (r < 0) + log_debug_errno(r, "Failed to set limit on btrfs quota group for '%s', ignoring: %m", dir); + + r = btrfs_subvol_set_subtree_quota_limit(dir, /* subvol_id = */ 0, referenced_max); + if (ERRNO_IS_NEG_NOT_SUPPORTED(r)) + return r; + if (r < 0) + return log_debug_errno(r, "Failed to set subtree quota limit for '%s': %m", dir); + + return 0; +} + int image_read_metadata(Image *i, const ImagePolicy *image_policy) { _cleanup_(release_lock_file) LockFile global_lock = LOCK_FILE_INIT, local_lock = LOCK_FILE_INIT; int r; diff --git a/src/shared/discover-image.h b/src/shared/discover-image.h index c1fdf15d155..c64d0baefb5 100644 --- a/src/shared/discover-image.h +++ b/src/shared/discover-image.h @@ -78,6 +78,7 @@ int image_path_lock(const char *path, int operation, LockFile *global, LockFile int image_name_lock(const char *name, int operation, LockFile *ret); int image_set_limit(Image *i, uint64_t referenced_max); +int image_set_pool_limit(ImageClass class, uint64_t referenced_max); int image_read_metadata(Image *i, const ImagePolicy *image_policy); -- 2.47.3