/* SPDX-License-Identifier: LGPL-2.1+ */ #include #include #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; }