Hello community,

here is the log from the commit of package systemd for openSUSE:Factory checked 
in at 2011-10-26 15:48:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/systemd (Old)
 and      /work/SRC/openSUSE:Factory/.systemd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "systemd", Maintainer is ""

Changes:
--------
--- /work/SRC/openSUSE:Factory/systemd/systemd-gtk.changes      2011-10-16 
12:59:29.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.systemd.new/systemd-gtk.changes 2011-10-26 
15:58:13.000000000 +0200
@@ -1,0 +2,11 @@
+Wed Oct 19 13:18:54 UTC 2011 - fcro...@suse.com
+
+- Add avoid-random-seed-cycle.patch: fix dependency cycle between
+  cryptsetup and random-seed-load (bnc#721666).
+- Add crash-isolating.patch: fix crash when isolating a service.
+- Fix bootsplash being killed too early.
+- Fix some manpages not being redirected properly.
+- Add storage-after-cryptsetup.service to restart lvm after
+  cryptsetup. Fixes lvm on top of LUKS (bnc#724238).
+
+-------------------------------------------------------------------
systemd.changes: same change

New:
----
  avoid-random-seed-cycle.patch
  crash-isolating.patch
  storage-after-cryptsetup.service

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ systemd.spec ++++++
--- /var/tmp/diff_new_pack.qjTTPO/_old  2011-10-26 15:59:43.000000000 +0200
+++ /var/tmp/diff_new_pack.qjTTPO/_new  2011-10-26 15:59:43.000000000 +0200
@@ -61,6 +61,7 @@
 Source8:        bootsplash-startup.service
 Source9:        bootsplash-quit.service
 Source10:       bootsplash-shutdown.service
+Source11:       storage-after-cryptsetup.service
 Patch1:         0001-Add-bootsplash-handling-for-password-dialogs.patch
 # handle SUSE specific kbd settings
 Patch6:         0001-handle-disable_caplock-and-compose_table-and-kbd_rat.patch
@@ -72,11 +73,13 @@
 Patch16:        modules_on_boot.patch
 Patch17:        private_tmp_crash.patch
 Patch18:        systemctl-completion-fix.patch
+Patch19:        avoid-random-seed-cycle.patch
 
 # Upstream First - Policy:
 # Never add any patches to this package without the upstream commit id
 # in the patch. Any patches added here without a very good reason to make
 # an exception will be silently removed with the next version update.
+Patch20:        crash-isolating.patch
 
 %description
 Systemd is a system and service manager, compatible with SysV and LSB
@@ -129,6 +132,8 @@
 %patch16 -p1
 %patch17 -p1
 %patch18 -p1
+%patch19 -p1
+%patch20 -p1
 
 %build
 autoreconf -fiv
@@ -147,6 +152,9 @@
 %install
 %makeinstall
 
+#fix manpages
+sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' 
%{buildroot}/%{_mandir}/*/*
+
 #workaround for 716939
 chmod 644 %{buildroot}%{_bindir}/systemd-analyze
 mkdir -p %{buildroot}%{_sysconfdir}/rpm
@@ -157,11 +165,12 @@
 # do not install, code has been fixed, might be useful in the future
 #install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators
 install -m755 %{S:7} %{buildroot}/lib/systemd/
-install -m644 %{S:8} %{S:9} %{S:10} %{buildroot}/lib/systemd/system/
+install -m644 %{S:8} %{S:9} %{S:10} %{S:11} %{buildroot}/lib/systemd/system/
 ln -s ../bootsplash-startup.service 
%{buildroot}/lib/systemd/system/basic.target.wants/
 ln -s ../bootsplash-quit.service 
%{buildroot}/lib/systemd/system/multi-user.target.wants/
 ln -s ../bootsplash-shutdown.service 
%{buildroot}/lib/systemd/system/shutdown.target.wants/
 ln -s ../bootsplash-shutdown.service 
%{buildroot}/lib/systemd/system/reboot.target.wants/
+ln -s ../storage-after-cryptsetup.service 
%{buildroot}/lib/systemd/system/local-fs.target.wants/
 ln -s ../bin/systemd %{buildroot}/sbin/init
 ln -s ../bin/systemctl %{buildroot}/sbin/reboot
 ln -s ../bin/systemctl %{buildroot}/sbin/halt

++++++ avoid-random-seed-cycle.patch ++++++

Devices with random keys (swap), should not be ordered before local-fs.target,
as this creates a cycle with systemd-load-random-seed.service (and also it
does not make sense, a swap device is not a local-fs).
---
 src/cryptsetup-generator.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c
index 6f3aa78..a48b7a4 100644
--- a/src/cryptsetup-generator.c
+++ b/src/cryptsetup-generator.c
@@ -112,8 +112,7 @@ static int create_disk(
                 "DefaultDependencies=no\n"
                 "BindTo=%s dev-mapper-%%i.device\n"
                 "After=systemd-readahead-collect.service 
systemd-readahead-replay.service %s\n"
-                "Before=umount.target\n"
-                "Before=local-fs.target\n",
+                "Before=umount.target\n",
                 d, d);
 
         if (!nofail)
@@ -125,6 +124,9 @@ static int create_disk(
                          streq(password, "/dev/hw_random")))
                 fprintf(f,
                         "After=systemd-random-seed-load.service\n");
+        else
+                fprintf(f,
+                        "Before=local-fs.target\n");
 
         fprintf(f,
                 "\n[Service]\n"
-- 
1.7.7

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

++++++ bootsplash-quit.service ++++++
--- /var/tmp/diff_new_pack.qjTTPO/_old  2011-10-26 15:59:43.000000000 +0200
+++ /var/tmp/diff_new_pack.qjTTPO/_new  2011-10-26 15:59:43.000000000 +0200
@@ -1,6 +1,7 @@
 [Unit]
 Description=Terminate bootsplash
 After=xdm.service rc-local.service bootsplash-startup.service
+Before=getty@tty1.service
 DefaultDependencies=no
 Names=plymout-quit-wait.service
 

++++++ crash-isolating.patch ++++++
>From 563ba9ea6e60774086555998b957edf923e24b46 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschm...@redhat.com>
Date: Mon, 17 Oct 2011 11:12:12 +0200
Subject: [PATCH] manager: fix a crash in isolating

HASHMAP_FOREACH is safe against the removal of the current entry, but
not against the removal of other entries. job_finish_and_invalidate()
can recursively remove other entries.

It triggered an assertion failure:
  Assertion 'j->installed' failed at src/manager.c:1218, function
  transaction_apply(). Aborting.

Fix the crash by iterating from the beginning when there is a
possibility that the iterator could be invalid.

It is O(n^2) in the worst case, but that's better than a crash.

https://bugzilla.redhat.com/show_bug.cgi?id=717325
---
 src/job.c     |   19 ++++++++++++++-----
 src/manager.c |    7 ++++++-
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/src/job.c b/src/job.c
index 5c0913b..20971da 100644
--- a/src/job.c
+++ b/src/job.c
@@ -527,6 +527,7 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
         Unit *other;
         JobType t;
         Iterator i;
+        bool recursed = false;
 
         assert(j);
         assert(j->installed);
@@ -573,23 +574,29 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
                                 if (other->meta.job &&
                                     (other->meta.job->type == JOB_START ||
                                      other->meta.job->type == 
JOB_VERIFY_ACTIVE ||
-                                     other->meta.job->type == 
JOB_RELOAD_OR_START))
+                                     other->meta.job->type == 
JOB_RELOAD_OR_START)) {
                                         
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+                                        recursed = true;
+                                }
 
                         SET_FOREACH(other, 
u->meta.dependencies[UNIT_BOUND_BY], i)
                                 if (other->meta.job &&
                                     (other->meta.job->type == JOB_START ||
                                      other->meta.job->type == 
JOB_VERIFY_ACTIVE ||
-                                     other->meta.job->type == 
JOB_RELOAD_OR_START))
+                                     other->meta.job->type == 
JOB_RELOAD_OR_START)) {
                                         
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+                                        recursed = true;
+                                }
 
                         SET_FOREACH(other, 
u->meta.dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i)
                                 if (other->meta.job &&
                                     !other->meta.job->override &&
                                     (other->meta.job->type == JOB_START ||
                                      other->meta.job->type == 
JOB_VERIFY_ACTIVE ||
-                                     other->meta.job->type == 
JOB_RELOAD_OR_START))
+                                     other->meta.job->type == 
JOB_RELOAD_OR_START)) {
                                         
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+                                        recursed = true;
+                                }
 
                 } else if (t == JOB_STOP) {
 
@@ -597,8 +604,10 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
                                 if (other->meta.job &&
                                     (other->meta.job->type == JOB_START ||
                                      other->meta.job->type == 
JOB_VERIFY_ACTIVE ||
-                                     other->meta.job->type == 
JOB_RELOAD_OR_START))
+                                     other->meta.job->type == 
JOB_RELOAD_OR_START)) {
                                         
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+                                        recursed = true;
+                                }
                 }
         }
 
@@ -626,7 +635,7 @@ finish:
 
         manager_check_finished(u->meta.manager);
 
-        return 0;
+        return recursed;
 }
 
 int job_start_timer(Job *j) {
diff --git a/src/manager.c b/src/manager.c
index e626347..6d20258 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -1214,13 +1214,18 @@ static int transaction_apply(Manager *m, JobMode mode) {
 
                 /* When isolating first kill all installed jobs which
                  * aren't part of the new transaction */
+        rescan:
                 HASHMAP_FOREACH(j, m->jobs, i) {
                         assert(j->installed);
 
                         if (hashmap_get(m->transaction_jobs, j->unit))
                                 continue;
 
-                        job_finish_and_invalidate(j, JOB_CANCELED);
+                        /* 'j' itself is safe to remove, but if other jobs
+                           are invalidated recursively, our iterator may become
+                           invalid and we need to start over. */
+                        if (job_finish_and_invalidate(j, JOB_CANCELED) > 0)
+                                goto rescan;
                 }
         }
 
-- 
1.7.3.4

++++++ storage-after-cryptsetup.service ++++++
[Unit]
Description=Restart storage after crypsetup
DefaultDependencies=no
Before=local-fs.target shutdown.target
After=cryptsetup.target
Wants=cryptsetup.target

[Service]
RemainAfterExit=true
Type=oneshot
TimeoutSec=0
ExecStart=/bin/systemctl restart lvm.service
++++++ systemd-bootsplash ++++++
--- /var/tmp/diff_new_pack.qjTTPO/_old  2011-10-26 15:59:43.000000000 +0200
+++ /var/tmp/diff_new_pack.qjTTPO/_new  2011-10-26 15:59:43.000000000 +0200
@@ -3,6 +3,17 @@
 export RUNLEVEL=$1
 export PREVLEVEL=N
 if [ "$1" == "5" ]; then
+  /bin/systemctl status --no-pager default.target | grep -q graphical.target 
+  if [ $? -eq 0 ]; then
+    declare -i timeout
+    timeout=0
+    console=`fgconsole`
+    while [ $console -eq 1 -a $timeout -lt 30 ]  ; do 
+     sleep 1
+     timeout+=1
+     console=`fgconsole`
+    done
+  fi
   splashtrigger "rlreached $1"
 else
   splashtrigger "rlchange $1"

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to