Re: [systemd-devel] [RFC 4/4] add remote-fs dependencies if needed after change
On Sun, Nov 09, 2014 at 08:32:05AM +0300, Andrei Borzenkov wrote: > В Thu, 6 Nov 2014 21:11:03 -0800 > Chris Leech пишет: > > > This is an attempt to add it the remote-fs dependencies to a mount unit > > if the options change, like when the utab options are picked up after > > mountinfo has already been processed. It just adds the remote-fs > > dependencies, leaving the local-fs ones in place. > > > > With this change I always get mount units with proper remote-fs > > dependencies when mounted with the _netdev option. > > > > It it not working for -o remount,_netdev. But that looks like a > > libmount issue in that the ROOT field is not being set in utab on a > > remount, so if the initial mount did not require a utab entry then > > remount options never get merge in properly in mnt_table_parse_mtab > > --- > > src/core/mount.c | 13 + > > 1 file changed, 13 insertions(+) > > > > diff --git a/src/core/mount.c b/src/core/mount.c > > index 7d77021..092a720 100644 > > --- a/src/core/mount.c > > +++ b/src/core/mount.c > > @@ -1436,6 +1436,19 @@ static int mount_add_one( > > } > > } > > > > +if (m->running_as == SYSTEMD_SYSTEM) { > > +const char* target; > > + > > +target = mount_needs_network(options, fstype) ? > > SPECIAL_REMOTE_FS_TARGET : NULL; > > +/* _netdev option may have shown up late, or on a > > + * remount. Add remote-fs dependencies, even though > > + * local-fs ones may already be there */ > > +if (target) { > > +unit_add_dependency_by_name(u, > > UNIT_BEFORE, target, NULL, true); > > +load_extras = true; > > +} > > +} > > Should not it also add After on network.target to ensure it is > unmounted before network is down on shutdown? May be simply calling > mount_add_default_dependencies() would be appropriate here. Setting load_extras to true causes mount_add_extras to be called further down in this function, which calls mount_add_default_dependencies. So in testing I did see the After get added as well. But if there's a better way to clean up the mount unit adding code I'm all for it. - Chris ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] [RFC 4/4] add remote-fs dependencies if needed after change
On Thu, Nov 06, 2014 at 09:11:03PM -0800, Chris Leech wrote: > It it not working for -o remount,_netdev. But that looks like a > libmount issue in that the ROOT field is not being set in utab on a > remount, so if the initial mount did not require a utab entry then > remount options never get merge in properly in mnt_table_parse_mtab Fixed in util-linux git tree. Thanks. Karel -- Karel Zak http://karelzak.blogspot.com ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] [RFC 4/4] add remote-fs dependencies if needed after change
В Thu, 6 Nov 2014 21:11:03 -0800 Chris Leech пишет: > This is an attempt to add it the remote-fs dependencies to a mount unit > if the options change, like when the utab options are picked up after > mountinfo has already been processed. It just adds the remote-fs > dependencies, leaving the local-fs ones in place. > > With this change I always get mount units with proper remote-fs > dependencies when mounted with the _netdev option. > > It it not working for -o remount,_netdev. But that looks like a > libmount issue in that the ROOT field is not being set in utab on a > remount, so if the initial mount did not require a utab entry then > remount options never get merge in properly in mnt_table_parse_mtab > --- > src/core/mount.c | 13 + > 1 file changed, 13 insertions(+) > > diff --git a/src/core/mount.c b/src/core/mount.c > index 7d77021..092a720 100644 > --- a/src/core/mount.c > +++ b/src/core/mount.c > @@ -1436,6 +1436,19 @@ static int mount_add_one( > } > } > > +if (m->running_as == SYSTEMD_SYSTEM) { > +const char* target; > + > +target = mount_needs_network(options, fstype) ? > SPECIAL_REMOTE_FS_TARGET : NULL; > +/* _netdev option may have shown up late, or on a > + * remount. Add remote-fs dependencies, even though > + * local-fs ones may already be there */ > +if (target) { > +unit_add_dependency_by_name(u, UNIT_BEFORE, > target, NULL, true); Should not it also add After on network.target to ensure it is unmounted before network is down on shutdown? May be simply calling mount_add_default_dependencies() would be appropriate here. > +load_extras = true; > +} > +} > + > if (u->load_state == UNIT_NOT_FOUND) { > u->load_state = UNIT_LOADED; > u->load_error = 0; ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] [RFC 4/4] add remote-fs dependencies if needed after change
This is an attempt to add it the remote-fs dependencies to a mount unit if the options change, like when the utab options are picked up after mountinfo has already been processed. It just adds the remote-fs dependencies, leaving the local-fs ones in place. With this change I always get mount units with proper remote-fs dependencies when mounted with the _netdev option. It it not working for -o remount,_netdev. But that looks like a libmount issue in that the ROOT field is not being set in utab on a remount, so if the initial mount did not require a utab entry then remount options never get merge in properly in mnt_table_parse_mtab --- src/core/mount.c | 13 + 1 file changed, 13 insertions(+) diff --git a/src/core/mount.c b/src/core/mount.c index 7d77021..092a720 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1436,6 +1436,19 @@ static int mount_add_one( } } +if (m->running_as == SYSTEMD_SYSTEM) { +const char* target; + +target = mount_needs_network(options, fstype) ? SPECIAL_REMOTE_FS_TARGET : NULL; +/* _netdev option may have shown up late, or on a + * remount. Add remote-fs dependencies, even though + * local-fs ones may already be there */ +if (target) { +unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true); +load_extras = true; +} +} + if (u->load_state == UNIT_NOT_FOUND) { u->load_state = UNIT_LOADED; u->load_error = 0; -- 1.9.3 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel