summaryrefslogtreecommitdiffstats
path: root/src/core/mount.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-07-17 14:53:07 +0200
committerLennart Poettering <lennart@poettering.net>2019-07-18 17:03:10 +0200
commitfcd8e119c28be19ffbc5227089cf4d3b8ba60238 (patch)
treebd64ac8427703f42f156cf11651d90ce50b21950 /src/core/mount.c
parentMerge pull request #12639 from michaelolbrich/job-order (diff)
downloadsystemd-fcd8e119c28be19ffbc5227089cf4d3b8ba60238.tar.xz
systemd-fcd8e119c28be19ffbc5227089cf4d3b8ba60238.zip
mount: simplify /proc/self/mountinfo handler
Our IO handler is only installed for one fd, hence there's no reason to conditionalize on it again. Also, split out the draining into a helper function of its own.
Diffstat (limited to '')
-rw-r--r--src/core/mount.c48
1 files changed, 26 insertions, 22 deletions
diff --git a/src/core/mount.c b/src/core/mount.c
index e32db2bf63..8638b87854 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -1751,6 +1751,29 @@ fail:
mount_shutdown(m);
}
+static int drain_libmount(Manager *m) {
+ bool rescan = false;
+ int r;
+
+ assert(m);
+
+ /* Drain all events and verify that the event is valid.
+ *
+ * Note that libmount also monitors /run/mount mkdir if the directory does not exist yet. The mkdir
+ * may generate event which is irrelevant for us.
+ *
+ * error: r < 0; valid: r == 0, false positive: r == 1 */
+ do {
+ r = mnt_monitor_next_change(m->mount_monitor, NULL, NULL);
+ if (r < 0)
+ return log_error_errno(r, "Failed to drain libmount events: %m");
+ if (r == 0)
+ rescan = true;
+ } while (r == 0);
+
+ return rescan;
+}
+
static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
_cleanup_set_free_free_ Set *around = NULL, *gone = NULL;
Manager *m = userdata;
@@ -1762,28 +1785,9 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
assert(m);
assert(revents & EPOLLIN);
- if (fd == mnt_monitor_get_fd(m->mount_monitor)) {
- bool rescan = false;
-
- /* Drain all events and verify that the event is valid.
- *
- * Note that libmount also monitors /run/mount mkdir if the
- * directory does not exist yet. The mkdir may generate event
- * which is irrelevant for us.
- *
- * error: r < 0; valid: r == 0, false positive: rc == 1 */
- do {
- r = mnt_monitor_next_change(m->mount_monitor, NULL, NULL);
- if (r == 0)
- rescan = true;
- else if (r < 0)
- return log_error_errno(r, "Failed to drain libmount events: %m");
- } while (r == 0);
-
- log_debug("libmount event [rescan: %s]", yes_no(rescan));
- if (!rescan)
- return 0;
- }
+ r = drain_libmount(m);
+ if (r <= 0)
+ return r;
r = mount_load_proc_self_mountinfo(m, true);
if (r < 0) {