From c904f64d84db8c4eebedf210ba10893f19ba05ed Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 25 Feb 2011 01:47:31 +0100 Subject: label: udev might be making changes in /dev while we iterate through it Also, there are most likely dead symlinks in there, so let's ignore ENOENT when we relabel. https://bugzilla.redhat.com/show_bug.cgi?id=680169 --- src/automount.c | 2 +- src/label.c | 6 +++++- src/label.h | 3 ++- src/mount-setup.c | 4 ++-- src/tmpfiles.c | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/automount.c b/src/automount.c index 9447c0d8fc..7289311684 100644 --- a/src/automount.c +++ b/src/automount.c @@ -305,7 +305,7 @@ static int open_dev_autofs(Manager *m) { if (m->dev_autofs_fd >= 0) return m->dev_autofs_fd; - label_fix("/dev/autofs"); + label_fix("/dev/autofs", false); if ((m->dev_autofs_fd = open("/dev/autofs", O_CLOEXEC|O_RDONLY)) < 0) { log_error("Failed to open /dev/autofs: %s", strerror(errno)); diff --git a/src/label.c b/src/label.c index 218d0dfa06..09ded642fb 100644 --- a/src/label.c +++ b/src/label.c @@ -65,7 +65,7 @@ int label_init(void) { return r; } -int label_fix(const char *path) { +int label_fix(const char *path, bool ignore_enoent) { int r = 0; #ifdef HAVE_SELINUX @@ -90,6 +90,10 @@ int label_fix(const char *path) { /* If the FS doesn't support labels, then exit without warning */ if (r < 0 && errno == ENOTSUP) return 0; + + /* Ignore ENOENT in some cases */ + if (r < 0 && ignore_enoent && errno == ENOENT) + return 0; } } diff --git a/src/label.h b/src/label.h index f1bf5d6d5e..7ea11cdc55 100644 --- a/src/label.h +++ b/src/label.h @@ -23,11 +23,12 @@ ***/ #include +#include int label_init(void); void label_finish(void); -int label_fix(const char *path); +int label_fix(const char *path, bool ignore_enoent); int label_socket_set(const char *label); void label_socket_clear(void); diff --git a/src/mount-setup.c b/src/mount-setup.c index 64fb4765f6..5cbaee6be7 100644 --- a/src/mount-setup.c +++ b/src/mount-setup.c @@ -121,7 +121,7 @@ static int mount_one(const MountPoint *p) { return p->fatal ? -errno : 0; } - label_fix(p->where); + label_fix(p->where, false); return 0; } @@ -216,7 +216,7 @@ static int nftw_cb( if (ftwbuf->level == 0) return 0; - label_fix(fpath); + label_fix(fpath, true); return 0; }; diff --git a/src/tmpfiles.c b/src/tmpfiles.c index 917747a4a4..0302262394 100644 --- a/src/tmpfiles.c +++ b/src/tmpfiles.c @@ -507,7 +507,7 @@ static int create_item(Item *i) { break; } - if ((r = label_fix(i->path)) < 0) + if ((r = label_fix(i->path, false)) < 0) goto finish; log_debug("%s created successfully.", i->path); -- cgit v1.2.3-54-g00ecf