]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
gpt-auto: properly handle case where we can't determine devno of /usr/ fs 22506/head
authorLennart Poettering <lennart@poettering.net>
Mon, 14 Feb 2022 12:35:27 +0000 (13:35 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 14 Feb 2022 12:40:59 +0000 (13:40 +0100)
get_block_device_harder() returns == 0 if the fs is valid, but it is not
backed by a single devno. (As opposed to returning > 0 if the devno is
valid). Let's catch this case and log a clear message, and don't bother
open the device in that case.

This is mostly cosmetical, as either way, systemd-gpt-auto-generator
doesn't work in scenarios like that.

Prompted-by: #22504
src/gpt-auto-generator/gpt-auto-generator.c

index 64ca9bb2f9069772f3dbe3995c89dff2e85412d3..28982a4c3471a3443387d38f5e03561d12988ae4 100644 (file)
@@ -779,12 +779,16 @@ static int add_mounts(void) {
                         return btrfs_log_dev_root(LOG_ERR, r, "root file system");
                 if (r < 0)
                         return log_error_errno(r, "Failed to determine block device of root file system: %m");
-                if (r == 0) { /* Not backed by block device */
+                if (r == 0) { /* Not backed by a single block device. (Could be NFS or so, or could be multi-device RAID or so) */
                         r = get_block_device_harder("/usr", &devno);
                         if (r == -EUCLEAN)
                                 return btrfs_log_dev_root(LOG_ERR, r, "/usr");
                         if (r < 0)
-                                return log_error_errno(r, "Failed to determine block device of /usr file system: %m");
+                                return log_error_errno(r, "Failed to determine block device of /usr/ file system: %m");
+                        if (r == 0) { /* /usr/ not backed by single block device, either. */
+                                log_debug("Neither root nor /usr/ file system are on a (single) block device.");
+                                return 0;
+                        }
                 }
         } else if (r < 0)
                 return log_error_errno(r, "Failed to read symlink /run/systemd/volatile-root: %m");