Re: [systemd-devel] [PATCH 2/3] mount: move device links handling from generator

2013-08-26 Thread Harald Hoyer
On 08/21/2013 03:46 PM, Tom Gundersen wrote:
 On Wed, Aug 21, 2013 at 8:50 PM, Harald Hoyer harald.ho...@gmail.com wrote:
 On 08/21/2013 01:53 PM, Tom Gundersen wrote:
 -if (!isbind 
 -!path_equal(where, /)) {
 -
 -r = device_name(what, device);
 -if (r  0)
 -return r;
 -
 -if (r  0) {
 -free(lnk);
 -lnk = strjoin(arg_dest, /, device, 
 .wants/, name, NULL);
 -if (!lnk)
 -return log_oom();
 -
 -mkdir_parents_label(lnk, 0755);
 -if (symlink(unit, lnk)  0) {
 -log_error(Failed to create 
 symlink %s: %m, lnk);
 -return -errno;
 -}
 -}
 -}

 Hmm, why is this not needed anymore?
 
 It is now taken care of by:
 
 @@ -376,7 +383,11 @@ static int mount_add_device_links(Mount *m) {
  if (path_equal(m-where, /))
  return 0;
 
 -r = unit_add_node_link(UNIT(m), p-what, false);
 +if (UNIT(m)-default_dependencies  mount_is_auto(p) 
 +UNIT(m)-manager-running_as == SYSTEMD_SYSTEM)
 +device_wants_mount = true;
 +
 +r = unit_add_node_link(UNIT(m), p-what, device_wants_mount);
  if (r  0)
  return r;
 
 Or am I missing something?
 
 -t
 


Ah, ok, cool. Just asking. Looks good, if it works as expected.
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH 2/3] mount: move device links handling from generator

2013-08-21 Thread Tom Gundersen
Now, when default dependencies are enabled for a mount unit it will be WantedBy 
the respective devices.
---
 src/core/mount.c  | 13 +++-
 src/fstab-generator/fstab-generator.c | 40 +++
 2 files changed, 15 insertions(+), 38 deletions(-)

diff --git a/src/core/mount.c b/src/core/mount.c
index c7d29b0..566b3f6 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -338,6 +338,12 @@ static bool mount_is_bind(MountParameters *p) {
 return false;
 }
 
+static bool mount_is_auto(MountParameters *p) {
+assert(p);
+
+return !mount_test_option(p-options, noauto);
+}
+
 static bool needs_quota(MountParameters *p) {
 assert(p);
 
@@ -356,6 +362,7 @@ static bool needs_quota(MountParameters *p) {
 
 static int mount_add_device_links(Mount *m) {
 MountParameters *p;
+bool device_wants_mount = false;
 int r;
 
 assert(m);
@@ -376,7 +383,11 @@ static int mount_add_device_links(Mount *m) {
 if (path_equal(m-where, /))
 return 0;
 
-r = unit_add_node_link(UNIT(m), p-what, false);
+if (UNIT(m)-default_dependencies  mount_is_auto(p) 
+UNIT(m)-manager-running_as == SYSTEMD_SYSTEM)
+device_wants_mount = true;
+
+r = unit_add_node_link(UNIT(m), p-what, device_wants_mount);
 if (r  0)
 return r;
 
diff --git a/src/fstab-generator/fstab-generator.c 
b/src/fstab-generator/fstab-generator.c
index 6f352d1..e780018 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -170,16 +170,6 @@ static int add_swap(const char *what, struct mntent *me) {
 return 0;
 }
 
-static bool mount_is_bind(struct mntent *me) {
-assert(me);
-
-return
-hasmntopt(me, bind) ||
-streq(me-mnt_type, bind) ||
-hasmntopt(me, rbind) ||
-streq(me-mnt_type, rbind);
-}
-
 static bool mount_is_network(struct mntent *me) {
 assert(me);
 
@@ -205,14 +195,12 @@ static int add_mount(
 bool noauto,
 bool nofail,
 bool automount,
-bool isbind,
 const char *post,
 const char *source) {
 _cleanup_free_ char
 *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL,
 *automount_name = NULL, *automount_unit = NULL;
 _cleanup_fclose_ FILE *f = NULL;
-int r;
 
 assert(what);
 assert(where);
@@ -296,27 +284,6 @@ static int add_mount(
 return -errno;
 }
 }
-
-if (!isbind 
-!path_equal(where, /)) {
-
-r = device_name(what, device);
-if (r  0)
-return r;
-
-if (r  0) {
-free(lnk);
-lnk = strjoin(arg_dest, /, device, 
.wants/, name, NULL);
-if (!lnk)
-return log_oom();
-
-mkdir_parents_label(lnk, 0755);
-if (symlink(unit, lnk)  0) {
-log_error(Failed to create symlink 
%s: %m, lnk);
-return -errno;
-}
-}
-}
 }
 
 if (automount  !path_equal(where, /)) {
@@ -413,7 +380,7 @@ static int parse_fstab(const char *prefix, bool initrd) {
 if (streq(me-mnt_type, swap))
 k = add_swap(what, me);
 else {
-bool noauto, nofail, automount, isbind;
+bool noauto, nofail, automount;
 const char *post;
 
 noauto = !!hasmntopt(me, noauto);
@@ -421,7 +388,6 @@ static int parse_fstab(const char *prefix, bool initrd) {
 automount =
   hasmntopt(me, comment=systemd.automount) ||
   hasmntopt(me, x-systemd.automount);
-isbind = mount_is_bind(me);
 
 if (initrd) {
 post = SPECIAL_INITRD_FS_TARGET;
@@ -435,7 +401,7 @@ static int parse_fstab(const char *prefix, bool initrd) {
 
 k = add_mount(what, where, me-mnt_type, me-mnt_opts,
   me-mnt_passno, noauto, nofail, 
automount,
-  isbind, post, fstab_path);
+  post, fstab_path);
 }
 
 if (k  0)
@@ -523,7 +489,7 @@ static int parse_new_root_from_proc_cmdline(void) {
 
 log_debug(Found entry 

Re: [systemd-devel] [PATCH 2/3] mount: move device links handling from generator

2013-08-21 Thread Harald Hoyer
On 08/21/2013 01:53 PM, Tom Gundersen wrote:
 -if (!isbind 
 -!path_equal(where, /)) {
 -
 -r = device_name(what, device);
 -if (r  0)
 -return r;
 -
 -if (r  0) {
 -free(lnk);
 -lnk = strjoin(arg_dest, /, device, 
 .wants/, name, NULL);
 -if (!lnk)
 -return log_oom();
 -
 -mkdir_parents_label(lnk, 0755);
 -if (symlink(unit, lnk)  0) {
 -log_error(Failed to create symlink 
 %s: %m, lnk);
 -return -errno;
 -}
 -}
 -}

Hmm, why is this not needed anymore?
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH 2/3] mount: move device links handling from generator

2013-08-21 Thread Tom Gundersen
On Wed, Aug 21, 2013 at 8:50 PM, Harald Hoyer harald.ho...@gmail.com wrote:
 On 08/21/2013 01:53 PM, Tom Gundersen wrote:
 -if (!isbind 
 -!path_equal(where, /)) {
 -
 -r = device_name(what, device);
 -if (r  0)
 -return r;
 -
 -if (r  0) {
 -free(lnk);
 -lnk = strjoin(arg_dest, /, device, 
 .wants/, name, NULL);
 -if (!lnk)
 -return log_oom();
 -
 -mkdir_parents_label(lnk, 0755);
 -if (symlink(unit, lnk)  0) {
 -log_error(Failed to create symlink 
 %s: %m, lnk);
 -return -errno;
 -}
 -}
 -}

 Hmm, why is this not needed anymore?

It is now taken care of by:

@@ -376,7 +383,11 @@ static int mount_add_device_links(Mount *m) {
 if (path_equal(m-where, /))
 return 0;

-r = unit_add_node_link(UNIT(m), p-what, false);
+if (UNIT(m)-default_dependencies  mount_is_auto(p) 
+UNIT(m)-manager-running_as == SYSTEMD_SYSTEM)
+device_wants_mount = true;
+
+r = unit_add_node_link(UNIT(m), p-what, device_wants_mount);
 if (r  0)
 return r;

Or am I missing something?

-t
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel