X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fbtrfs-util.c;fp=src%2Fshared%2Fbtrfs-util.c;h=6761501da2589166a108be55d0ff9ae39386b4d0;hb=d6ce17c7f02ed3facdb45f65f546e587c2f00950;hp=980963b74880149a507582b2a30afa46eba0ce80;hpb=950c07d421c04e5aae99973479f4f13131fb45e1;p=elogind.git diff --git a/src/shared/btrfs-util.c b/src/shared/btrfs-util.c index 980963b74..6761501da 100644 --- a/src/shared/btrfs-util.c +++ b/src/shared/btrfs-util.c @@ -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); +}