mirror of
https://github.com/systemd/systemd.git
synced 2025-01-12 13:18:14 +03:00
importd: enable btrfs quota in /var/lib/machines, if necessary
This commit is contained in:
parent
160e3793ad
commit
754061ce71
@ -792,6 +792,11 @@ static int setup_machine_directory(sd_bus_error *error) {
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to determine whether /var/lib/machines is located on btrfs: %m");
|
||||
if (r > 0) {
|
||||
(void) btrfs_subvol_make_label("/var/lib/machines");
|
||||
|
||||
r = btrfs_quota_enable("/var/lib/machines", true);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to enable quota, ignoring: %m");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -858,6 +863,10 @@ static int setup_machine_directory(sd_bus_error *error) {
|
||||
}
|
||||
mntdir_mounted = true;
|
||||
|
||||
r = btrfs_quota_enable(mntdir, true);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to enable quota, ignoring: %m");
|
||||
|
||||
if (chmod(mntdir, 0700) < 0) {
|
||||
r = sd_bus_error_set_errnof(error, errno, "Failed to fix owner: %m");
|
||||
goto fail;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -64,3 +64,6 @@ int btrfs_get_block_device(const char *path, dev_t *dev);
|
||||
|
||||
int btrfs_defrag_fd(int fd);
|
||||
int btrfs_defrag(const char *p);
|
||||
|
||||
int btrfs_quota_enable_fd(int fd, bool b);
|
||||
int btrfs_quota_enable(const char *path, bool b);
|
||||
|
Loading…
Reference in New Issue
Block a user