5f7ecd610c
Let's simplify things and drop the logic that /var/lib/machines is setup as auto-growing btrfs loopback file /var/lib/machines.raw. THis was done in order to make quota available for machine management, but quite frankly never really worked properly, as we couldn't grow the file system in sync with its use properly. Moreover philosophically it's problematic overriding the admin's choice of file system like this. Let's hence drop this, and simplify things. Deleting code is a good feeling. Now that regular file systems provide project quota we could probably add per-machine quota support based on that, hence the btrfs quota argument is not that interesting anymore (though btrfs quota is a bit more powerful as it allows recursive quota, i.e. that the machine pool gets an overall quota in addition to per-machine quota).
47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
/* SPDX-License-Identifier: LGPL-2.1+ */
|
|
|
|
#include <errno.h>
|
|
#include <sys/statfs.h>
|
|
|
|
#include "btrfs-util.h"
|
|
#include "label.h"
|
|
#include "machine-pool.h"
|
|
#include "missing.h"
|
|
#include "stat-util.h"
|
|
|
|
static int check_btrfs(void) {
|
|
struct statfs sfs;
|
|
|
|
if (statfs("/var/lib/machines", &sfs) < 0) {
|
|
if (errno != ENOENT)
|
|
return -errno;
|
|
|
|
if (statfs("/var/lib", &sfs) < 0)
|
|
return -errno;
|
|
}
|
|
|
|
return F_TYPE_EQUAL(sfs.f_type, BTRFS_SUPER_MAGIC);
|
|
}
|
|
|
|
int setup_machine_directory(sd_bus_error *error) {
|
|
int r;
|
|
|
|
r = check_btrfs();
|
|
if (r < 0)
|
|
return sd_bus_error_set_errnof(error, r, "Failed to determine whether /var/lib/machines is located on btrfs: %m");
|
|
if (r == 0)
|
|
return 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 for /var/lib/machines, ignoring: %m");
|
|
|
|
r = btrfs_subvol_auto_qgroup("/var/lib/machines", 0, true);
|
|
if (r < 0)
|
|
log_warning_errno(r, "Failed to set up default quota hierarchy for /var/lib/machines, ignoring: %m");
|
|
|
|
return 1;
|
|
}
|