machined,machinectl: add calls for changing container/VM quotas

This commit is contained in:
Lennart Poettering
2015-02-25 22:06:54 +01:00
parent 950c07d421
commit d6ce17c7f0
10 changed files with 226 additions and 6 deletions
+26
View File
@@ -669,3 +669,29 @@ int btrfs_quota_enable(const char *path, bool b) {
return btrfs_quota_enable_fd(fd, b);
}
int btrfs_quota_limit_fd(int fd, uint64_t referred_max) {
struct btrfs_ioctl_qgroup_limit_args args = {
.lim.max_rfer =
referred_max == (uint64_t) -1 ? 0 :
referred_max == 0 ? 1 : referred_max,
.lim.flags = BTRFS_QGROUP_LIMIT_MAX_RFER,
};
assert(fd >= 0);
if (ioctl(fd, BTRFS_IOC_QGROUP_LIMIT, &args) < 0)
return -errno;
return 0;
}
int btrfs_quota_limit(const char *path, uint64_t referred_max) {
_cleanup_close_ int fd = -1;
fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
if (fd < 0)
return -errno;
return btrfs_quota_limit_fd(fd, referred_max);
}
+3
View File
@@ -67,3 +67,6 @@ int btrfs_defrag(const char *p);
int btrfs_quota_enable_fd(int fd, bool b);
int btrfs_quota_enable(const char *path, bool b);
int btrfs_quota_limit_fd(int fd, uint64_t referred_max);
int btrfs_quota_limit(const char *path, uint64_t referred_max);
+13
View File
@@ -613,6 +613,19 @@ int image_path_lock(const char *path, int operation, LockFile *global, LockFile
return 0;
}
int image_set_limit(Image *i, uint64_t referred_max) {
assert(i);
if (path_equal(i->path, "/") ||
path_startswith(i->path, "/usr"))
return -EROFS;
if (i->type != IMAGE_SUBVOLUME)
return -ENOTSUP;
return btrfs_quota_limit(i->path, referred_max);
}
int image_name_lock(const char *name, int operation, LockFile *ret) {
const char *p;
+2
View File
@@ -70,3 +70,5 @@ bool image_name_is_valid(const char *s) _pure_;
int image_path_lock(const char *path, int operation, LockFile *global, LockFile *local);
int image_name_lock(const char *name, int operation, LockFile *ret);
int image_set_limit(Image *i, uint64_t referred_max);