From: Lennart Poettering Date: Fri, 25 Feb 2011 00:47:31 +0000 (+0100) Subject: label: udev might be making changes in /dev while we iterate through it X-Git-Tag: v19~14 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c904f64d84db8c4eebedf210ba10893f19ba05ed;p=systemd 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 --- diff --git a/TODO b/TODO index 0f643073..b3c33ad1 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,7 @@ F15: +* swap units that are activated by one name but shown in the kernel under another are semi-broken + * dep cycle basic → udev-retry → auditd → iptables → basic * isolate multi-user.target doesn't start a getty@tty1 if we run it from graphical.target @@ -19,7 +21,11 @@ F15: * Make systemd-cryptsetup cancellable -* udev should be able to upgrade its database on its own +* add fstab fields to add wait timeouts, change Wants to Requires by local-fs.target + +* hook emergency.target into local-fs.target in some way as OnFailure with isolate + +* convince Karel to give us our own mount option prefix Features: diff --git a/src/automount.c b/src/automount.c index 9447c0d8..72893116 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 218d0dfa..09ded642 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 f1bf5d6d..7ea11cdc 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 64fb4765..5cbaee6b 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 917747a4..03022623 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);