diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-07-17 14:53:07 +0200 |
---|---|---|
committer | The Plumber <50238977+systemd-rhel-bot@users.noreply.github.com> | 2019-08-07 14:20:15 +0200 |
commit | daf63a3c6c6cd241017bdf9a26c7b1caf744e69b (patch) | |
tree | dc5615463ca4a3f95694f7343a97abe78e1d723b | |
parent | 72dd8d8cd1a7417805009050f859d502b1c6cf3e (diff) | |
download | systemd-daf63a3c6c6cd241017bdf9a26c7b1caf744e69b.tar.gz |
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.
(cherry picked from commit fcd8e119c28be19ffbc5227089cf4d3b8ba60238)
Conflicts:
src/core/mount.c
Related: #1696178
-rw-r--r-- | src/core/mount.c | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/src/core/mount.c b/src/core/mount.c index 16229d4af1..85b07375e2 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1758,6 +1758,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_ Set *around = NULL, *gone = NULL; Manager *m = userdata; @@ -1769,28 +1792,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"); - } 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) { |