X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmount.c;h=5577f16dfd7a18ff0cba8919d27bfc886d0d7129;hb=a4ddf82766c41627bd94c609bb55983f4b81814f;hp=3b1608060ec084b044c165c3215d3322338301b3;hpb=8cbef76075910864ed31879c9fb193c127adc20d;p=elogind.git diff --git a/src/mount.c b/src/mount.c index 3b1608060..5577f16df 100644 --- a/src/mount.c +++ b/src/mount.c @@ -167,6 +167,19 @@ static int mount_add_swap_links(Mount *m) { return 0; } +static int mount_add_path_links(Mount *m) { + Meta *other; + int r; + + assert(m); + + LIST_FOREACH(units_per_type, other, m->meta.manager->units_per_type[UNIT_PATH]) + if ((r = path_add_one_mount_link((Path*) other, m)) < 0) + return r; + + return 0; +} + static int mount_add_automount_links(Mount *m) { Meta *other; int r; @@ -341,6 +354,9 @@ static int mount_load(Unit *u) { if ((r = mount_add_swap_links(m)) < 0) return r; + if ((r = mount_add_path_links(m)) < 0) + return r; + if ((r = mount_add_automount_links(m)) < 0) return r; @@ -936,7 +952,7 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) { case MOUNT_REMOUNTING_SIGKILL: case MOUNT_REMOUNTING_SIGTERM: - if (success && m->from_proc_self_mountinfo) + if (success) mount_enter_mounted(m, true); else if (m->from_proc_self_mountinfo) mount_enter_mounted(m, false); @@ -1246,7 +1262,7 @@ finish: static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { int r; - char *device, *path, *options, *fstype, *d, *p; + char *device, *path, *options, *options2, *fstype, *d, *p, *o; assert(m); @@ -1255,7 +1271,7 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { for (;;) { int k; - device = path = options = fstype = d = p = NULL; + device = path = options = options2 = fstype = d = p = o = NULL; if ((k = fscanf(m->proc_self_mountinfo, "%*s " /* (1) mount id */ @@ -1268,11 +1284,13 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { "- " /* (8) seperator */ "%ms " /* (9) file system type */ "%ms" /* (10) mount source */ + "%ms" /* (11) mount options 2 */ "%*[^\n]", /* some rubbish at the end */ &path, &options, &fstype, - &device)) != 4) { + &device, + &options2)) != 5) { if (k == EOF) break; @@ -1281,21 +1299,28 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { goto finish; } + if (asprintf(&o, "%s,%s", options, options2) < 0) { + r = -ENOMEM; + goto finish; + } + if (!(d = cunescape(device)) || !(p = cunescape(path))) { r = -ENOMEM; goto finish; } - if ((r = mount_add_one(m, d, p, options, fstype, true, set_flags)) < 0) + if ((r = mount_add_one(m, d, p, o, fstype, true, set_flags)) < 0) goto finish; free(device); free(path); free(options); + free(options2); free(fstype); free(d); free(p); + free(o); } r = 0; @@ -1304,9 +1329,11 @@ finish: free(device); free(path); free(options); + free(options2); free(fstype); free(d); free(p); + free(o); return r; }