ryantimwilson / rpms / systemd

Forked from rpms/systemd a month ago
Clone
Zbigniew Jędrzejewski-Szmek a48f80
From b505f6560ea203ff1440da4d2b653b839e621aba Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek a48f80
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek a48f80
Date: Fri, 15 May 2015 21:47:22 +0200
Zbigniew Jędrzejewski-Szmek a48f80
Subject: [PATCH] tmpfiles: don't fail if we cannot create a subvolume because
Zbigniew Jędrzejewski-Szmek a48f80
 a file system is read-only but a dir already exists anyway
Zbigniew Jędrzejewski-Szmek a48f80
Zbigniew Jędrzejewski-Szmek a48f80
https://bugs.freedesktop.org/show_bug.cgi?id=90281
Zbigniew Jędrzejewski-Szmek a48f80
(cherry picked from commit 7b135a73999b6911ebb85c053b6f7701fdac1883)
Zbigniew Jędrzejewski-Szmek a48f80
---
Zbigniew Jędrzejewski-Szmek a48f80
 src/tmpfiles/tmpfiles.c | 17 +++++++++++------
Zbigniew Jędrzejewski-Szmek a48f80
 1 file changed, 11 insertions(+), 6 deletions(-)
Zbigniew Jędrzejewski-Szmek a48f80
Zbigniew Jędrzejewski-Szmek a48f80
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
Zbigniew Jędrzejewski-Szmek a48f80
index 73a9c9d5b6..d0e6567d8a 100644
Zbigniew Jędrzejewski-Szmek a48f80
--- a/src/tmpfiles/tmpfiles.c
Zbigniew Jędrzejewski-Szmek a48f80
+++ b/src/tmpfiles/tmpfiles.c
Zbigniew Jędrzejewski-Szmek a48f80
@@ -1002,20 +1002,25 @@ static int create_item(Item *i) {
Zbigniew Jędrzejewski-Szmek a48f80
                                 r = mkdir_label(i->path, i->mode);
Zbigniew Jędrzejewski-Szmek a48f80
 
Zbigniew Jędrzejewski-Szmek a48f80
                 if (r < 0) {
Zbigniew Jędrzejewski-Szmek a48f80
-                        if (r != -EEXIST)
Zbigniew Jędrzejewski-Szmek a48f80
-                                return log_error_errno(r, "Failed to create directory or subvolume \"%s\": %m", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
+                        int k;
Zbigniew Jędrzejewski-Szmek a48f80
 
Zbigniew Jędrzejewski-Szmek a48f80
-                        if (stat(i->path, &st) < 0)
Zbigniew Jędrzejewski-Szmek a48f80
-                                return log_error_errno(errno, "stat(%s) failed: %m", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
+                        if (r != -EEXIST && r != -EROFS)
Zbigniew Jędrzejewski-Szmek a48f80
+                                return log_error_errno(r, "Failed to create directory or subvolume \"%s\": %m", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
 
Zbigniew Jędrzejewski-Szmek a48f80
-                        if (!S_ISDIR(st.st_mode)) {
Zbigniew Jędrzejewski-Szmek a48f80
-                                log_debug("\"%s\" already exists and is not a directory.", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
+                        k = is_dir(i->path, false);
Zbigniew Jędrzejewski-Szmek a48f80
+                        if (k == -ENOENT && r == -EROFS)
Zbigniew Jędrzejewski-Szmek a48f80
+                                return log_error_errno(r, "%s does not exist and cannot be created as the file system is read-only.", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
+                        if (k < 0)
Zbigniew Jędrzejewski-Szmek a48f80
+                                return log_error_errno(k, "Failed to check if %s exists: %m", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
+                        if (!k) {
Zbigniew Jędrzejewski-Szmek a48f80
+                                log_warning("\"%s\" already exists and is not a directory.", i->path);
Zbigniew Jędrzejewski-Szmek a48f80
                                 return 0;
Zbigniew Jędrzejewski-Szmek a48f80
                         }
Zbigniew Jędrzejewski-Szmek a48f80
 
Zbigniew Jędrzejewski-Szmek a48f80
                         creation = CREATION_EXISTING;
Zbigniew Jędrzejewski-Szmek a48f80
                 } else
Zbigniew Jędrzejewski-Szmek a48f80
                         creation = CREATION_NORMAL;
Zbigniew Jędrzejewski-Szmek a48f80
+
Zbigniew Jędrzejewski-Szmek a48f80
                 log_debug("%s directory \"%s\".", creation_mode_verb_to_string(creation), i->path);
Zbigniew Jędrzejewski-Szmek a48f80
 
Zbigniew Jędrzejewski-Szmek a48f80
                 r = path_set_perms(i, i->path);