X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fbtrfs-util.c;h=980963b74880149a507582b2a30afa46eba0ce80;hp=2a70dfea451a4bf2ee6ece3d3c1d05cfcac4b1c7;hb=754061ce7173fd8cb66ade1a48381e2cead35522;hpb=160e3793adf2da2bd9ae3fe6b8881bb937e6e71b diff --git a/src/shared/btrfs-util.c b/src/shared/btrfs-util.c index 2a70dfea4..980963b74 100644 --- a/src/shared/btrfs-util.c +++ b/src/shared/btrfs-util.c @@ -646,3 +646,26 @@ int btrfs_defrag(const char *p) { return btrfs_defrag_fd(fd); } + +int btrfs_quota_enable_fd(int fd, bool b) { + struct btrfs_ioctl_quota_ctl_args args = { + .cmd = b ? BTRFS_QUOTA_CTL_ENABLE : BTRFS_QUOTA_CTL_DISABLE, + }; + + assert(fd >= 0); + + if (ioctl(fd, BTRFS_IOC_QUOTA_CTL, &args) < 0) + return -errno; + + return 0; +} + +int btrfs_quota_enable(const char *path, bool b) { + _cleanup_close_ int fd = -1; + + fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); + if (fd < 0) + return -errno; + + return btrfs_quota_enable_fd(fd, b); +}