X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmount.c;h=4f245555f225b15ac321292c774d8eb2b631fbbb;hb=a6b26d9011de60e1c41f51e8d2aab1d2f7bbf0f5;hp=c4074ebd2e6cc04ce416d70bbf1588eee73c7756;hpb=e8d2f6cde0af86eece9118718ad0a8a19e1cffec;p=elogind.git diff --git a/src/core/mount.c b/src/core/mount.c index c4074ebd2..4f245555f 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -293,7 +293,7 @@ static int mount_add_requires_mounts_links(Mount *m) { } static char* mount_test_option(const char *haystack, const char *needle) { - struct mntent me; + struct mntent me = { .mnt_opts = (char*) haystack }; assert(needle); @@ -303,9 +303,6 @@ static char* mount_test_option(const char *haystack, const char *needle) { if (!haystack) return NULL; - zero(me); - me.mnt_opts = (char*) haystack; - return hasmntopt(&me, needle); } @@ -439,9 +436,9 @@ static int mount_add_quota_links(Mount *m) { } static int mount_add_default_dependencies(Mount *m) { - int r; + const char *after, *after2, *online; MountParameters *p; - const char *after, *setup; + int r; assert(m); @@ -458,18 +455,26 @@ static int mount_add_default_dependencies(Mount *m) { if (mount_is_network(p)) { after = SPECIAL_REMOTE_FS_PRE_TARGET; - setup = SPECIAL_REMOTE_FS_SETUP_TARGET; + after2 = SPECIAL_NETWORK_TARGET; + online = SPECIAL_NETWORK_ONLINE_TARGET; } else { after = SPECIAL_LOCAL_FS_PRE_TARGET; - setup = NULL; + after2 = NULL; + online = NULL; } r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, NULL, true); if (r < 0) return r; - if (setup) { - r = unit_add_dependency_by_name(UNIT(m), UNIT_WANTS, setup, NULL, true); + if (after2) { + r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after2, NULL, true); + if (r < 0) + return r; + } + + if (online) { + r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, online, NULL, true); if (r < 0) return r; } @@ -512,7 +517,7 @@ static int mount_fix_timeouts(Mount *m) { if (!t) return -ENOMEM; - r = parse_usec(t, &u); + r = parse_sec(t, &u); free(t); if (r < 0) { @@ -1698,25 +1703,27 @@ static void mount_shutdown(Manager *m) { static int mount_enumerate(Manager *m) { int r; - struct epoll_event ev; assert(m); if (!m->proc_self_mountinfo) { - if (!(m->proc_self_mountinfo = fopen("/proc/self/mountinfo", "re"))) + struct epoll_event ev = { + .events = EPOLLPRI, + .data.ptr = &m->mount_watch, + }; + + m->proc_self_mountinfo = fopen("/proc/self/mountinfo", "re"); + if (!m->proc_self_mountinfo) return -errno; m->mount_watch.type = WATCH_MOUNT; m->mount_watch.fd = fileno(m->proc_self_mountinfo); - zero(ev); - ev.events = EPOLLPRI; - ev.data.ptr = &m->mount_watch; - if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->mount_watch.fd, &ev) < 0) return -errno; } - if ((r = mount_load_proc_self_mountinfo(m, false)) < 0) + r = mount_load_proc_self_mountinfo(m, false); + if (r < 0) goto fail; return 0;