Re: [systemd-devel] /etc/systemd/system/default.target.wants/ no longer checked for unit files

2017-07-16 Thread Richard W.M. Jones
On Sun, Jul 16, 2017 at 04:31:40PM +0200, Lennart Poettering wrote:
> default.target and multi-user.target are quite different:
> 
> For system services, default.target is generally an alias for either
> multi-user.target or graphical.target, but can point to anything else,
> too. By dropping in your deps into default.target you say "whatever
> the user picks as default, even if it is emergency.target, I want my
> service started".

Thanks Lennart, this is an interesting take which I hadn't thought
about before.  I think I will change virt-customize so it drops these
firstboot services into multi-user.target instead.

> For user services, default.target is a regular unit, and not an alias,
> as there things are usually quite a bit simpler.
> 
> Do note that if the user starts his system with a special
> runlevel/target specified on the kernel cmdline, default.target has no
> effect, as we don't bother with it then but directly boot into the
> specified name.
>
> Hence, unless you are really really sure your stuff should be loaded
> under all conditions, then default.target in system mode might be an
> option. In most cases however that's not desirable, and
> multi-user.target is the better place (or graphical.target, or so).

... And also for these reasons.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] /etc/systemd/system/default.target.wants/ no longer checked for unit files

2017-07-14 Thread Richard W.M. Jones
On Fri, Jul 14, 2017 at 01:24:53PM +0300, Mantas Mikul─Śnas wrote:
> On Fri, Jul 14, 2017 at 12:13 PM, Richard W.M. Jones <rjo...@redhat.com>
> wrote:
> 
> >
> > https://github.com/systemd/systemd/issues/6334
> >
> > Since this commit
> > https://github.com/systemd/systemd/commit/2d058a87ffb2d31a50422a8aebd119
> > bbb4427244
> > (in v233 and v234), you can no longer create
> > /etc/systemd/system/default.target.wants/ and drop in service files
> > (or symlinks).  The directory is skipped.  I have reverted the commit
> > on top of systemd from git and that makes defaults.target.wants work
> > again.
> >
> > Is this supposed to work?  It worked fine since at least Fedora 18-25,
> > but it is now broken in Fedora 26.
> >
> > If it was never supposed to work, how are you supposed to enable a
> > service for the default target, even allowing for the user to change
> > the default target and still have the service enabled?
> >
> 
> The current convention is to install all regular services into
> multi-user.target, and I would expect all custom "daily use" targets to be
> superset of multi-user.target as well, like the provided graphical.target
> already is.
> 
> IMHO, don't try to second-guess the user. If they know how to create custom
> targets, they'll probably know how to look what's inside their
> multi-user.target.wants/ and deal with it.

The commit seems as if it was intended to be pure optimization, and
yet it breaks an existing use case.  Also the documentation doesn't
mention anything about default.target.wants being deprecated.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] /etc/systemd/system/default.target.wants/ no longer checked for unit files

2017-07-14 Thread Richard W.M. Jones

https://github.com/systemd/systemd/issues/6334

Since this commit
https://github.com/systemd/systemd/commit/2d058a87ffb2d31a50422a8aebd119bbb4427244
(in v233 and v234), you can no longer create
/etc/systemd/system/default.target.wants/ and drop in service files
(or symlinks).  The directory is skipped.  I have reverted the commit
on top of systemd from git and that makes defaults.target.wants work
again.

Is this supposed to work?  It worked fine since at least Fedora 18-25,
but it is now broken in Fedora 26.

If it was never supposed to work, how are you supposed to enable a
service for the default target, even allowing for the user to change
the default target and still have the service enabled?

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH] architecture: Add support for the RISC-V architecture.

2017-02-10 Thread Richard W.M. Jones
On Fri, Sep 30, 2016 at 04:45:01PM +0100, Richard W.M. Jones wrote:
> Signed-off-by: Richard W.M. Jones <rjo...@redhat.com>
> ---
>  src/basic/architecture.c | 14 ++
>  src/basic/architecture.h | 16 
>  2 files changed, 30 insertions(+)
> 
> diff --git a/src/basic/architecture.c b/src/basic/architecture.c
> index b1c8e91..e1412be 100644
> --- a/src/basic/architecture.c
> +++ b/src/basic/architecture.c
> @@ -123,6 +123,17 @@ int uname_architecture(void) {
>  { "crisv32",ARCHITECTURE_CRIS },
>  #elif defined(__nios2__)
>  { "nios2",  ARCHITECTURE_NIOS2},
> +#elif defined(__riscv__)
> +{ "riscv32",ARCHITECTURE_RISCV32  },
> +{ "riscv64",ARCHITECTURE_RISCV64  },
> +{ "riscv128",   ARCHITECTURE_RISCV128 },
> +#  if __SIZEOF_POINTER__ == 4
> +{ "riscv",  ARCHITECTURE_RISCV32  },
> +#  elif __SIZEOF_POINTER__ == 8
> +{ "riscv",  ARCHITECTURE_RISCV64  },
> +#  elif __SIZEOF_POINTER__ == 16
> +{ "riscv",  ARCHITECTURE_RISCV128 },
> +#  endif

I just want to say that after this change, RISC-V unilaterally removed
__riscv__ (and __riscv64 etc which other projects were using).  I'm
very annoyed about that as it breaks many patches that I sent upstream
including to systemd.

GCC changes for RISC-V have subsequently been accepted upstream, so
they cannot do this again.

The change is simply s/__riscv__/__riscv/g ie:

> -#elif defined(__riscv__)
> +#elif defined(__riscv)

As we will need to rebuild the whole of Fedora/RISC-V to cope with
this and other changes, I don't currently have a working GCC (and less
still a working systemd) so I can't submit a formal patch right now.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH] architecture: Add support for the RISC-V architecture.

2016-10-04 Thread Richard W.M. Jones
On Tue, Oct 04, 2016 at 03:36:48PM +0200, Lennart Poettering wrote:
> I created a github PR from this:
> 
> https://github.com/systemd/systemd/pull/4282
> 
> Would be good to follow up discussion there.

Thanks for the feedback Lennart.  Just FYI we are still building and
testing this package.  It's very painful and slow to compile, so
everything takes 10x longer than normal.  I'll follow up at the link
above when we have verified that it all or at least mostly works.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH] architecture: Add support for the RISC-V architecture.

2016-09-30 Thread Richard W.M. Jones
Signed-off-by: Richard W.M. Jones <rjo...@redhat.com>
---
 src/basic/architecture.c | 14 ++
 src/basic/architecture.h | 16 
 2 files changed, 30 insertions(+)

diff --git a/src/basic/architecture.c b/src/basic/architecture.c
index b1c8e91..e1412be 100644
--- a/src/basic/architecture.c
+++ b/src/basic/architecture.c
@@ -123,6 +123,17 @@ int uname_architecture(void) {
 { "crisv32",ARCHITECTURE_CRIS },
 #elif defined(__nios2__)
 { "nios2",  ARCHITECTURE_NIOS2},
+#elif defined(__riscv__)
+{ "riscv32",ARCHITECTURE_RISCV32  },
+{ "riscv64",ARCHITECTURE_RISCV64  },
+{ "riscv128",   ARCHITECTURE_RISCV128 },
+#  if __SIZEOF_POINTER__ == 4
+{ "riscv",  ARCHITECTURE_RISCV32  },
+#  elif __SIZEOF_POINTER__ == 8
+{ "riscv",  ARCHITECTURE_RISCV64  },
+#  elif __SIZEOF_POINTER__ == 16
+{ "riscv",  ARCHITECTURE_RISCV128 },
+#  endif
 #else
 #error "Please register your architecture here!"
 #endif
@@ -174,6 +185,9 @@ static const char *const 
architecture_table[_ARCHITECTURE_MAX] = {
 [ARCHITECTURE_TILEGX] = "tilegx",
 [ARCHITECTURE_CRIS] = "cris",
 [ARCHITECTURE_NIOS2] = "nios2",
+[ARCHITECTURE_RISCV32] = "riscv32",
+[ARCHITECTURE_RISCV64] = "riscv64",
+[ARCHITECTURE_RISCV128] = "riscv128",
 };
 
 DEFINE_STRING_TABLE_LOOKUP(architecture, int);
diff --git a/src/basic/architecture.h b/src/basic/architecture.h
index b3e4d85..b8830fc 100644
--- a/src/basic/architecture.h
+++ b/src/basic/architecture.h
@@ -58,6 +58,9 @@ enum {
 ARCHITECTURE_TILEGX,
 ARCHITECTURE_CRIS,
 ARCHITECTURE_NIOS2,
+ARCHITECTURE_RISCV32,
+ARCHITECTURE_RISCV64,
+ARCHITECTURE_RISCV128,
 _ARCHITECTURE_MAX,
 _ARCHITECTURE_INVALID = -1
 };
@@ -191,6 +194,19 @@ int uname_architecture(void);
 #elif defined(__nios2__)
 #  define native_architecture() ARCHITECTURE_NIOS2
 #  define LIB_ARCH_TUPLE "nios2-linux-gnu"
+#elif defined(__riscv__)
+#  if __SIZEOF_POINTER__ == 4
+#define native_architecture() ARCHITECTURE_RISCV32
+#define LIB_ARCH_TUPLE "riscv32-linux-gnu"
+#  elif __SIZEOF_POINTER__ == 8
+#define native_architecture() ARCHITECTURE_RISCV64
+#define LIB_ARCH_TUPLE "riscv64-linux-gnu"
+#  elif __SIZEOF_POINTER__ == 16
+#define native_architecture() ARCHITECTURE_RISCV128
+#define LIB_ARCH_TUPLE "riscv128-linux-gnu"
+#  else
+#error "Unrecognized riscv architecture variant"
+#  endif
 #else
 #  error "Please register your architecture here!"
 #endif
-- 
2.7.4

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


[systemd-devel] [PATCH] architecture: Add support for the RISC-V architecture.

2016-09-30 Thread Richard W.M. Jones
[This is only compile-tested, as our kernel doesn't (yet) have
enough configured features to run systemd, but I'll report back
when I get it running.]

RISC-V is an open source ISA in development since 2010 at UCB.
For more information, see https://riscv.org/

I am adding RISC-V support to Fedora:
https://fedoraproject.org/wiki/Architectures/RISC-V

There are three major variants of the architecture (32-, 64- and
128-bit).  The 128-bit variant is a paper exercise, but the other two
really exist in silicon.  RISC-V is always little endian.

On Linux, the default kernel uname(2) can return "riscv" for all
variants.  However a patch was added recently which makes the kernel
return one of "riscv32" or "riscv64" (or in future "riscv128").  So
systemd should be prepared to handle any of "riscv", "riscv32",
"riscv64" or "riscv128".  If the kernel returns "riscv" then you
need to use the pointer size in order to know the real variant.

The Fedora/RISC-V kernel only ever returns "riscv64" since we're only
doing Fedora for 64 bit at the moment, and we've patched the kernel so
it doesn't return "riscv".

As well as the major bitsize variants, there are also architecture
extensions.  However I'm trying to ensure that uname(2) does *not*
return any other information about those in utsname.machine, so that
we don't end up with "riscv64abcde" nonsense.  Instead those
extensions will be exposed in /proc/cpuinfo similar to how flags work
in x86.

I should also note that __SIZEOF_POINTER__ is a GCC extension, but it
appears to be used already in systemd so I guess that's OK.

Rich.

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


Re: [systemd-devel] 220 udev boot regression: timeout, giving up waiting for workers to finish

2015-05-28 Thread Richard W.M. Jones
On Wed, May 27, 2015 at 07:08:41PM +0200, Tom Gundersen wrote:
 This should be fixed by 86c3bece38bcf55da6387d20c6f01da9ad0284dc.
 Thanks for the help in debugging this, and sorry for the
 inconvenience.

Also this fixes a bug where 'udevadm settle' would go into a loop for
a few minutes after you create a new partition (RHBZ#1225641).

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH] udev: Remove hard-coded string offsets when parsing kernel command line.

2014-11-05 Thread Richard W.M. Jones
---
 src/udev/udevd.c | 23 ---
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 193702c..340812b 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -968,6 +968,7 @@ static void kernel_cmdline_options(struct udev *udev) {
 
 FOREACH_WORD_QUOTED(word, l, line, state) {
 char *s, *opt;
+const char *name;
 
 s = strndup(word, l);
 if (!s)
@@ -979,24 +980,24 @@ static void kernel_cmdline_options(struct udev *udev) {
 else
 opt = s;
 
-if (startswith(opt, udev.log-priority=)) {
+if (startswith(opt, name = udev.log-priority=)) {
 int prio;
 
-prio = util_log_priority(opt + 18);
+prio = util_log_priority(opt + strlen(name));
 log_set_max_level(prio);
 udev_set_log_priority(udev, prio);
-} else if (startswith(opt, udev.children-max=)) {
-r = safe_atoi(opt + 18, arg_children_max);
+} else if (startswith(opt, name = udev.children-max=)) {
+r = safe_atoi(opt + strlen(name), arg_children_max);
 if (r  0)
-log_warning(Invalid udev.children-max 
ignored: %s, opt + 18);
-} else if (startswith(opt, udev.exec-delay=)) {
-r = safe_atoi(opt + 16, arg_exec_delay);
+log_warning(Invalid udev.children-max 
ignored: %s, opt + strlen(name));
+} else if (startswith(opt, name = udev.exec-delay=)) {
+r = safe_atoi(opt + strlen(name), arg_exec_delay);
 if (r  0)
-log_warning(Invalid udev.exec-delay ignored: 
%s, opt + 16);
-} else if (startswith(opt, udev.event-timeout=)) {
-r = safe_atou64(opt + 19, arg_event_timeout_usec);
+log_warning(Invalid udev.exec-delay ignored: 
%s, opt + strlen(name));
+} else if (startswith(opt, name = udev.event-timeout=)) {
+r = safe_atou64(opt + strlen(name), 
arg_event_timeout_usec);
 if (r  0) {
-log_warning(Invalid udev.event-timeout 
ignored: %s, opt + 19);
+log_warning(Invalid udev.event-timeout 
ignored: %s, opt + strlen(name));
 break;
 }
 arg_event_timeout_usec *= USEC_PER_SEC;
-- 
2.1.0

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


[systemd-devel] [PATCH] udev: Remove hard-coded string offsets when parsing kernel

2014-11-05 Thread Richard W.M. Jones
This avoids the hard-coded string offsets by using strlen.

It's a bit of a strange coding style.

Mainly I was interested to see if gcc could optimize this, and
(gcc-4.9.2 / x86-64 / -O2) it did - all calls to strlen are removed
from the assembly and replaced by constants.

When I compile systemd normally, it recommends using -O0 so of course
no optimization is done and all the calls to strlen are still there.

Rich.

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


Re: [systemd-devel] [PATCH] udev: Remove hard-coded string offsets when parsing kernel command line.

2014-11-05 Thread Richard W.M. Jones
On Wed, Nov 05, 2014 at 12:54:21PM +0100, David Herrmann wrote:
 Hi
 
 On Wed, Nov 5, 2014 at 10:16 AM, Richard W.M. Jones rjo...@redhat.com wrote:
  ---
   src/udev/udevd.c | 23 ---
   1 file changed, 12 insertions(+), 11 deletions(-)
 
  diff --git a/src/udev/udevd.c b/src/udev/udevd.c
  index 193702c..340812b 100644
  --- a/src/udev/udevd.c
  +++ b/src/udev/udevd.c
  @@ -968,6 +968,7 @@ static void kernel_cmdline_options(struct udev *udev) {
 
   FOREACH_WORD_QUOTED(word, l, line, state) {
   char *s, *opt;
  +const char *name;
 
   s = strndup(word, l);
   if (!s)
  @@ -979,24 +980,24 @@ static void kernel_cmdline_options(struct udev *udev) 
  {
   else
   opt = s;
 
  -if (startswith(opt, udev.log-priority=)) {
  +if (startswith(opt, name = udev.log-priority=)) {
 
 This looks weird. Note that startswith() returns a pointer to the
 offset, so maybe we should restructure like this:
 
 if ((value = startswith(opt, udev.log-priority))) {
 prio = util_log_priority(value);
 
 }

Ah ... yes, that would be better.

Rich.

 I will try to fix this up myself. Lets see..
 
 Thanks
 David
 
   int prio;
 
  -prio = util_log_priority(opt + 18);
  +prio = util_log_priority(opt + strlen(name));
   log_set_max_level(prio);
   udev_set_log_priority(udev, prio);
  -} else if (startswith(opt, udev.children-max=)) {
  -r = safe_atoi(opt + 18, arg_children_max);
  +} else if (startswith(opt, name = udev.children-max=)) {
  +r = safe_atoi(opt + strlen(name), 
  arg_children_max);
   if (r  0)
  -log_warning(Invalid udev.children-max 
  ignored: %s, opt + 18);
  -} else if (startswith(opt, udev.exec-delay=)) {
  -r = safe_atoi(opt + 16, arg_exec_delay);
  +log_warning(Invalid udev.children-max 
  ignored: %s, opt + strlen(name));
  +} else if (startswith(opt, name = udev.exec-delay=)) {
  +r = safe_atoi(opt + strlen(name), arg_exec_delay);
   if (r  0)
  -log_warning(Invalid udev.exec-delay 
  ignored: %s, opt + 16);
  -} else if (startswith(opt, udev.event-timeout=)) {
  -r = safe_atou64(opt + 19, arg_event_timeout_usec);
  +log_warning(Invalid udev.exec-delay 
  ignored: %s, opt + strlen(name));
  +} else if (startswith(opt, name = udev.event-timeout=)) {
  +r = safe_atou64(opt + strlen(name), 
  arg_event_timeout_usec);
   if (r  0) {
  -log_warning(Invalid udev.event-timeout 
  ignored: %s, opt + 19);
  +log_warning(Invalid udev.event-timeout 
  ignored: %s, opt + strlen(name));
   break;
   }
   arg_event_timeout_usec *= USEC_PER_SEC;
  --
  2.1.0
 
  ___
  systemd-devel mailing list
  systemd-devel@lists.freedesktop.org
  http://lists.freedesktop.org/mailman/listinfo/systemd-devel

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH] udev: Fix parsing of udev.event-timeout kernel parameter.

2014-11-04 Thread Richard W.M. Jones
---
 src/udev/udevd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 2e6c713..206a4d3 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -994,7 +994,7 @@ static void kernel_cmdline_options(struct udev *udev) {
 if (r  0)
 log_warning(Invalid udev.exec-delay ignored: 
%s, opt + 16);
 } else if (startswith(opt, udev.event-timeout=)) {
-r = safe_atou64(opt + 16, arg_event_timeout_usec);
+r = safe_atou64(opt + 19, arg_event_timeout_usec);
 if (r  0) {
 log_warning(Invalid udev.event-timeout 
ignored: %s, opt + 16);
 break;
-- 
2.1.0

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


[systemd-devel] [PATCH v2] udev: Fix parsing of udev.event-timeout kernel parameter.

2014-11-04 Thread Richard W.M. Jones
---
 src/udev/udevd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 2e6c713..193702c 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -994,9 +994,9 @@ static void kernel_cmdline_options(struct udev *udev) {
 if (r  0)
 log_warning(Invalid udev.exec-delay ignored: 
%s, opt + 16);
 } else if (startswith(opt, udev.event-timeout=)) {
-r = safe_atou64(opt + 16, arg_event_timeout_usec);
+r = safe_atou64(opt + 19, arg_event_timeout_usec);
 if (r  0) {
-log_warning(Invalid udev.event-timeout 
ignored: %s, opt + 16);
+log_warning(Invalid udev.event-timeout 
ignored: %s, opt + 19);
 break;
 }
 arg_event_timeout_usec *= USEC_PER_SEC;
-- 
2.1.0

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


[systemd-devel] [PATCH v2] udev: Fix parsing of udev.event-timeout kernel parameter.

2014-11-04 Thread Richard W.M. Jones
v2:

 - Fix the warning message too (thanks Ronny Chevalier).

In reply to Ronny's comment about using strlen: I agree, but that's a
rather larger patch than I need to fix my immediate bug.

Rich.

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