forked from pool/mdadm
- mdmonitor
run "mdadm --monitor" from systemd instead of init.d sciprt (bnc#849523) - remove mdadmd due to above. - udev-rules-try-mdadm-I-on-change-events.patch (bnc#851993) - policy-NULL-path-isn-t-really-acceptable-use-the-dev.patch - DDF-really-ignore-DDF-metadata-on-partitions.patch - Assemble-avoid-infinite-loop-when-auto-assembling-pa.patch - DDF-fix-detection-of-failed-devices-during-assembly.patch - Grow-fix-problems-with-prematurely-aborting-of-resha.patch - IMSM-don-t-crash-when-creating-an-array-with-missing.patch - mdmon-don-t-complain-about-notifying-parent-when-the.patch - systemd-mdmon-set-IMSM_NO_PLATFORM-1.patch - mdmon-.service-remove-over-ride-of-Standard-IO.patch Various upstream bug fixes. OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=101
This commit is contained in:
parent
976798c0df
commit
702c57405a
34
Assemble-avoid-infinite-loop-when-auto-assembling-pa.patch
Normal file
34
Assemble-avoid-infinite-loop-when-auto-assembling-pa.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From 284546ef89168c9003da192a177cae774199f889 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Mon, 20 Jan 2014 15:23:31 +1100
|
||||||
|
Subject: [PATCH 07/13] Assemble: avoid infinite loop when auto-assembling
|
||||||
|
partial container.
|
||||||
|
|
||||||
|
When auto-assembling we loop until we get no successes.
|
||||||
|
|
||||||
|
If a device is found that look like it is part of an already-existing
|
||||||
|
container, but we subsequently fail to add that device, then the fact
|
||||||
|
that the container is running looks like a success. This can result
|
||||||
|
in infinite looping.
|
||||||
|
So if a container was already partially assemble, and is still only
|
||||||
|
partially assembled after we try to add devices, then don't treat that
|
||||||
|
as success.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
Assemble.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/Assemble.c
|
||||||
|
+++ mdadm-3.3/Assemble.c
|
||||||
|
@@ -990,6 +990,10 @@ static int start_array(int mdfd,
|
||||||
|
}
|
||||||
|
st->ss->free_super(st);
|
||||||
|
sysfs_uevent(content, "change");
|
||||||
|
+ if (err_ok && okcnt < (unsigned)content->array.raid_disks)
|
||||||
|
+ /* Was partial, is still partial, so signal an error
|
||||||
|
+ * to ensure we don't retry */
|
||||||
|
+ return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
79
DDF-fix-detection-of-failed-devices-during-assembly.patch
Normal file
79
DDF-fix-detection-of-failed-devices-during-assembly.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From f0e876ce03a63f150bb87b2734c139bc8bb285b2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Mon, 20 Jan 2014 15:27:29 +1100
|
||||||
|
Subject: [PATCH 08/13] DDF: fix detection of failed devices during assembly.
|
||||||
|
|
||||||
|
When we call "getinfo_super", we report the working/failed status
|
||||||
|
of the particular device, and also (via the 'map') the working/failed
|
||||||
|
status of every other device that this metadata is aware of.
|
||||||
|
|
||||||
|
It is important that the way we calculate "working or failed" is
|
||||||
|
consistent.
|
||||||
|
As it is, getinfo_super_ddf() will report a spare as "working", but
|
||||||
|
every other device will see it as "failed", which leads to failure to
|
||||||
|
assemble arrays with spares.
|
||||||
|
|
||||||
|
For getinfo_super_ddf (i.e. for the container), a device is assumed
|
||||||
|
"working" unless flagged as DDF_Failed.
|
||||||
|
For getinfo_super_ddf_bvd (for a member array), a device is assumed
|
||||||
|
"failed" unless DDF_Online is set, and DDF_Failed is not set.
|
||||||
|
|
||||||
|
Reported-by: "David F." <df7729@gmail.com>
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
super-ddf.c | 18 ++++++++++++++----
|
||||||
|
1 file changed, 14 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/super-ddf.c
|
||||||
|
+++ mdadm-3.3/super-ddf.c
|
||||||
|
@@ -1914,6 +1914,7 @@ static void getinfo_super_ddf(struct sup
|
||||||
|
info->disk.major = 0;
|
||||||
|
info->disk.minor = 0;
|
||||||
|
if (ddf->dlist) {
|
||||||
|
+ struct phys_disk_entry *pde = NULL;
|
||||||
|
info->disk.number = be32_to_cpu(ddf->dlist->disk.refnum);
|
||||||
|
info->disk.raid_disk = find_phys(ddf, ddf->dlist->disk.refnum);
|
||||||
|
|
||||||
|
@@ -1921,12 +1922,19 @@ static void getinfo_super_ddf(struct sup
|
||||||
|
entries[info->disk.raid_disk].
|
||||||
|
config_size);
|
||||||
|
info->component_size = ddf->dlist->size - info->data_offset;
|
||||||
|
+ if (info->disk.raid_disk >= 0)
|
||||||
|
+ pde = ddf->phys->entries + info->disk.raid_disk;
|
||||||
|
+ if (pde &&
|
||||||
|
+ !(be16_to_cpu(pde->state) & DDF_Failed))
|
||||||
|
+ info->disk.state = (1 << MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE);
|
||||||
|
+ else
|
||||||
|
+ info->disk.state = 1 << MD_DISK_FAULTY;
|
||||||
|
} else {
|
||||||
|
info->disk.number = -1;
|
||||||
|
info->disk.raid_disk = -1;
|
||||||
|
// info->disk.raid_disk = find refnum in the table and use index;
|
||||||
|
+ info->disk.state = (1 << MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE);
|
||||||
|
}
|
||||||
|
- info->disk.state = (1 << MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE);
|
||||||
|
|
||||||
|
info->recovery_start = MaxSector;
|
||||||
|
info->reshape_active = 0;
|
||||||
|
@@ -1944,8 +1952,6 @@ static void getinfo_super_ddf(struct sup
|
||||||
|
int i;
|
||||||
|
for (i = 0 ; i < map_disks; i++) {
|
||||||
|
if (i < info->array.raid_disks &&
|
||||||
|
- (be16_to_cpu(ddf->phys->entries[i].state)
|
||||||
|
- & DDF_Online) &&
|
||||||
|
!(be16_to_cpu(ddf->phys->entries[i].state)
|
||||||
|
& DDF_Failed))
|
||||||
|
map[i] = 1;
|
||||||
|
@@ -2018,7 +2024,11 @@ static void getinfo_super_ddf_bvd(struct
|
||||||
|
info->disk.raid_disk = cd + conf->sec_elmnt_seq
|
||||||
|
* be16_to_cpu(conf->prim_elmnt_count);
|
||||||
|
info->disk.number = dl->pdnum;
|
||||||
|
- info->disk.state = (1<<MD_DISK_SYNC)|(1<<MD_DISK_ACTIVE);
|
||||||
|
+ info->disk.state = 0;
|
||||||
|
+ if (info->disk.number >= 0 &&
|
||||||
|
+ (be16_to_cpu(ddf->phys->entries[info->disk.number].state) & DDF_Online) &&
|
||||||
|
+ !(be16_to_cpu(ddf->phys->entries[info->disk.number].state) & DDF_Failed))
|
||||||
|
+ info->disk.state = (1<<MD_DISK_SYNC)|(1<<MD_DISK_ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
info->container_member = ddf->currentconf->vcnum;
|
25
DDF-really-ignore-DDF-metadata-on-partitions.patch
Normal file
25
DDF-really-ignore-DDF-metadata-on-partitions.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From a34fea0eae78fbabb289a5bce6d7a04bf889156d Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Mon, 20 Jan 2014 12:25:23 +1100
|
||||||
|
Subject: [PATCH 06/13] DDF - really ignore DDF metadata on partitions.
|
||||||
|
|
||||||
|
See commit 357ac1067835d1cdd5f80acc28501db0ffc64957
|
||||||
|
which made a similar change for super-intel, and really should have
|
||||||
|
fixed DDF at the same time.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
super-ddf.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/super-ddf.c
|
||||||
|
+++ mdadm-3.3/super-ddf.c
|
||||||
|
@@ -1126,7 +1126,7 @@ static int load_super_ddf(struct superty
|
||||||
|
if (get_dev_size(fd, devname, &dsize) == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
- if (!st->ignore_hw_compat && test_partition(fd))
|
||||||
|
+ if (test_partition(fd))
|
||||||
|
/* DDF is not allowed on partitions */
|
||||||
|
return 1;
|
||||||
|
|
58
Grow-fix-problems-with-prematurely-aborting-of-resha.patch
Normal file
58
Grow-fix-problems-with-prematurely-aborting-of-resha.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
From 5e7be8389446a4afa016351e65d1ead31a978f16 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Mon, 20 Jan 2014 15:31:45 +1100
|
||||||
|
Subject: [PATCH 09/13] Grow: fix problems with prematurely aborting of
|
||||||
|
reshapes.
|
||||||
|
|
||||||
|
1/ when unfreezing, make sure the array is frozen first.
|
||||||
|
If it isn't we might end up interrupting a reshape.
|
||||||
|
2/ When the child finishes, don't call abort_reshape() as that
|
||||||
|
will interrupt the reshape. Just set suspend_* etc
|
||||||
|
explicitly.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
Grow.c | 16 +++++++++++++---
|
||||||
|
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/Grow.c
|
||||||
|
+++ mdadm-3.3/Grow.c
|
||||||
|
@@ -612,9 +612,14 @@ static void unfreeze(struct supertype *s
|
||||||
|
return unfreeze_container(st);
|
||||||
|
else {
|
||||||
|
struct mdinfo *sra = sysfs_read(-1, st->devnm, GET_VERSION);
|
||||||
|
+ char buf[20];
|
||||||
|
|
||||||
|
- if (sra)
|
||||||
|
+ if (sra &&
|
||||||
|
+ sysfs_get_str(sra, NULL, "sync_action", buf, 20) > 0
|
||||||
|
+ && strcmp(buf, "frozen\n") == 0) {
|
||||||
|
+ printf("unfreeze\n");
|
||||||
|
sysfs_set_str(sra, NULL, "sync_action", "idle");
|
||||||
|
+ }
|
||||||
|
sysfs_free(sra);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -2666,7 +2671,7 @@ static int impose_level(int fd, int leve
|
||||||
|
for (d = 0, found = 0;
|
||||||
|
d < MAX_DISKS && found < array.nr_disks;
|
||||||
|
d++) {
|
||||||
|
- mdu_disk_info_t disk;
|
||||||
|
+ mdu_disk_info_t disk;
|
||||||
|
disk.number = d;
|
||||||
|
if (ioctl(fd, GET_DISK_INFO, &disk) < 0)
|
||||||
|
continue;
|
||||||
|
@@ -4316,7 +4321,12 @@ int child_monitor(int afd, struct mdinfo
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME maybe call progress_reshape one more time instead */
|
||||||
|
- abort_reshape(sra); /* remove any remaining suspension */
|
||||||
|
+ /* remove any remaining suspension */
|
||||||
|
+ sysfs_set_num(sra, NULL, "suspend_lo", 0x7FFFFFFFFFFFFFFFULL);
|
||||||
|
+ sysfs_set_num(sra, NULL, "suspend_hi", 0);
|
||||||
|
+ sysfs_set_num(sra, NULL, "suspend_lo", 0);
|
||||||
|
+ sysfs_set_num(sra, NULL, "sync_min", 0);
|
||||||
|
+
|
||||||
|
if (reshape->before.data_disks == reshape->after.data_disks)
|
||||||
|
sysfs_set_num(sra, NULL, "sync_speed_min", speed);
|
||||||
|
free(buf);
|
25
IMSM-don-t-crash-when-creating-an-array-with-missing.patch
Normal file
25
IMSM-don-t-crash-when-creating-an-array-with-missing.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From 1ca5c8e0c74946f4fcd74e97c5f48fba482d9596 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Tue, 21 Jan 2014 09:40:02 +1100
|
||||||
|
Subject: [PATCH 10/13] IMSM: don't crash when creating an array with missing
|
||||||
|
devices.
|
||||||
|
|
||||||
|
'missing' devices are in a different list so when collection the
|
||||||
|
serial numbers of all devices we need to check both lists.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
super-intel.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/super-intel.c
|
||||||
|
+++ mdadm-3.3/super-intel.c
|
||||||
|
@@ -5210,6 +5210,8 @@ static int create_array(struct supertype
|
||||||
|
int idx = get_imsm_disk_idx(dev, i, MAP_X);
|
||||||
|
|
||||||
|
disk = get_imsm_disk(super, idx);
|
||||||
|
+ if (!disk)
|
||||||
|
+ disk = get_imsm_missing(super, idx);
|
||||||
|
serialcpy(inf[i].serial, disk->serial);
|
||||||
|
}
|
||||||
|
append_metadata_update(st, u, len);
|
@ -1,3 +1,23 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 22 04:54:22 UTC 2014 - nfbrown@suse.com
|
||||||
|
|
||||||
|
- mdmonitor
|
||||||
|
run "mdadm --monitor" from systemd instead of init.d
|
||||||
|
sciprt (bnc#849523)
|
||||||
|
- remove mdadmd due to above.
|
||||||
|
- udev-rules-try-mdadm-I-on-change-events.patch
|
||||||
|
(bnc#851993)
|
||||||
|
- policy-NULL-path-isn-t-really-acceptable-use-the-dev.patch
|
||||||
|
- DDF-really-ignore-DDF-metadata-on-partitions.patch
|
||||||
|
- Assemble-avoid-infinite-loop-when-auto-assembling-pa.patch
|
||||||
|
- DDF-fix-detection-of-failed-devices-during-assembly.patch
|
||||||
|
- Grow-fix-problems-with-prematurely-aborting-of-resha.patch
|
||||||
|
- IMSM-don-t-crash-when-creating-an-array-with-missing.patch
|
||||||
|
- mdmon-don-t-complain-about-notifying-parent-when-the.patch
|
||||||
|
- systemd-mdmon-set-IMSM_NO_PLATFORM-1.patch
|
||||||
|
- mdmon-.service-remove-over-ride-of-Standard-IO.patch
|
||||||
|
Various upstream bug fixes.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Dec 4 23:57:16 UTC 2013 - nfbrown@suse.com
|
Wed Dec 4 23:57:16 UTC 2013 - nfbrown@suse.com
|
||||||
|
|
||||||
|
50
mdadm.spec
50
mdadm.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package mdadm
|
# spec file for package mdadm
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -37,7 +37,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
|||||||
Source: https://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.bz2
|
Source: https://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.bz2
|
||||||
Source1: Software-RAID.HOWTO.tar.bz2
|
Source1: Software-RAID.HOWTO.tar.bz2
|
||||||
Source2: sysconfig.mdadm
|
Source2: sysconfig.mdadm
|
||||||
Source3: mdadmd
|
|
||||||
Source4: boot.md
|
Source4: boot.md
|
||||||
Source5: mkinitrd-setup.sh
|
Source5: mkinitrd-setup.sh
|
||||||
Source6: mkinitrd-boot.sh
|
Source6: mkinitrd-boot.sh
|
||||||
@ -79,6 +78,28 @@ Patch15: udev-rules.degraded
|
|||||||
Patch16: Incremental-improve-support-for-DEVICE-based-restric.patch
|
Patch16: Incremental-improve-support-for-DEVICE-based-restric.patch
|
||||||
# PATCH-FIX-UPSTREAM Assemble-Incremental-don-t-hold-O_EXCL-on-mddev-afte.patch nfbrown@suse.de
|
# PATCH-FIX-UPSTREAM Assemble-Incremental-don-t-hold-O_EXCL-on-mddev-afte.patch nfbrown@suse.de
|
||||||
Patch17: Assemble-Incremental-don-t-hold-O_EXCL-on-mddev-afte.patch
|
Patch17: Assemble-Incremental-don-t-hold-O_EXCL-on-mddev-afte.patch
|
||||||
|
# PATCH-FIX-UPSTREAM mdmonitor bnc#849523 nfbrown@suse.de
|
||||||
|
Patch18: mdmonitor
|
||||||
|
# PATCH-FIX-UPSTREAM udev-rules-try-mdadm-I-on-change-events.patch bnc#851993 nfbrown@suse.de
|
||||||
|
Patch19: udev-rules-try-mdadm-I-on-change-events.patch
|
||||||
|
# PATCH-FIX-UPSTREAM policy-NULL-path-isn-t-really-acceptable-use-the-dev.patch nfbrown@suse.de
|
||||||
|
Patch20: policy-NULL-path-isn-t-really-acceptable-use-the-dev.patch
|
||||||
|
# PATCH-FIX-UPSTREAM DDF-really-ignore-DDF-metadata-on-partitions.patch nfbrown@suse.de
|
||||||
|
Patch21: DDF-really-ignore-DDF-metadata-on-partitions.patch
|
||||||
|
# PATCH-FIX-UPSTREAM Assemble-avoid-infinite-loop-when-auto-assembling-pa.patch nfbrown@suse.de
|
||||||
|
Patch22: Assemble-avoid-infinite-loop-when-auto-assembling-pa.patch
|
||||||
|
# PATCH-FIX-UPSTREAM DDF-fix-detection-of-failed-devices-during-assembly.patch nfbrown@suse.de
|
||||||
|
Patch23: DDF-fix-detection-of-failed-devices-during-assembly.patch
|
||||||
|
# PATCH-FIX-UPSTREAM Grow-fix-problems-with-prematurely-aborting-of-resha.patch nfbrown@suse.de
|
||||||
|
Patch24: Grow-fix-problems-with-prematurely-aborting-of-resha.patch
|
||||||
|
# PATCH-FIX-UPSTREAM IMSM-don-t-crash-when-creating-an-array-with-missing.patch nfbrown@suse.de
|
||||||
|
Patch25: IMSM-don-t-crash-when-creating-an-array-with-missing.patch
|
||||||
|
# PATCH-FIX-UPSTREAM mdmon-don-t-complain-about-notifying-parent-when-the.patch nfbrown@suse.de
|
||||||
|
Patch26: mdmon-don-t-complain-about-notifying-parent-when-the.patch
|
||||||
|
# PATCH-FIX-UPSTREAM systemd-mdmon-set-IMSM_NO_PLATFORM-1.patch nfbrown@suse.de
|
||||||
|
Patch27: systemd-mdmon-set-IMSM_NO_PLATFORM-1.patch
|
||||||
|
# PATCH-FIX-UPSTREAM mdmon-.service-remove-over-ride-of-Standard-IO.patch nfbrown@suse.de
|
||||||
|
Patch28: mdmon-.service-remove-over-ride-of-Standard-IO.patch
|
||||||
|
|
||||||
%define _udevdir %(pkg-config --variable=udevdir udev)
|
%define _udevdir %(pkg-config --variable=udevdir udev)
|
||||||
%define _systemdshutdowndir %{_unitdir}/../system-shutdown
|
%define _systemdshutdowndir %{_unitdir}/../system-shutdown
|
||||||
@ -107,26 +128,36 @@ programs but with a very different interface.
|
|||||||
%patch15 -p1
|
%patch15 -p1
|
||||||
%patch16 -p1
|
%patch16 -p1
|
||||||
%patch17 -p1
|
%patch17 -p1
|
||||||
|
%patch18 -p1
|
||||||
|
%patch19 -p1
|
||||||
|
%patch20 -p1
|
||||||
|
%patch21 -p1
|
||||||
|
%patch22 -p1
|
||||||
|
%patch23 -p1
|
||||||
|
%patch24 -p1
|
||||||
|
%patch25 -p1
|
||||||
|
%patch26 -p1
|
||||||
|
%patch27 -p1
|
||||||
|
%patch28 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make %{?_smp_mflags} CC="%__cc" CXFLAGS="$RPM_OPT_FLAGS -Wno-error"
|
make %{?_smp_mflags} CC="%__cc" CXFLAGS="$RPM_OPT_FLAGS -Wno-error" SUSE=yes
|
||||||
cd Software-RAID.HOWTO
|
cd Software-RAID.HOWTO
|
||||||
sgml2html Software-RAID.HOWTO.sgml
|
sgml2html Software-RAID.HOWTO.sgml
|
||||||
sgml2txt Software-RAID.HOWTO.sgml
|
sgml2txt Software-RAID.HOWTO.sgml
|
||||||
|
|
||||||
%install
|
%install
|
||||||
make install install-systemd install-udev DESTDIR=%{buildroot} SYSTEMD_DIR=%{_unitdir} UDEVDIR=%{_udevdir}
|
make install install-systemd install-udev DESTDIR=%{buildroot} SYSTEMD_DIR=%{_unitdir} UDEVDIR=%{_udevdir} SUSE=yes
|
||||||
rm -rf %{buildroot}/lib/udev
|
rm -rf %{buildroot}/lib/udev
|
||||||
install -d %{buildroot}%{_var}/adm/fillup-templates
|
install -d %{buildroot}%{_var}/adm/fillup-templates
|
||||||
install -d %{buildroot}{%{_sbindir},%{_sysconfdir}/init.d}
|
install -d %{buildroot}{%{_sbindir},%{_sysconfdir}/init.d}
|
||||||
install -m 755 %{S:4} %{S:3} %{buildroot}%{_sysconfdir}/init.d/
|
install -m 755 %{S:4} %{buildroot}%{_sysconfdir}/init.d/
|
||||||
install -d %{buildroot}/lib/mkinitrd/scripts
|
install -d %{buildroot}/lib/mkinitrd/scripts
|
||||||
install -m 755 %{S:5} %{buildroot}/lib/mkinitrd/scripts/setup-md.sh
|
install -m 755 %{S:5} %{buildroot}/lib/mkinitrd/scripts/setup-md.sh
|
||||||
install -m 755 %{S:6} %{buildroot}/lib/mkinitrd/scripts/boot-md.sh
|
install -m 755 %{S:6} %{buildroot}/lib/mkinitrd/scripts/boot-md.sh
|
||||||
install -d %{buildroot}/etc/cron.daily
|
install -d %{buildroot}/etc/cron.daily
|
||||||
install -m 755 %{S:7} %{buildroot}/etc/cron.daily/mdadm
|
install -m 755 %{S:7} %{buildroot}/etc/cron.daily/mdadm
|
||||||
install -m 644 %{S:2} %{buildroot}%{_var}/adm/fillup-templates/
|
install -m 644 %{S:2} %{buildroot}%{_var}/adm/fillup-templates/
|
||||||
ln -sf ../../etc/init.d/mdadmd %{buildroot}/%{_sbindir}/rcmdadmd
|
|
||||||
install -d %{buildroot}%{_systemdshutdowndir}
|
install -d %{buildroot}%{_systemdshutdowndir}
|
||||||
install -m 755 %{S:8} %{buildroot}%{_systemdshutdowndir}/mdadm.shutdown
|
install -m 755 %{S:8} %{buildroot}%{_systemdshutdowndir}/mdadm.shutdown
|
||||||
install -m 644 %{S:9} %{buildroot}%{_unitdir}/mdadm-last-resort@.timer
|
install -m 644 %{S:9} %{buildroot}%{_unitdir}/mdadm-last-resort@.timer
|
||||||
@ -144,7 +175,6 @@ fi
|
|||||||
%{fillup_and_insserv -y boot.md}
|
%{fillup_and_insserv -y boot.md}
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
%restart_on_update mdadmd
|
|
||||||
[ -x /sbin/mkinitrd_setup ] && mkinitrd_setup
|
[ -x /sbin/mkinitrd_setup ] && mkinitrd_setup
|
||||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||||
echo "Skipping recreation of existing initial ramdisks, due"
|
echo "Skipping recreation of existing initial ramdisks, due"
|
||||||
@ -156,7 +186,6 @@ fi
|
|||||||
%{insserv_cleanup}
|
%{insserv_cleanup}
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
%stop_on_removal mdadmd
|
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
@ -168,7 +197,6 @@ rm -rf %{buildroot}
|
|||||||
%doc Software-RAID.HOWTO/Software-RAID.HOWTO*{.txt,.html}
|
%doc Software-RAID.HOWTO/Software-RAID.HOWTO*{.txt,.html}
|
||||||
%doc %{_mandir}/man?/*
|
%doc %{_mandir}/man?/*
|
||||||
/sbin/*
|
/sbin/*
|
||||||
%{_sbindir}/*
|
|
||||||
%{_var}/adm/fillup-templates/sysconfig.mdadm
|
%{_var}/adm/fillup-templates/sysconfig.mdadm
|
||||||
%dir /lib/mkinitrd
|
%dir /lib/mkinitrd
|
||||||
%dir /lib/mkinitrd/scripts
|
%dir /lib/mkinitrd/scripts
|
||||||
@ -176,12 +204,14 @@ rm -rf %{buildroot}
|
|||||||
/lib/mkinitrd/scripts/boot-md.sh
|
/lib/mkinitrd/scripts/boot-md.sh
|
||||||
%{_udevdir}/rules.d/63-md-raid-arrays.rules
|
%{_udevdir}/rules.d/63-md-raid-arrays.rules
|
||||||
%{_udevdir}/rules.d/64-md-raid-assembly.rules
|
%{_udevdir}/rules.d/64-md-raid-assembly.rules
|
||||||
%dir /etc
|
|
||||||
%dir /etc/cron.daily
|
%dir /etc/cron.daily
|
||||||
/etc/cron.daily/mdadm
|
/etc/cron.daily/mdadm
|
||||||
%{_systemdshutdowndir}/mdadm.shutdown
|
%{_systemdshutdowndir}/mdadm.shutdown
|
||||||
%{_unitdir}/mdmon@.service
|
%{_unitdir}/mdmon@.service
|
||||||
|
%{_unitdir}/mdmonitor.service
|
||||||
%{_unitdir}/mdadm-last-resort@.timer
|
%{_unitdir}/mdadm-last-resort@.timer
|
||||||
%{_unitdir}/mdadm-last-resort@.service
|
%{_unitdir}/mdadm-last-resort@.service
|
||||||
|
%dir %{_unitdir}/../scripts
|
||||||
|
%{_unitdir}/../scripts/mdadm_env.sh
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
150
mdadmd
150
mdadmd
@ -1,150 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# Copyright (c) 1995-2002 SuSE Linux AG, Nuernberg, Germany.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Author: Petr Ostadal, feedback to http://www.suse.de/feedback
|
|
||||||
#
|
|
||||||
# /etc/init.d/mdadmd
|
|
||||||
#
|
|
||||||
# and its symbolic link
|
|
||||||
#
|
|
||||||
# /usr/sbin/rcmdadmd
|
|
||||||
#
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: mdadmd
|
|
||||||
# Required-Start: $local_fs
|
|
||||||
# Should-Start: $time sendmail
|
|
||||||
# Required-Stop: $local_fs
|
|
||||||
# Should-Stop: $time sendmail
|
|
||||||
# Default-Start: 3 5
|
|
||||||
# Default-Stop: 0 1 2 6
|
|
||||||
# Short-Description: mdadmd daemon monitoring MD devices
|
|
||||||
# Description: Start mdadmd to allow monitoring MD devices aka
|
|
||||||
# Linux Software Raid. This is only meaningful for raid1, raid5
|
|
||||||
# or multipath arrays as only these have interesting state.
|
|
||||||
# raid0 or linear never have missing, spare, or failed drives,
|
|
||||||
# so there is nothing to monitor.
|
|
||||||
### END INIT INFO
|
|
||||||
|
|
||||||
mdadmd_BIN=/sbin/mdadm
|
|
||||||
test -x $mdadmd_BIN || exit 5
|
|
||||||
|
|
||||||
mdadmd_CONFIG=/etc/sysconfig/mdadm
|
|
||||||
test -r $mdadmd_CONFIG || exit 6
|
|
||||||
. $mdadmd_CONFIG
|
|
||||||
|
|
||||||
if [ x$MDADM_DELAY = x"" ]; then
|
|
||||||
MDADM_DELAY=60
|
|
||||||
fi
|
|
||||||
MDADM_DELAY="-d "$MDADM_DELAY;
|
|
||||||
|
|
||||||
if [ x$MDADM_MAIL != x"" ]; then
|
|
||||||
MDADM_MAIL="-m \"$MDADM_MAIL\""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x$MDADM_PROGRAM != x"" ]; then
|
|
||||||
MDADM_PROGRAM="-p \"$MDADM_PROGRAM\""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x$MDADM_SCAN = x"yes" ]; then
|
|
||||||
MDADM_SCAN="-s"
|
|
||||||
else
|
|
||||||
MDADM_SCAN=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x$MDADM_SEND_MAIL_ON_START = x"yes" ]; then
|
|
||||||
MDADM_SEND_MAIL="-t"
|
|
||||||
else
|
|
||||||
MDADM_SEND_MAIL=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x$MDADM_CONFIG != x"" ]; then
|
|
||||||
MDADM_CONFIG="-c \"$MDADM_CONFIG\""
|
|
||||||
fi
|
|
||||||
|
|
||||||
. /etc/rc.status
|
|
||||||
|
|
||||||
# Reset status of this service
|
|
||||||
rc_reset
|
|
||||||
|
|
||||||
# Return values acc. to LSB for all commands but status:
|
|
||||||
# 0 - success
|
|
||||||
# 1 - generic or unspecified error
|
|
||||||
# 2 - invalid or excess argument(s)
|
|
||||||
# 3 - unimplemented feature (e.g. "reload")
|
|
||||||
# 4 - user had insufficient privileges
|
|
||||||
# 5 - program is not installed
|
|
||||||
# 6 - program is not configured
|
|
||||||
# 7 - program is not running
|
|
||||||
# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
|
|
||||||
#
|
|
||||||
# Note that starting an already running service, stopping
|
|
||||||
# or restarting a not-running service as well as the restart
|
|
||||||
# with force-reload (in case signaling is not supported) are
|
|
||||||
# considered a success.
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
echo -n "Starting mdadmd "
|
|
||||||
## Start daemon with startproc(8). If this fails
|
|
||||||
## the return value is set appropriately by startproc.
|
|
||||||
eval startproc -q -s $mdadmd_BIN -F $MDADM_RAIDDEVICES $MDADM_DELAY $MDADM_MAIL $MDADM_PROGRAM $MDADM_SCAN $MDADM_SEND_MAIL $MDADM_CONFIG
|
|
||||||
|
|
||||||
# Remember status and be verbose
|
|
||||||
rc_status -v
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
echo -n "Shutting down mdadmd "
|
|
||||||
## Stop daemon with killproc(8) and if this fails
|
|
||||||
## killproc sets the return value according to LSB.
|
|
||||||
|
|
||||||
killproc -TERM $mdadmd_BIN
|
|
||||||
|
|
||||||
# Remember status and be verbose
|
|
||||||
rc_status -v
|
|
||||||
;;
|
|
||||||
try-restart)
|
|
||||||
## Do a restart only if the service was active before.
|
|
||||||
## Note: try-restart is not (yet) part of LSB (as of 1.2)
|
|
||||||
$0 status >/dev/null && $0 restart
|
|
||||||
|
|
||||||
# Remember status and be quiet
|
|
||||||
rc_status
|
|
||||||
;;
|
|
||||||
restart)
|
|
||||||
## Stop the service and regardless of whether it was
|
|
||||||
## running or not, start it again.
|
|
||||||
$0 stop
|
|
||||||
$0 start
|
|
||||||
|
|
||||||
# Remember status and be quiet
|
|
||||||
rc_status
|
|
||||||
;;
|
|
||||||
reload)
|
|
||||||
exit 3
|
|
||||||
;;
|
|
||||||
status)
|
|
||||||
echo -n "Checking for service mdadmd "
|
|
||||||
## Check status with checkproc(8), if process is running
|
|
||||||
## checkproc will return with exit status 0.
|
|
||||||
|
|
||||||
# Return value is slightly different for the status command:
|
|
||||||
# 0 - service up and running
|
|
||||||
# 1 - service dead, but /var/run/ pid file exists
|
|
||||||
# 2 - service dead, but /var/lock/ lock file exists
|
|
||||||
# 3 - service not running (unused)
|
|
||||||
# 4 - service status unknown :-(
|
|
||||||
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
|
|
||||||
|
|
||||||
# NOTE: checkproc returns LSB compliant status values.
|
|
||||||
checkproc $mdadmd_BIN
|
|
||||||
# NOTE: rc_status knows that we called this init script with
|
|
||||||
# "status" option and adapts its messages accordingly.
|
|
||||||
rc_status -v
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: $0 {start|stop|status|try-restart|restart}"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
rc_exit
|
|
24
mdmon-.service-remove-over-ride-of-Standard-IO.patch
Normal file
24
mdmon-.service-remove-over-ride-of-Standard-IO.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
From 1f6b069494c1ecf8014a76fb10e8c8f5f6c27365 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Wed, 22 Jan 2014 12:53:31 +1100
|
||||||
|
Subject: [PATCH 13/13] mdmon@.service: remove over-ride of Standard IO.
|
||||||
|
|
||||||
|
Redirecting output to /dev/null is unnecessary and hides any error
|
||||||
|
messages there might be. So leave as defaults which are none,
|
||||||
|
journal, inherit.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
systemd/mdmon@.service | 3 ---
|
||||||
|
1 file changed, 3 deletions(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/systemd/mdmon@.service
|
||||||
|
+++ mdadm-3.3/systemd/mdmon@.service
|
||||||
|
@@ -15,7 +15,4 @@ Before=initrd-switch-root.target
|
||||||
|
# that is mdadm's job if at all.
|
||||||
|
Environment=IMSM_NO_PLATFORM=1
|
||||||
|
ExecStart=/sbin/mdmon --foreground %I
|
||||||
|
-StandardInput=null
|
||||||
|
-StandardOutput=null
|
||||||
|
-StandardError=null
|
||||||
|
KillMode=none
|
43
mdmon-don-t-complain-about-notifying-parent-when-the.patch
Normal file
43
mdmon-don-t-complain-about-notifying-parent-when-the.patch
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
From 5e57245e3feba65385fc100e0f2c3d1214d79915 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Tue, 21 Jan 2014 09:43:31 +1100
|
||||||
|
Subject: [PATCH 11/13] mdmon: don't complain about notifying parent when there
|
||||||
|
is no need
|
||||||
|
|
||||||
|
When run with --foreground mdmon has no need to notify any
|
||||||
|
parent, so it shouldn't even try, let alone complain when it fails.
|
||||||
|
|
||||||
|
Also close an end of a pipe which is no longer used.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
mdmon.c | 11 +++++++----
|
||||||
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/mdmon.c
|
||||||
|
+++ mdadm-3.3/mdmon.c
|
||||||
|
@@ -429,6 +429,7 @@ static int mdmon(char *devnm, int must_f
|
||||||
|
wait(&status);
|
||||||
|
status = WEXITSTATUS(status);
|
||||||
|
}
|
||||||
|
+ close(pfd[0]);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
@@ -516,10 +517,12 @@ static int mdmon(char *devnm, int must_f
|
||||||
|
container->sock = make_control_sock(devnm);
|
||||||
|
|
||||||
|
status = 0;
|
||||||
|
- if (write(pfd[1], &status, sizeof(status)) < 0)
|
||||||
|
- pr_err("failed to notify our parent: %d\n",
|
||||||
|
- getppid());
|
||||||
|
- close(pfd[1]);
|
||||||
|
+ if (pfd[1] >= 0) {
|
||||||
|
+ if (write(pfd[1], &status, sizeof(status)) < 0)
|
||||||
|
+ pr_err("failed to notify our parent: %d\n",
|
||||||
|
+ getppid());
|
||||||
|
+ close(pfd[1]);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||||
|
|
117
mdmonitor
Normal file
117
mdmonitor
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
From 61c094715836e76b66d7a69adcb6769127b5b77d Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Wed, 11 Dec 2013 10:47:54 +1100
|
||||||
|
Subject: [PATCH] Add mdmonitor.service systemd unit file.
|
||||||
|
References: bnc#849523
|
||||||
|
|
||||||
|
This systemd unit file runs mdadm in --monitor mode.
|
||||||
|
It is started by a SYSTEMD_WANTS signal from udev whenever
|
||||||
|
an md array is started that would benefit from mdadm --monitor.
|
||||||
|
|
||||||
|
Commandline arguments can be provided by a script
|
||||||
|
/usr/lib/systemd/scripts/mdadm_env.sh
|
||||||
|
which should write an
|
||||||
|
MDADM_MONITOR_ARGS=....
|
||||||
|
line to /run/sysconfig/mdadm
|
||||||
|
|
||||||
|
A script to extra args from SUSE's /etc/sysconfig/mdadm file
|
||||||
|
is provided.
|
||||||
|
If no mdadm_env.sh is provided, then args are "--scan" which
|
||||||
|
requires "mail" or "program" to be set in /etc/mdadm.conf.
|
||||||
|
I believe this is suitable for Fedora.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
Makefile | 2 ++
|
||||||
|
systemd/SUSE-mdadm_env.sh | 45 +++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
systemd/mdmonitor.service | 16 ++++++++++++++++
|
||||||
|
udev-md-raid-arrays.rules | 2 ++
|
||||||
|
4 files changed, 65 insertions(+)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/Makefile
|
||||||
|
+++ mdadm-3.3/Makefile
|
||||||
|
@@ -285,6 +285,8 @@ install-udev: udev-md-raid-arrays.rules
|
||||||
|
|
||||||
|
install-systemd: systemd/mdmon@.service
|
||||||
|
$(INSTALL) -D -m 644 systemd/mdmon@.service $(DESTDIR)$(SYSTEMD_DIR)/mdmon@.service
|
||||||
|
+ $(INSTALL) -D -m 644 systemd/mdmonitor.service $(DESTDIR)$(SYSTEMD_DIR)/mdmonitor.service
|
||||||
|
+ [ -f /etc/SuSE-release -o -n "$(SUSE)" ] && $(INSTALL) -D -m 755 systemd/SUSE-mdadm_env.sh $(DESTDIR)$(SYSTEMD_DIR)/../scripts/mdadm_env.sh || true
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(BINDIR)/mdadm
|
||||||
|
--- /dev/null
|
||||||
|
+++ mdadm-3.3/systemd/SUSE-mdadm_env.sh
|
||||||
|
@@ -0,0 +1,45 @@
|
||||||
|
+#!/bin/sh
|
||||||
|
+
|
||||||
|
+# extract configuration from /etc/sysconfig/mdadm and write
|
||||||
|
+# environment to /run/sysconfig/mdadm to be used by
|
||||||
|
+# systemd unit files.
|
||||||
|
+
|
||||||
|
+MDADM_SCAN="yes"
|
||||||
|
+
|
||||||
|
+# Following adapted from /etc/init.d/mdadmd on openSUSE
|
||||||
|
+
|
||||||
|
+mdadmd_CONFIG=/etc/sysconfig/mdadm
|
||||||
|
+if test -r $mdadmd_CONFIG; then
|
||||||
|
+ . $mdadmd_CONFIG
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ x$MDADM_DELAY != x"" ]; then
|
||||||
|
+ MDADM_DELAY="-d "$MDADM_DELAY;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ x$MDADM_MAIL != x"" ]; then
|
||||||
|
+ MDADM_MAIL="-m \"$MDADM_MAIL\""
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ x$MDADM_PROGRAM != x"" ]; then
|
||||||
|
+ MDADM_PROGRAM="-p \"$MDADM_PROGRAM\""
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ x$MDADM_SCAN = x"yes" ]; then
|
||||||
|
+ MDADM_SCAN="--scan"
|
||||||
|
+else
|
||||||
|
+ MDADM_SCAN=""
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ x$MDADM_SEND_MAIL_ON_START = x"yes" ]; then
|
||||||
|
+ MDADM_SEND_MAIL="-t"
|
||||||
|
+else
|
||||||
|
+ MDADM_SEND_MAIL=""
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if [ x$MDADM_CONFIG != x"" ]; then
|
||||||
|
+ MDADM_CONFIG="-c \"$MDADM_CONFIG\""
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+mkdir -p /run/sysconfig
|
||||||
|
+echo "MDADM_MONITOR_ARGS=$MDADM_RAIDDEVICES $MDADM_DELAY $MDADM_MAIL $MDADM_PROGRAM $MDADM_SCAN $MDADM_SEND_MAIL $MDADM_CONFIG" > /run/sysconfig/mdadm
|
||||||
|
--- /dev/null
|
||||||
|
+++ mdadm-3.3/systemd/mdmonitor.service
|
||||||
|
@@ -0,0 +1,16 @@
|
||||||
|
+# This file is part of mdadm.
|
||||||
|
+#
|
||||||
|
+# mdadm is free software; you can redistribute it and/or modify it
|
||||||
|
+# under the terms of the GNU General Public License as published by
|
||||||
|
+# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
+# (at your option) any later version.
|
||||||
|
+
|
||||||
|
+[Unit]
|
||||||
|
+Description=MD array monitor
|
||||||
|
+DefaultDependencies=no
|
||||||
|
+
|
||||||
|
+[Service]
|
||||||
|
+Environment= MDADM_MONITOR_ARGS=--scan
|
||||||
|
+EnvironmentFile=-/run/sysconfig/mdadm
|
||||||
|
+ExecStartPre=-/usr/lib/systemd/scripts/mdadm_env.sh
|
||||||
|
+ExecStart=/sbin/mdadm --monitor $MDADM_MONITOR_ARGS
|
||||||
|
--- mdadm-3.3.orig/udev-md-raid-arrays.rules
|
||||||
|
+++ mdadm-3.3/udev-md-raid-arrays.rules
|
||||||
|
@@ -32,4 +32,6 @@ OPTIONS+="watch"
|
||||||
|
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
|
||||||
|
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
|
||||||
|
|
||||||
|
+ENV{MD_LEVEL}=="raid[1-9]*", ENV{SYSTEMD_WANTS}+="mdmonitor.service"
|
||||||
|
+
|
||||||
|
LABEL="md_end"
|
64
policy-NULL-path-isn-t-really-acceptable-use-the-dev.patch
Normal file
64
policy-NULL-path-isn-t-really-acceptable-use-the-dev.patch
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
From 75a721fd7d5e5ee7e578571fe58755fe07e446fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukasz Dorau <lukasz.dorau@intel.com>
|
||||||
|
Date: Thu, 19 Dec 2013 13:02:12 +0100
|
||||||
|
Subject: [PATCH 05/13] policy: NULL path isn't really acceptable - use the
|
||||||
|
devname
|
||||||
|
|
||||||
|
According to:
|
||||||
|
commit b451aa4846c5ccca5447a6b6d45e5623b8c8e961
|
||||||
|
Fix handling for "auto" line in mdadm.conf
|
||||||
|
|
||||||
|
a NULL path isn't really acceptable and the devname should be used instead.
|
||||||
|
|
||||||
|
Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
policy.c | 35 +++++++++++++++++------------------
|
||||||
|
1 file changed, 17 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/policy.c
|
||||||
|
+++ mdadm-3.3/policy.c
|
||||||
|
@@ -200,26 +200,25 @@ static char *disk_path(struct mdinfo *di
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
by_path = opendir(symlink);
|
||||||
|
- if (!by_path)
|
||||||
|
- return NULL;
|
||||||
|
- prefix_len = strlen(symlink);
|
||||||
|
-
|
||||||
|
- while ((ent = readdir(by_path)) != NULL) {
|
||||||
|
- if (ent->d_type != DT_LNK)
|
||||||
|
- continue;
|
||||||
|
- strncpy(symlink + prefix_len,
|
||||||
|
- ent->d_name,
|
||||||
|
- sizeof(symlink) - prefix_len);
|
||||||
|
- if (stat(symlink, &stb) < 0)
|
||||||
|
- continue;
|
||||||
|
- if ((stb.st_mode & S_IFMT) != S_IFBLK)
|
||||||
|
- continue;
|
||||||
|
- if (stb.st_rdev != makedev(disk->disk.major, disk->disk.minor))
|
||||||
|
- continue;
|
||||||
|
+ if (by_path) {
|
||||||
|
+ prefix_len = strlen(symlink);
|
||||||
|
+ while ((ent = readdir(by_path)) != NULL) {
|
||||||
|
+ if (ent->d_type != DT_LNK)
|
||||||
|
+ continue;
|
||||||
|
+ strncpy(symlink + prefix_len,
|
||||||
|
+ ent->d_name,
|
||||||
|
+ sizeof(symlink) - prefix_len);
|
||||||
|
+ if (stat(symlink, &stb) < 0)
|
||||||
|
+ continue;
|
||||||
|
+ if ((stb.st_mode & S_IFMT) != S_IFBLK)
|
||||||
|
+ continue;
|
||||||
|
+ if (stb.st_rdev != makedev(disk->disk.major, disk->disk.minor))
|
||||||
|
+ continue;
|
||||||
|
+ closedir(by_path);
|
||||||
|
+ return xstrdup(ent->d_name);
|
||||||
|
+ }
|
||||||
|
closedir(by_path);
|
||||||
|
- return xstrdup(ent->d_name);
|
||||||
|
}
|
||||||
|
- closedir(by_path);
|
||||||
|
/* A NULL path isn't really acceptable - use the devname.. */
|
||||||
|
sprintf(symlink, "/sys/dev/block/%d:%d", disk->disk.major, disk->disk.minor);
|
||||||
|
rv = readlink(symlink, nm, sizeof(nm)-1);
|
@ -1,6 +1,7 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=Timer to wait for more drives before activating degraded array.
|
Description=Timer to wait for more drives before activating degraded array.
|
||||||
DefaultDependencies=no
|
DefaultDependencies=no
|
||||||
|
Conflicts=sys-devices-virtual-block-%i.device
|
||||||
|
|
||||||
[Timer]
|
[Timer]
|
||||||
OnActiveSec=30
|
OnActiveSec=30
|
||||||
|
28
systemd-mdmon-set-IMSM_NO_PLATFORM-1.patch
Normal file
28
systemd-mdmon-set-IMSM_NO_PLATFORM-1.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 67ee238316785481a8ad440e531cae6c4dce36a4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Tue, 21 Jan 2014 09:46:07 +1100
|
||||||
|
Subject: [PATCH 12/13] systemd/mdmon: set IMSM_NO_PLATFORM=1
|
||||||
|
|
||||||
|
As mdmon doesn't inherit environment from mdadm when it is started
|
||||||
|
by system, it cannot inherit IMSM_NO_PLATFORM.
|
||||||
|
But if an imsm array as assembled then mdmon really should handle it
|
||||||
|
whether there is a platform present or not.
|
||||||
|
So always set this var.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
systemd/mdmon@.service | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/systemd/mdmon@.service
|
||||||
|
+++ mdadm-3.3/systemd/mdmon@.service
|
||||||
|
@@ -11,6 +11,9 @@ DefaultDependencies=no
|
||||||
|
Before=initrd-switch-root.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
+# mdmon should never complain due to lack of a platform,
|
||||||
|
+# that is mdadm's job if at all.
|
||||||
|
+Environment=IMSM_NO_PLATFORM=1
|
||||||
|
ExecStart=/sbin/mdmon --foreground %I
|
||||||
|
StandardInput=null
|
||||||
|
StandardOutput=null
|
32
udev-rules-try-mdadm-I-on-change-events.patch
Normal file
32
udev-rules-try-mdadm-I-on-change-events.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From 25392f5fc59f96fb766ecb5617d5276f8c87d489 Mon Sep 17 00:00:00 2001
|
||||||
|
From: NeilBrown <neilb@suse.de>
|
||||||
|
Date: Wed, 11 Dec 2013 12:29:22 +1100
|
||||||
|
Subject: [PATCH 02/13] udev rules: try "mdadm -I" on "change" events.
|
||||||
|
References: bnc#851993
|
||||||
|
|
||||||
|
We need to attempt "mdadm -I" on "change" events as well as "add" events,
|
||||||
|
as the "change" make make a device ready to be part of an array.
|
||||||
|
This is particularly important for stacked md devices. When the
|
||||||
|
member devices are "add"ed they don't have any content visible yet.
|
||||||
|
That doesn't happen until a "change".
|
||||||
|
|
||||||
|
Idea taken from Fedora udev file.
|
||||||
|
|
||||||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||||
|
---
|
||||||
|
udev-md-raid-assembly.rules | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- mdadm-3.3.orig/udev-md-raid-assembly.rules
|
||||||
|
+++ mdadm-3.3/udev-md-raid-assembly.rules
|
||||||
|
@@ -12,8 +12,8 @@ LABEL="md_inc"
|
||||||
|
|
||||||
|
# remember you can limit what gets auto/incrementally assembled by
|
||||||
|
# mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY'
|
||||||
|
-ACTION=="add", IMPORT{program}="/sbin/mdadm --incremental --export $devnode --offroot ${DEVLINKS}"
|
||||||
|
-ACTION=="add", ENV{MD_STARTED}=="*unsafe*", ENV{MD_FOREIGN}=="no", ENV{SYSTEMD_WANTS}+="mdadm-last-resort@$env{MD_DEVICE}.timer"
|
||||||
|
+ACTION=="add|change", IMPORT{program}="/sbin/mdadm --incremental --export $devnode --offroot ${DEVLINKS}"
|
||||||
|
+ACTION=="add|change", ENV{MD_STARTED}=="*unsafe*", ENV{MD_FOREIGN}=="no", ENV{SYSTEMD_WANTS}+="mdadm-last-resort@$env{MD_DEVICE}.timer"
|
||||||
|
ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
|
||||||
|
ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/sbin/mdadm -If $name"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user