Try to resolve cgroup issue

Udev wants us to not start mdmon under its cgroup (it kills mdmon if we
leave it in udev's cgroup), so as part of the mdmon startup process, set
the child process to be part of the systemd cgroup instead.  However, if
we don't have cgroups, or there is no systemd cgroup, then just silently
move on.

Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Doug Ledford 2012-11-15 17:13:35 -05:00
parent 5fca48bd6d
commit 14c7631f2d
2 changed files with 39 additions and 1 deletions

33
mdadm-3.2.6-cgroup.patch Normal file
View File

@ -0,0 +1,33 @@
diff -up mdadm-3.2.6/util.c.cgroup mdadm-3.2.6/util.c
--- mdadm-3.2.6/util.c.cgroup 2012-11-15 16:48:03.327035349 -0500
+++ mdadm-3.2.6/util.c 2012-11-15 17:07:16.628751041 -0500
@@ -1611,6 +1611,21 @@ int mdmon_running(int devnum)
return 0;
}
+void set_cgroup(char *group)
+{
+ char pid[8];
+ char pathbuf[PATH_MAX];
+ int tasks_fd;
+
+ snprintf(pathbuf, PATH_MAX, "/sys/fs/cgroup/%s/tasks", group);
+ tasks_fd = open(pathbuf, O_WRONLY);
+ if (tasks_fd >= 0) {
+ snprintf(pid, sizeof(pid), "%d", getpid());
+ write(tasks_fd, pid, strlen(pid));
+ close(tasks_fd);
+ }
+}
+
int start_mdmon(int devnum)
{
int i, skipped;
@@ -1653,6 +1668,7 @@ int start_mdmon(int devnum)
for (i=0; paths[i]; i++)
if (paths[i][0]) {
+ set_cgroup("systemd");
if (__offroot) {
execl(paths[i], "mdmon", "--offroot",
devnum2devname(devnum),

View File

@ -1,7 +1,7 @@
Summary: The mdadm program controls Linux md devices (software RAID arrays) Summary: The mdadm program controls Linux md devices (software RAID arrays)
Name: mdadm Name: mdadm
Version: 3.2.6 Version: 3.2.6
Release: 1%{?dist} Release: 2%{?dist}
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.xz Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.xz
Source1: mdmonitor.init Source1: mdmonitor.init
Source2: raid-check Source2: raid-check
@ -12,6 +12,7 @@ Source6: mdmonitor.service
Source7: mdmonitor-takeover.service Source7: mdmonitor-takeover.service
Source8: mdadm.conf Source8: mdadm.conf
Source9: mdadm_event.conf Source9: mdadm_event.conf
Patch0: mdadm-3.2.6-cgroup.patch
# Fedora customization patches # Fedora customization patches
Patch97: mdadm-3.2.6-udev.patch Patch97: mdadm-3.2.6-udev.patch
Patch98: mdadm-2.5.2-static.patch Patch98: mdadm-2.5.2-static.patch
@ -54,6 +55,7 @@ is not used as the system init process.
%prep %prep
%setup -q %setup -q
%patch0 -p1 -b .cgroup
# Fedora customization patches # Fedora customization patches
%patch97 -p1 -b .udev %patch97 -p1 -b .udev
@ -135,6 +137,9 @@ rm -rf %{buildroot}
%{_initrddir}/* %{_initrddir}/*
%changelog %changelog
* Thu Nov 15 2012 Doug Ledford <dledford@redhat.com> - 3.2.6-2
- Modify mdadm to set the cgroup of mdmon to systemd if it's available
- Related bz873576 (and others)
* Thu Oct 25 2012 Jes Sorensen <Jes.Sorensen@redhat.com> - 3.2.6-1 * Thu Oct 25 2012 Jes Sorensen <Jes.Sorensen@redhat.com> - 3.2.6-1
- Upgrade to mdadm-3.2.6 - Upgrade to mdadm-3.2.6