summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-12-15 17:37:16 +0100
committerLennart Poettering <lennart@poettering.net>2017-12-15 20:52:28 +0100
commit713a88757aec3a90f9b4bd67565aa42986400ebf (patch)
tree4890cf9b7e64d67ba75f74d02c6603a00cf78741 /src
parent3a671cd130cc8588d9ac6251e84477f5367da9b8 (diff)
downloadsystemd-713a88757aec3a90f9b4bd67565aa42986400ebf.tar.gz
systemd-713a88757aec3a90f9b4bd67565aa42986400ebf.tar.bz2
systemd-713a88757aec3a90f9b4bd67565aa42986400ebf.zip
mount-setup: fix MNT_CHECK_WRITABLE error handling, and log about the issue
Let's correct the error handling (the error is in errno, not r), and let's add logging like the rest of the function has it.
Diffstat (limited to 'src')
-rw-r--r--src/core/mount-setup.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
index 7171d8fda4..a0c5f5aaae 100644
--- a/src/core/mount-setup.c
+++ b/src/core/mount-setup.c
@@ -155,10 +155,12 @@ bool mount_point_ignore(const char *path) {
}
static int mount_one(const MountPoint *p, bool relabel) {
- int r;
+ int r, priority;
assert(p);
+ priority = (p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG;
+
if (p->condition_fn && !p->condition_fn())
return 0;
@@ -168,7 +170,7 @@ static int mount_one(const MountPoint *p, bool relabel) {
r = path_is_mount_point(p->where, NULL, AT_SYMLINK_FOLLOW);
if (r < 0 && r != -ENOENT) {
- log_full_errno((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, r, "Failed to determine whether %s is a mount point: %m", p->where);
+ log_full_errno(priority, r, "Failed to determine whether %s is a mount point: %m", p->where);
return (p->mode & MNT_FATAL) ? r : 0;
}
if (r > 0)
@@ -196,7 +198,7 @@ static int mount_one(const MountPoint *p, bool relabel) {
p->type,
p->flags,
p->options) < 0) {
- log_full_errno((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, errno, "Failed to mount %s at %s: %m", p->type, p->where);
+ log_full_errno(priority, errno, "Failed to mount %s at %s: %m", p->type, p->where);
return (p->mode & MNT_FATAL) ? -errno : 0;
}
@@ -205,10 +207,13 @@ static int mount_one(const MountPoint *p, bool relabel) {
(void) label_fix(p->where, false, false);
if (p->mode & MNT_CHECK_WRITABLE) {
- r = access(p->where, W_OK);
- if (r < 0) {
+ if (access(p->where, W_OK) < 0) {
+ r = -errno;
+
(void) umount(p->where);
(void) rmdir(p->where);
+
+ log_full_errno(priority, r, "Mount point %s not writable after mounting: %m", p->where);
return (p->mode & MNT_FATAL) ? r : 0;
}
}