From: Stefan Schantl Date: Mon, 26 Feb 2024 17:41:51 +0000 (+0100) Subject: installer: Add code to correctly write the fstab when installing on BTRFS X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6b2990f8e2c804404ef6945adac0716087b12adf;p=people%2Fstevee%2Fipfire-2.x.git installer: Add code to correctly write the fstab when installing on BTRFS Signed-off-by: Stefan Schantl --- diff --git a/src/installer/hw.c b/src/installer/hw.c index 3b26920d1..77789e35e 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -1319,11 +1319,13 @@ static char* hw_get_uuid(const char* dev) { #define FSTAB_FMT "UUID=%s %-8s %-4s %-10s %d %d\n" int hw_write_fstab(struct hw_destination* dest) { + const struct btrfs_subvolumes* subvolume = NULL; FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/fstab", "w"); if (!f) return -1; char* uuid = NULL; + char mount_options[STRING_SIZE]; // boot if (*dest->part_boot) { @@ -1359,7 +1361,22 @@ int hw_write_fstab(struct hw_destination* dest) { // root uuid = hw_get_uuid(dest->part_root); if (uuid) { - fprintf(f, FSTAB_FMT, uuid, "/", "auto", "defaults", 1, 1); + if(dest->filesystem == HW_FS_BTRFS) { + // Loop through the list of subvolumes + for (subvolume = btrfs_subvolumes; subvolume->name; subvolume++) { + // Abort if the mount options could not be assigned + int r = snprintf(mount_options, sizeof(mount_options), "defaults,%s,subvol=%s", BTRFS_MOUNT_OPTIONS, subvolume->name); + if (r < 0) { + return r; + } + + // Write the entry to the file + fprintf(f, FSTAB_FMT, uuid, subvolume->mount_path, "btrfs", mount_options, 1, 1); + } + } else { + fprintf(f, FSTAB_FMT, uuid, "/", "auto", "defaults", 1, 1); + } + free(uuid); }