Hello community,

here is the log from the commit of package mdadm for openSUSE:Factory checked 
in at 2018-12-19 13:25:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mdadm (Old)
 and      /work/SRC/openSUSE:Factory/.mdadm.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mdadm"

Wed Dec 19 13:25:25 2018 rev:116 rq:658682 version:4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/mdadm/mdadm.changes      2018-03-07 
10:30:15.692036118 +0100
+++ /work/SRC/openSUSE:Factory/.mdadm.new.28833/mdadm.changes   2018-12-19 
13:25:29.417230295 +0100
@@ -1,0 +2,302 @@
+Tue Dec 11 13:52:25 UTC 2018 - Jan Engelhardt <[email protected]>
+
+- Update description. Remove references to historic software.
+
+-------------------------------------------------------------------
+Mon Dec 10 01:52:35 UTC 2018 - Neil Brown <[email protected]>
+
+- 0001-Document-PART-POLICY-lines.patch
+  0002-policy-support-devices-with-multiple-paths.patch
+  0008-policy.c-prevent-NULL-pointer-referencing.patch
+  (bsc#1106078)
+
+- 0003-mdcheck-add-systemd-unit-files-to-run-mdcheck.patch
+  0004-Monitor-add-system-timer-to-run-oneshot-periodically.patch
+  Remove mdadm.cron
+  Remove crond.mdadm
+  (bsc#1115407)
+
+- 0005-imsm-update-metadata-correctly-while-raid10-double-d.patch
+  0006-Grow-avoid-overflow-in-compute_backup_blocks.patch
+  0007-Grow-report-correct-new-chunk-size.patch
+  Other useful upstream patches.
+
+-------------------------------------------------------------------
+Wed Oct 17 03:27:21 UTC 2018 - Coly Li <[email protected]>
+
+- Update mdadm code base to mdadm-4.1
+  (FATE#325869, bsc#1111960)
+ - Assorted bug-fixes, minor improvements, and code cleanup
+ - Add PPL support (alternate change-journalling model)
+- Fix Makefile to install mdadm_env.sh to /usr/lib/mdadm/
+  (bsc#1111960)
+  0001-Makefile-install-mdadm_env.sh-to-usr-lib-mdadm.patch
+- Remove the following code base and patches since they are in
+  mdadm-4.1 already,
+ - mdadm-4.0.tar.xz
+ - 0001-Makefile-Fix-date-to-be-output-in-ISO-format.patch
+ - 0002-imsm-fix-missing-error-message-during-migration.patch
+ - 0003-Fix-oddity-where-mdadm-did-not-recognise-a-relative-.patch
+ - 0004-mdadm-check-the-nodes-when-operate-clustered-array.patch
+ - 0005-examine-tidy-up-some-code.patch
+ - 0006-mdadm-add-man-page-for-symlinks.patch
+ - 0007-mdadm-add-checking-clustered-bitmap-in-assemble-mode.patch
+ - 0008-mdadm-Add-Wimplicit-fallthrough-0-in-Makefile.patch
+ - 0009-mdadm-Specify-enough-length-when-write-to-buffer.patch
+ - 0010-mdadm-it-doesn-t-make-sense-to-set-bitmap-twice.patch
+ - 0011-mdadm-Monitor-Fix-NULL-pointer-dereference-when-stat.patch
+ - 0012-Replace-snprintf-with-strncpy-at-some-places-to-avoi.patch
+ - 0013-mdadm-Forced-type-conversion-to-avoid-truncation.patch
+ - 0014-super1-ignore-failfast-flag-for-setting-device-role.patch
+ - 0015-mdadm-bitmap-fixed-typos-in-comments-of-bitmap.h.patch
+ - 0016-udev-md-raid-assembly.rules-Skip-non-ready-devices.patch
+ - 0017-Retry-HOT_REMOVE_DISK-a-few-times.patch
+ - 0018-mdadm-Build-check-the-level-parameter-when-build-new.patch
+ - 0019-Introduce-sys_hot_remove_disk.patch
+ - 0020-Add-force-flag-to-hot_remove_disk.patch
+ - 0021-Detail-handle-non-existent-arrays-better.patch
+ - 0022-Generic-support-for-consistency-policy-and-PPL.patch
+ - 0023-Detail-show-consistency-policy.patch
+ - 0024-imsm-PPL-support.patch
+ - 0025-super1-PPL-support.patch
+ - 0026-Add-ppl-and-no-ppl-options-for-update.patch
+ - 0027-Grow-support-consistency-policy-change.patch
+ - 0028-mdadm.h-struct-mdinfo-reorganize-ppl-elements-for-be.patch
+ - 0029-super1-replace-hard-coded-values-with-bit-definition.patch
+ - 0030-mdadm-Clean-up-some-ugly-multiple-actions-on-single-.patch
+ - 0031-mdadm-Fixup-a-number-of-whitespace-inconsistency-cas.patch
+ - 0032-util-Cosmetic-changes.patch
+ - 0033-Grow-Fixup-a-pile-of-cosmetic-issues.patch
+ - 0034-Grow-Remove-unnecessary-optimization.patch
+ - 0035-Grow-Do-not-shadow-an-existing-variable.patch
+ - 0036-imsm-use-rounded-size-for-metadata-initialization.patch
+ - 0037-mdadm.c-fix-compile-error-switch-condition-has-boole.patch
+ - 0038-mdadm-Create-declaring-an-existing-struct-within-sam.patch
+ - 0039-Create-Fixup-bad-placement-of-logical-in-multi-line-.patch
+ - 0040-Create-Fixup-various-whitespace-issues.patch
+ - 0041-mdadm.c-fix-compile-warning-mdfd-is-uninitialized.patch
+ - 0042-mdopen-use-parameters-new_array-to-create-arrays-whe.patch
+ - 0043-mdadm-manpage-update-manpage-for-readonly-parameter.patch
+ - 0044-mdadm-manpage-clustered-arrays-don-t-support-array-s.patch
+ - 0045-maps-Terminate-modes-map-correctly.patch
+ - 0046-Grow_continue_command-ensure-content-is-properly-ini.patch
+ - 0047-systemd-mdadm-last-resort-use-ConditionPathExists-in.patch
+ - 0048-Detail-ensure-export-names-are-acceptable-as-shell-v.patch
+ - 0049-Grow-set-component-size-prior-to-array-size.patch
+ - 0050-Grow-don-t-allow-to-enable-PPL-when-reshape-is-in-pr.patch
+ - 0051-Grow-don-t-allow-array-geometry-change-with-ppl-enab.patch
+ - 0052-IMSM-Correct-examine-output-for-4k-disks.patch
+ - 0053-imsm-allow-drives-in-a-container-regardless-of-secto.patch
+ - 0054-imsm-allocate-buffer-to-support-maximum-sector-size.patch
+ - 0055-imsm-don-t-allow-disks-with-different-sector-size-in.patch
+ - 0056-mdadm-mdmon-deleted-the-abort_reshape-never-invoked.patch
+ - 0057-util-Introduce-md_get_array_info.patch
+ - 0058-Incremental-Remove-redundant-call-for-GET_ARRAY_INFO.patch
+ - 0059-util-Introduce-md_get_disk_info.patch
+ - 0060-util-Introduce-md_set_array_info.patch
+ - 0061-md_u-Remove-some-unused-ioctl-declarations.patch
+ - 0062-mdadm-grow-reshape-would-be-stuck-from-raid1-to-raid.patch
+ - 0063-sysfs-Use-the-presence-of-sys-block-dev-md-as-indica.patch
+ - 0064-sysfs-Make-sysfs_init-return-an-error-code.patch
+ - 0065-util-must_be_container-Use-sysfs_read-GET_VERSION-to.patch
+ - 0066-util-set_array_info-Simplify-code-since-md_get_versi.patch
+ - 0067-Assemble-Assemble-Stop-checking-kernel-md-driver-ver.patch
+ - 0068-Build-Stop-bothering-about-supporting-md-driver-olde.patch
+ - 0069-Grow-Stop-bothering-about-md-driver-versions-older-t.patch
+ - 0070-Detail-Stop-bothering-about-md-drivers-older-than-0..patch
+ - 0071-Create-Remove-all-attemps-to-handle-md-driver-older-.patch
+ - 0072-Manage-Remove-all-references-to-md_get_version.patch
+ - 0073-Query-Remove-all-references-to-md_get_version.patch
+ - 0074-bitmap-Remove-use-of-md_get_version.patch
+ - 0075-mdmon-Stop-bothering-about-md_get_version.patch
+ - 0076-mdopen-open_mddev-Use-md_get_array_info-to-determine.patch
+ - 0077-mdassemble-Use-md_get_array_info-to-check-for-valid-.patch
+ - 0078-Assemble-Assemble-Get-rid-of-last-use-of-md_get_vers.patch
+ - 0079-util-Finally-kill-off-md_get_version.patch
+ - 0080-mdadm-Fail-for-kernels-older-than-2.6.15.patch
+ - 0081-Revert-mdadm-grow-reshape-would-be-stuck-from-raid1-.patch
+ - 0082-Retire-mdassemble.patch
+ - 0083-super1-Clean-up-various-style-abuses.patch
+ - 0084-Detail-Remove-pre-2.6-code-for-printing-info-on-rebu.patch
+ - 0085-Assemble-Remove-obsolete-test-for-kernels-older-than.patch
+ - 0086-Detail-Fixup-ugly-if-foo-abuse.patch
+ - 0087-Query-Handle-error-returned-by-fstat.patch
+ - 0088-Query-Use-sysfs-to-obtain-data-if-possible.patch
+ - 0089-sysfs-Parse-array_state-in-sysfs_read.patch
+ - 0090-util-Introduce-md_array_active-helper.patch
+ - 0091-maps-Use-keyvalue-for-null-terminator-to-indicate-un.patch
+ - 0092-util-Get-rid-of-unused-enough_fd.patch
+ - 0093-mdadm-retire-mdassemble-in-make-everything.patch
+ - 0094-Query-Quiet-gcc-since-it-cannot-know-errno-0-in-this.patch
+ - 0095-Makefile-Default-to-O2-optimization.patch
+ - 0096-maps-Simplify-implementation-of-map_name.patch
+ - 0097-Don-t-use-UnSet-with-consistency_policy.patch
+ - 0098-Detail-determine-array-state-from-sysfs.patch
+ - 0099-Detail-Respect-code-lines-are-80-character-wide.patch
+ - 0100-Detail-Reinstate-support-for-not-having-sysfs.patch
+ - 0101-Incremental-Use-md_array_active-where-applicable.patch
+ - 0102-Incremental-Cleanup-some-if-statement-spaghetti.patch
+ - 0103-Create-tell-udev-md-device-is-not-ready-when-first-c.patch
+ - 0104-Incremental-Use-md_array_active-to-determine-state-o.patch
+ - 0105-Manage-Manage_ro-Use-md_array_active.patch
+ - 0106-IMSM-Initialize-my_vol_raid_dev_num-during-vol-creat.patch
+ - 0107-Grow-Grow_continue_command-Avoid-aliasing-array-vari.patch
+ - 0108-change-back-0644-permission-for-Grow.c.patch
+ - 0109-util-md_array_valid-Introduce-md_array_valid-helper.patch
+ - 0110-kernel-patch-Remove-obsolete-kernel-patches-against-.patch
+ - 0111-mdassemble-Kill-off-the-last-remains.patch
+ - 0112-mdadm-util-unify-fstat-checking-blkdev-into-function.patch
+ - 0113-mdadm-util-unify-stat-checking-blkdev-into-function.patch
+ - 0114-Fix-typo-in-new-udev-rule.patch
+ - 0115-Incremental-return-is-not-a-function.patch
+ - 0116-sysfs-sysfs_read-Count-active_disks-and-failed_disks.patch
+ - 0117-container_members_max_degradation-Switch-to-using-sy.patch
+ - 0118-IncrementalScan-Use-md_array_active-instead-of-md_ge.patch
+ - 0119-Mention-endian-in-documentation-for-update-byte-orde.patch
+ - 0120-Monitor-Use-md_array_active-instead-of-manually-fidd.patch
+ - 0121-Monitor-Code-is-80-characters-per-line.patch
+ - 0122-mdadm-md.4-set-page-length-as-1000-to-avoid-warnings.patch
+ - 0123-Allow-more-spare-selection-criteria.patch
+ - 0124-Add-sector-size-as-spare-selection-criterion.patch
+ - 0125-Monitor-check_array-Centralize-exit-path.patch
+ - 0126-Monitor-check_array-Reduce-duplicated-error-handling.patch
+ - 0127-Monitor-check_array-Declate-mdinfo-instance-globally.patch
+ - 0128-Monitor-check_array-Read-sysfs-entry-earlier.patch
+ - 0129-Monitor-check_array-Obtain-RAID-level-from-syfs.patch
+ - 0130-Monitor-check_array-Get-failed_disks-from-sysfs.patch
+ - 0131-Monitor-check_array-Get-array_disks-from-sysfs.patch
+ - 0132-Monitor-check_array-Get-nr_disks-active_disks-and-sp.patch
+ - 0133-sysfs-sysfs_read-Count-working_disks.patch
+ - 0134-Monitor-check_array-Use-working_disks-from-sysfs.patch
+ - 0135-retire-the-APIs-that-driver-no-longer-supports.patch
+ - 0136-Monitor-Not-much-point-declaring-mdlist-in-both-fork.patch
+ - 0137-Monitor-mailfrom-is-initialized-correctly.patch
+ - 0138-Monitor-Fixup-a-pile-of-whitespace-issues.patch
+ - 0139-mdadm-Uninitialized-variable-rdev.patch
+ - 0140-super-ddf-sysfs_read-takes-a-pointer-as-device-name-.patch
+ - 0141-mdadm-Fixup-a-large-number-of-bad-formatting-of-logi.patch
+ - 0142-mdadm-Fixup-more-broken-logical-operator-formatting.patch
+ - 0143-mdadm-Fix-broken-formatting.patch
+ - 0144-mdadm-Fixup-broken-formatting.patch
+ - 0145-Detail-don-t-exit-if-ioctl-has-been-successful.patch
+ - 0146-super1-fix-sb-max_dev-when-adding-a-new-disk-in-line.patch
+ - 0147-md_u-Remove-unused-ioctl-declaration-of-START_ARRAY.patch
+ - 0148-Get-failed-disk-count-from-array-state.patch
+ - 0149-Monitor-don-t-assume-mdadm-parameter-is-a-block-devi.patch
+ - 0150-super1-Always-round-data-offset-to-1M.patch
+ - 0151-mdadm-r5cache-allow-adding-journal-to-array-without-.patch
+ - 0152-udev-rules-introduce-rules-for-cluster-md-to-confirm.patch
+ - 0153-Detail-correct-output-for-active-arrays.patch
+ - 0154-imsm-rebuild-from-2-disk-RAID10.patch
+ - 0155-Error-messages-should-end-with-a-newline-character.patch
+ - 0156-Use-correct-syntax-for-passing-DEVLINKS-to-mdadm-fro.patch
+ - 0157-super1-only-set-clustered-flag-when-bitmap-is-presen.patch
+ - 0158-Don-t-use-exit-ERANGE.patch
+ - 0159-Monitor-containers-don-t-have-the-same-sysfs-propert.patch
+ - 0160-Monitor-Include-containers-in-spare-migration.patch
+ - 0161-Detail-differentiate-between-container-and-inactive-.patch
++++ 105 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/mdadm/mdadm.changes
++++ and /work/SRC/openSUSE:Factory/.mdadm.new.28833/mdadm.changes

Old:
----
  0001-Makefile-Fix-date-to-be-output-in-ISO-format.patch
  0002-imsm-fix-missing-error-message-during-migration.patch
  0003-Fix-oddity-where-mdadm-did-not-recognise-a-relative-.patch
  0004-mdadm-check-the-nodes-when-operate-clustered-array.patch
  0005-examine-tidy-up-some-code.patch
  0006-mdadm-add-man-page-for-symlinks.patch
  0007-mdadm-add-checking-clustered-bitmap-in-assemble-mode.patch
  0008-mdadm-Add-Wimplicit-fallthrough-0-in-Makefile.patch
  0009-mdadm-Specify-enough-length-when-write-to-buffer.patch
  0010-mdadm-it-doesn-t-make-sense-to-set-bitmap-twice.patch
  0011-mdadm-Monitor-Fix-NULL-pointer-dereference-when-stat.patch
  0012-Replace-snprintf-with-strncpy-at-some-places-to-avoi.patch
  0013-mdadm-Forced-type-conversion-to-avoid-truncation.patch
  0014-super1-ignore-failfast-flag-for-setting-device-role.patch
  0015-mdadm-bitmap-fixed-typos-in-comments-of-bitmap.h.patch
  0016-udev-md-raid-assembly.rules-Skip-non-ready-devices.patch
  0017-Retry-HOT_REMOVE_DISK-a-few-times.patch
  0018-mdadm-Build-check-the-level-parameter-when-build-new.patch
  0019-Introduce-sys_hot_remove_disk.patch
  0020-Add-force-flag-to-hot_remove_disk.patch
  0021-Detail-handle-non-existent-arrays-better.patch
  0022-Generic-support-for-consistency-policy-and-PPL.patch
  0023-Detail-show-consistency-policy.patch
  0024-imsm-PPL-support.patch
  0025-super1-PPL-support.patch
  0026-Add-ppl-and-no-ppl-options-for-update.patch
  0027-Grow-support-consistency-policy-change.patch
  0028-mdadm.h-struct-mdinfo-reorganize-ppl-elements-for-be.patch
  0029-super1-replace-hard-coded-values-with-bit-definition.patch
  0030-mdadm-Clean-up-some-ugly-multiple-actions-on-single-.patch
  0031-mdadm-Fixup-a-number-of-whitespace-inconsistency-cas.patch
  0032-util-Cosmetic-changes.patch
  0033-Grow-Fixup-a-pile-of-cosmetic-issues.patch
  0034-Grow-Remove-unnecessary-optimization.patch
  0035-Grow-Do-not-shadow-an-existing-variable.patch
  0036-imsm-use-rounded-size-for-metadata-initialization.patch
  0037-mdadm.c-fix-compile-error-switch-condition-has-boole.patch
  0038-mdadm-Create-declaring-an-existing-struct-within-sam.patch
  0039-Create-Fixup-bad-placement-of-logical-in-multi-line-.patch
  0040-Create-Fixup-various-whitespace-issues.patch
  0041-mdadm.c-fix-compile-warning-mdfd-is-uninitialized.patch
  0042-mdopen-use-parameters-new_array-to-create-arrays-whe.patch
  0043-mdadm-manpage-update-manpage-for-readonly-parameter.patch
  0044-mdadm-manpage-clustered-arrays-don-t-support-array-s.patch
  0045-maps-Terminate-modes-map-correctly.patch
  0046-Grow_continue_command-ensure-content-is-properly-ini.patch
  0047-systemd-mdadm-last-resort-use-ConditionPathExists-in.patch
  0048-Detail-ensure-export-names-are-acceptable-as-shell-v.patch
  0049-Grow-set-component-size-prior-to-array-size.patch
  0050-Grow-don-t-allow-to-enable-PPL-when-reshape-is-in-pr.patch
  0051-Grow-don-t-allow-array-geometry-change-with-ppl-enab.patch
  0052-IMSM-Correct-examine-output-for-4k-disks.patch
  0053-imsm-allow-drives-in-a-container-regardless-of-secto.patch
  0054-imsm-allocate-buffer-to-support-maximum-sector-size.patch
  0055-imsm-don-t-allow-disks-with-different-sector-size-in.patch
  0056-mdadm-mdmon-deleted-the-abort_reshape-never-invoked.patch
  0057-util-Introduce-md_get_array_info.patch
  0058-Incremental-Remove-redundant-call-for-GET_ARRAY_INFO.patch
  0059-util-Introduce-md_get_disk_info.patch
  0060-util-Introduce-md_set_array_info.patch
  0061-md_u-Remove-some-unused-ioctl-declarations.patch
  0062-mdadm-grow-reshape-would-be-stuck-from-raid1-to-raid.patch
  0063-sysfs-Use-the-presence-of-sys-block-dev-md-as-indica.patch
  0064-sysfs-Make-sysfs_init-return-an-error-code.patch
  0065-util-must_be_container-Use-sysfs_read-GET_VERSION-to.patch
  0066-util-set_array_info-Simplify-code-since-md_get_versi.patch
  0067-Assemble-Assemble-Stop-checking-kernel-md-driver-ver.patch
  0068-Build-Stop-bothering-about-supporting-md-driver-olde.patch
  0069-Grow-Stop-bothering-about-md-driver-versions-older-t.patch
  0070-Detail-Stop-bothering-about-md-drivers-older-than-0..patch
  0071-Create-Remove-all-attemps-to-handle-md-driver-older-.patch
  0072-Manage-Remove-all-references-to-md_get_version.patch
  0073-Query-Remove-all-references-to-md_get_version.patch
  0074-bitmap-Remove-use-of-md_get_version.patch
  0075-mdmon-Stop-bothering-about-md_get_version.patch
  0076-mdopen-open_mddev-Use-md_get_array_info-to-determine.patch
  0077-mdassemble-Use-md_get_array_info-to-check-for-valid-.patch
  0078-Assemble-Assemble-Get-rid-of-last-use-of-md_get_vers.patch
  0079-util-Finally-kill-off-md_get_version.patch
  0080-mdadm-Fail-for-kernels-older-than-2.6.15.patch
  0081-Revert-mdadm-grow-reshape-would-be-stuck-from-raid1-.patch
  0082-Retire-mdassemble.patch
  0083-super1-Clean-up-various-style-abuses.patch
  0084-Detail-Remove-pre-2.6-code-for-printing-info-on-rebu.patch
  0085-Assemble-Remove-obsolete-test-for-kernels-older-than.patch
  0086-Detail-Fixup-ugly-if-foo-abuse.patch
  0087-Query-Handle-error-returned-by-fstat.patch
  0088-Query-Use-sysfs-to-obtain-data-if-possible.patch
  0089-sysfs-Parse-array_state-in-sysfs_read.patch
  0090-util-Introduce-md_array_active-helper.patch
  0091-maps-Use-keyvalue-for-null-terminator-to-indicate-un.patch
  0092-util-Get-rid-of-unused-enough_fd.patch
  0093-mdadm-retire-mdassemble-in-make-everything.patch
  0094-Query-Quiet-gcc-since-it-cannot-know-errno-0-in-this.patch
  0095-Makefile-Default-to-O2-optimization.patch
  0096-maps-Simplify-implementation-of-map_name.patch
  0097-Don-t-use-UnSet-with-consistency_policy.patch
  0098-Detail-determine-array-state-from-sysfs.patch
  0099-Detail-Respect-code-lines-are-80-character-wide.patch
  0100-Detail-Reinstate-support-for-not-having-sysfs.patch
  0101-Incremental-Use-md_array_active-where-applicable.patch
  0102-Incremental-Cleanup-some-if-statement-spaghetti.patch
  0103-Create-tell-udev-md-device-is-not-ready-when-first-c.patch
  0104-Incremental-Use-md_array_active-to-determine-state-o.patch
  0105-Manage-Manage_ro-Use-md_array_active.patch
  0106-IMSM-Initialize-my_vol_raid_dev_num-during-vol-creat.patch
  0107-Grow-Grow_continue_command-Avoid-aliasing-array-vari.patch
  0108-change-back-0644-permission-for-Grow.c.patch
  0109-util-md_array_valid-Introduce-md_array_valid-helper.patch
  0110-kernel-patch-Remove-obsolete-kernel-patches-against-.patch
  0111-mdassemble-Kill-off-the-last-remains.patch
  0112-mdadm-util-unify-fstat-checking-blkdev-into-function.patch
  0113-mdadm-util-unify-stat-checking-blkdev-into-function.patch
  0114-Fix-typo-in-new-udev-rule.patch
  0115-Incremental-return-is-not-a-function.patch
  0116-sysfs-sysfs_read-Count-active_disks-and-failed_disks.patch
  0117-container_members_max_degradation-Switch-to-using-sy.patch
  0118-IncrementalScan-Use-md_array_active-instead-of-md_ge.patch
  0119-Mention-endian-in-documentation-for-update-byte-orde.patch
  0120-Monitor-Use-md_array_active-instead-of-manually-fidd.patch
  0121-Monitor-Code-is-80-characters-per-line.patch
  0122-mdadm-md.4-set-page-length-as-1000-to-avoid-warnings.patch
  0123-Allow-more-spare-selection-criteria.patch
  0124-Add-sector-size-as-spare-selection-criterion.patch
  0125-Monitor-check_array-Centralize-exit-path.patch
  0126-Monitor-check_array-Reduce-duplicated-error-handling.patch
  0127-Monitor-check_array-Declate-mdinfo-instance-globally.patch
  0128-Monitor-check_array-Read-sysfs-entry-earlier.patch
  0129-Monitor-check_array-Obtain-RAID-level-from-syfs.patch
  0130-Monitor-check_array-Get-failed_disks-from-sysfs.patch
  0131-Monitor-check_array-Get-array_disks-from-sysfs.patch
  0132-Monitor-check_array-Get-nr_disks-active_disks-and-sp.patch
  0133-sysfs-sysfs_read-Count-working_disks.patch
  0134-Monitor-check_array-Use-working_disks-from-sysfs.patch
  0135-retire-the-APIs-that-driver-no-longer-supports.patch
  0136-Monitor-Not-much-point-declaring-mdlist-in-both-fork.patch
  0137-Monitor-mailfrom-is-initialized-correctly.patch
  0138-Monitor-Fixup-a-pile-of-whitespace-issues.patch
  0139-mdadm-Uninitialized-variable-rdev.patch
  0140-super-ddf-sysfs_read-takes-a-pointer-as-device-name-.patch
  0141-mdadm-Fixup-a-large-number-of-bad-formatting-of-logi.patch
  0142-mdadm-Fixup-more-broken-logical-operator-formatting.patch
  0143-mdadm-Fix-broken-formatting.patch
  0144-mdadm-Fixup-broken-formatting.patch
  0145-Detail-don-t-exit-if-ioctl-has-been-successful.patch
  0146-super1-fix-sb-max_dev-when-adding-a-new-disk-in-line.patch
  0147-md_u-Remove-unused-ioctl-declaration-of-START_ARRAY.patch
  0148-Get-failed-disk-count-from-array-state.patch
  0149-Monitor-don-t-assume-mdadm-parameter-is-a-block-devi.patch
  0150-super1-Always-round-data-offset-to-1M.patch
  0151-mdadm-r5cache-allow-adding-journal-to-array-without-.patch
  0152-udev-rules-introduce-rules-for-cluster-md-to-confirm.patch
  0153-Detail-correct-output-for-active-arrays.patch
  0154-imsm-rebuild-from-2-disk-RAID10.patch
  0155-Error-messages-should-end-with-a-newline-character.patch
  0156-Use-correct-syntax-for-passing-DEVLINKS-to-mdadm-fro.patch
  0157-super1-only-set-clustered-flag-when-bitmap-is-presen.patch
  0158-Don-t-use-exit-ERANGE.patch
  0159-Monitor-containers-don-t-have-the-same-sysfs-propert.patch
  0160-Monitor-Include-containers-in-spare-migration.patch
  0161-Detail-differentiate-between-container-and-inactive-.patch
  0162-mdadm-install-two-more-udev-rules-in-mdadm.spec.patch
  0163-mdadm-set-journal_clean-after-scanning-all-disks.patch
  0164-mdadm-bitmap-examine-bitmap-failed-when-bitmap-is-ex.patch
  0165-mdopen-call-modprobe-md_mod-if-it-might-be-needed.patch
  0166-lib-devid2kname-should-take-a-dev_t.patch
  0167-sysfs_init_dev-take-a-dev_t-argument.patch
  0168-Manage_subdevs-Use-a-dev_t.patch
  0169-util-Code-is-80-characters-wide.patch
  0170-Close-mdfd-before-returning-main-function.patch
  0171-Grow-stop-previous-reshape-process-first.patch
  0172-imsm-New-disk-controller-domains.patch
  0173-Monitor-Check-redundancy-for-arrays.patch
  0174-mdadm-grow-Component-size-must-be-larger-than-chunk-.patch
  0175-mdadm-manpage-disable-bitmap_resize-for-external-fil.patch
  0176-mdadm-fixes-some-trivial-typos-in-comments.patch
  0177-Don-t-abort-starting-the-array-if-kernel-does-not-su.patch
  0178-super1-Add-support-for-multiple-ppls.patch
  0179-imsm-Add-support-for-multiple-ppls.patch
  0180-imsm-validate-multiple-ppls-during-assemble.patch
  0181-Zeroout-whole-ppl-space-during-creation-force-assemb.patch
  0182-imsm-switch-to-multiple-ppls-automatically-during-as.patch
  0183-Grow-fix-switching-on-PPL-during-recovery.patch
  0184-imsm-don-t-skip-resync-when-an-invalid-ppl-header-is.patch
  0185-imsm-Write-empty-PPL-header-if-assembling-regular-cl.patch
  0186-imsm-always-do-ppl-recovery-when-starting-a-rebuildi.patch
  0187-imsm-use-correct-map-when-validating-ppl.patch
  0188-imsm-write-initial-ppl-on-a-disk-added-for-rebuild.patch
  0189-Grow-Use-all-80-characters.patch
  0190-imsm-Set-disk-slot-number.patch
  0191-mdmon-get-safe-mode-delay-file-descriptor-early.patch
  0192-mdadm-mdstat-fixup-a-number-of-broken-formatting.patch
  0193-mdadm-mdstat-correct-the-strncmp-number-4-as-6.patch
  0194-mdcheck-add-some-logging.patch
  0195-mdcheck-improve-cleanup.patch
  0197-mdadm-grow-adding-a-test-to-ensure-resize-was-requir.patch
  0198-mdadm-mdopen-create-new-function-create_named_array-.patch
  0199-systemd-add-I-to-description-of-mdadm-last-resort-se.patch
  0200-Incremental-Use-validate_geometry-instead-of-avail_s.patch
  0201-imsm-fix-reading-scsi-serial.patch
  0202-To-support-clustered-raid10.patch
  0203-imsm-More-precise-message-when-spanned-raid-is-creat.patch
  0204-sysfs-include-faulty-drive-in-disk-count.patch
  0205-Monitor-msg-Don-t-print-error-message-if-mdmon-doesn.patch
  0206-imsm-continue-resync-on-3-disk-RAID10.patch
  0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch
  0208-mdadm-grow-correct-the-s-size-1-to-make-max-work.patch
  0209-policy.c-Avoid-to-take-spare-without-defined-domain-.patch
  0210-mdadm-allow-clustered-raid10-to-be-created-with-defa.patch
  cron.d.mdadm
  mdadm-4.0.tar.xz
  mdadm.cron

New:
----
  0001-Document-PART-POLICY-lines.patch
  0001-Makefile-install-mdadm_env.sh-to-usr-lib-mdadm.patch
  0002-policy-support-devices-with-multiple-paths.patch
  0003-mdcheck-add-systemd-unit-files-to-run-mdcheck.patch
  0004-Monitor-add-system-timer-to-run-oneshot-periodically.patch
  0005-imsm-update-metadata-correctly-while-raid10-double-d.patch
  0006-Grow-avoid-overflow-in-compute_backup_blocks.patch
  0007-Grow-report-correct-new-chunk-size.patch
  0008-policy.c-prevent-NULL-pointer-referencing.patch
  1001-display-timeout-status.patch
  mdadm-4.1.tar.xz

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

Other differences:
------------------
++++++ mdadm.spec ++++++
--- /var/tmp/diff_new_pack.S4Mh7v/_old  2018-12-19 13:25:31.021228342 +0100
+++ /var/tmp/diff_new_pack.S4Mh7v/_new  2018-12-19 13:25:31.021228342 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package mdadm
 #
-# Copyright (c) 2018 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -22,7 +22,7 @@
 %endif
 
 Name:           mdadm
-Version:        4.0
+Version:        4.1
 Release:        0
 BuildRequires:  binutils-devel
 BuildRequires:  groff
@@ -32,248 +32,34 @@
 BuildRequires:  pkgconfig(systemd)
 BuildRequires:  pkgconfig(udev)
 PreReq:         %fillup_prereq /sbin/mkinitrd coreutils
-Recommends:     cron
 Recommends:     smtp_daemon
 Url:            http://www.kernel.org/pub/linux/utils/raid/mdadm/
-Summary:        Utility for Configuring MD Setup
-License:        GPL-2.0
+Summary:        Utility for configuring "MD" software RAID devices
+License:        GPL-2.0-only
 Group:          System/Base
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Source:         
https://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.xz
 Source1:        Software-RAID.HOWTO.tar.bz2
 Source2:        sysconfig.mdadm
-Source3:        cron.d.mdadm
-Source7:        mdadm.cron
-Patch1:         0001-Makefile-Fix-date-to-be-output-in-ISO-format.patch
-Patch2:         0002-imsm-fix-missing-error-message-during-migration.patch
-Patch3:         0003-Fix-oddity-where-mdadm-did-not-recognise-a-relative-.patch
-Patch4:         0004-mdadm-check-the-nodes-when-operate-clustered-array.patch
-Patch5:         0005-examine-tidy-up-some-code.patch
-Patch6:         0006-mdadm-add-man-page-for-symlinks.patch
-Patch7:         0007-mdadm-add-checking-clustered-bitmap-in-assemble-mode.patch
-Patch8:         0008-mdadm-Add-Wimplicit-fallthrough-0-in-Makefile.patch
-Patch9:         0009-mdadm-Specify-enough-length-when-write-to-buffer.patch
-Patch10:        0010-mdadm-it-doesn-t-make-sense-to-set-bitmap-twice.patch
-Patch11:        0011-mdadm-Monitor-Fix-NULL-pointer-dereference-when-stat.patch
-Patch12:        0012-Replace-snprintf-with-strncpy-at-some-places-to-avoi.patch
-Patch13:        0013-mdadm-Forced-type-conversion-to-avoid-truncation.patch
-Patch14:        0014-super1-ignore-failfast-flag-for-setting-device-role.patch
-Patch15:        0015-mdadm-bitmap-fixed-typos-in-comments-of-bitmap.h.patch
-Patch16:        0016-udev-md-raid-assembly.rules-Skip-non-ready-devices.patch
-Patch17:        0017-Retry-HOT_REMOVE_DISK-a-few-times.patch
-Patch18:        0018-mdadm-Build-check-the-level-parameter-when-build-new.patch
-Patch19:        0019-Introduce-sys_hot_remove_disk.patch
-Patch20:        0020-Add-force-flag-to-hot_remove_disk.patch
-Patch21:        0021-Detail-handle-non-existent-arrays-better.patch
-Patch22:        0022-Generic-support-for-consistency-policy-and-PPL.patch
-Patch23:        0023-Detail-show-consistency-policy.patch
-Patch24:        0024-imsm-PPL-support.patch
-Patch25:        0025-super1-PPL-support.patch
-Patch26:        0026-Add-ppl-and-no-ppl-options-for-update.patch
-Patch27:        0027-Grow-support-consistency-policy-change.patch
-Patch28:        0028-mdadm.h-struct-mdinfo-reorganize-ppl-elements-for-be.patch
-Patch29:        0029-super1-replace-hard-coded-values-with-bit-definition.patch
-Patch30:        0030-mdadm-Clean-up-some-ugly-multiple-actions-on-single-.patch
-Patch31:        0031-mdadm-Fixup-a-number-of-whitespace-inconsistency-cas.patch
-Patch32:        0032-util-Cosmetic-changes.patch
-Patch33:        0033-Grow-Fixup-a-pile-of-cosmetic-issues.patch
-Patch34:        0034-Grow-Remove-unnecessary-optimization.patch
-Patch35:        0035-Grow-Do-not-shadow-an-existing-variable.patch
-Patch36:        0036-imsm-use-rounded-size-for-metadata-initialization.patch
-Patch37:        0037-mdadm.c-fix-compile-error-switch-condition-has-boole.patch
-Patch38:        0038-mdadm-Create-declaring-an-existing-struct-within-sam.patch
-Patch39:        0039-Create-Fixup-bad-placement-of-logical-in-multi-line-.patch
-Patch40:        0040-Create-Fixup-various-whitespace-issues.patch
-Patch41:        0041-mdadm.c-fix-compile-warning-mdfd-is-uninitialized.patch
-Patch42:        0042-mdopen-use-parameters-new_array-to-create-arrays-whe.patch
-Patch43:        0043-mdadm-manpage-update-manpage-for-readonly-parameter.patch
-Patch44:        0044-mdadm-manpage-clustered-arrays-don-t-support-array-s.patch
-Patch45:        0045-maps-Terminate-modes-map-correctly.patch
-Patch46:        0046-Grow_continue_command-ensure-content-is-properly-ini.patch
-Patch47:        0047-systemd-mdadm-last-resort-use-ConditionPathExists-in.patch
-Patch48:        0048-Detail-ensure-export-names-are-acceptable-as-shell-v.patch
-Patch49:        0049-Grow-set-component-size-prior-to-array-size.patch
-Patch50:        0050-Grow-don-t-allow-to-enable-PPL-when-reshape-is-in-pr.patch
-Patch51:        0051-Grow-don-t-allow-array-geometry-change-with-ppl-enab.patch
-Patch52:        0052-IMSM-Correct-examine-output-for-4k-disks.patch
-Patch53:        0053-imsm-allow-drives-in-a-container-regardless-of-secto.patch
-Patch54:        0054-imsm-allocate-buffer-to-support-maximum-sector-size.patch
-Patch55:        0055-imsm-don-t-allow-disks-with-different-sector-size-in.patch
-Patch56:        0056-mdadm-mdmon-deleted-the-abort_reshape-never-invoked.patch
-Patch57:        0057-util-Introduce-md_get_array_info.patch
-Patch58:        0058-Incremental-Remove-redundant-call-for-GET_ARRAY_INFO.patch
-Patch59:        0059-util-Introduce-md_get_disk_info.patch
-Patch60:        0060-util-Introduce-md_set_array_info.patch
-Patch61:        0061-md_u-Remove-some-unused-ioctl-declarations.patch
-Patch62:        0062-mdadm-grow-reshape-would-be-stuck-from-raid1-to-raid.patch
-Patch63:        0063-sysfs-Use-the-presence-of-sys-block-dev-md-as-indica.patch
-Patch64:        0064-sysfs-Make-sysfs_init-return-an-error-code.patch
-Patch65:        0065-util-must_be_container-Use-sysfs_read-GET_VERSION-to.patch
-Patch66:        0066-util-set_array_info-Simplify-code-since-md_get_versi.patch
-Patch67:        0067-Assemble-Assemble-Stop-checking-kernel-md-driver-ver.patch
-Patch68:        0068-Build-Stop-bothering-about-supporting-md-driver-olde.patch
-Patch69:        0069-Grow-Stop-bothering-about-md-driver-versions-older-t.patch
-Patch70:        0070-Detail-Stop-bothering-about-md-drivers-older-than-0..patch
-Patch71:        0071-Create-Remove-all-attemps-to-handle-md-driver-older-.patch
-Patch72:        0072-Manage-Remove-all-references-to-md_get_version.patch
-Patch73:        0073-Query-Remove-all-references-to-md_get_version.patch
-Patch74:        0074-bitmap-Remove-use-of-md_get_version.patch
-Patch75:        0075-mdmon-Stop-bothering-about-md_get_version.patch
-Patch76:        0076-mdopen-open_mddev-Use-md_get_array_info-to-determine.patch
-Patch77:        0077-mdassemble-Use-md_get_array_info-to-check-for-valid-.patch
-Patch78:        0078-Assemble-Assemble-Get-rid-of-last-use-of-md_get_vers.patch
-Patch79:        0079-util-Finally-kill-off-md_get_version.patch
-Patch80:        0080-mdadm-Fail-for-kernels-older-than-2.6.15.patch
-Patch81:        0081-Revert-mdadm-grow-reshape-would-be-stuck-from-raid1-.patch
-Patch82:        0082-Retire-mdassemble.patch
-Patch83:        0083-super1-Clean-up-various-style-abuses.patch
-Patch84:        0084-Detail-Remove-pre-2.6-code-for-printing-info-on-rebu.patch
-Patch85:        0085-Assemble-Remove-obsolete-test-for-kernels-older-than.patch
-Patch86:        0086-Detail-Fixup-ugly-if-foo-abuse.patch
-Patch87:        0087-Query-Handle-error-returned-by-fstat.patch
-Patch88:        0088-Query-Use-sysfs-to-obtain-data-if-possible.patch
-Patch89:        0089-sysfs-Parse-array_state-in-sysfs_read.patch
-Patch90:        0090-util-Introduce-md_array_active-helper.patch
-Patch91:        0091-maps-Use-keyvalue-for-null-terminator-to-indicate-un.patch
-Patch92:        0092-util-Get-rid-of-unused-enough_fd.patch
-Patch93:        0093-mdadm-retire-mdassemble-in-make-everything.patch
-Patch94:        0094-Query-Quiet-gcc-since-it-cannot-know-errno-0-in-this.patch
-Patch95:        0095-Makefile-Default-to-O2-optimization.patch
-Patch96:        0096-maps-Simplify-implementation-of-map_name.patch
-Patch97:        0097-Don-t-use-UnSet-with-consistency_policy.patch
-Patch98:        0098-Detail-determine-array-state-from-sysfs.patch
-Patch99:        0099-Detail-Respect-code-lines-are-80-character-wide.patch
-Patch100:       0100-Detail-Reinstate-support-for-not-having-sysfs.patch
-Patch101:       0101-Incremental-Use-md_array_active-where-applicable.patch
-Patch102:       0102-Incremental-Cleanup-some-if-statement-spaghetti.patch
-Patch103:       0103-Create-tell-udev-md-device-is-not-ready-when-first-c.patch
-Patch104:       0104-Incremental-Use-md_array_active-to-determine-state-o.patch
-Patch105:       0105-Manage-Manage_ro-Use-md_array_active.patch
-Patch106:       0106-IMSM-Initialize-my_vol_raid_dev_num-during-vol-creat.patch
-Patch107:       0107-Grow-Grow_continue_command-Avoid-aliasing-array-vari.patch
-Patch108:       0108-change-back-0644-permission-for-Grow.c.patch
-Patch109:       0109-util-md_array_valid-Introduce-md_array_valid-helper.patch
-Patch110:       0110-kernel-patch-Remove-obsolete-kernel-patches-against-.patch
-Patch111:       0111-mdassemble-Kill-off-the-last-remains.patch
-Patch112:       0112-mdadm-util-unify-fstat-checking-blkdev-into-function.patch
-Patch113:       0113-mdadm-util-unify-stat-checking-blkdev-into-function.patch
-Patch114:       0114-Fix-typo-in-new-udev-rule.patch
-Patch115:       0115-Incremental-return-is-not-a-function.patch
-Patch116:       0116-sysfs-sysfs_read-Count-active_disks-and-failed_disks.patch
-Patch117:       0117-container_members_max_degradation-Switch-to-using-sy.patch
-Patch118:       0118-IncrementalScan-Use-md_array_active-instead-of-md_ge.patch
-Patch119:       0119-Mention-endian-in-documentation-for-update-byte-orde.patch
-Patch120:       0120-Monitor-Use-md_array_active-instead-of-manually-fidd.patch
-Patch121:       0121-Monitor-Code-is-80-characters-per-line.patch
-Patch122:       0122-mdadm-md.4-set-page-length-as-1000-to-avoid-warnings.patch
-Patch123:       0123-Allow-more-spare-selection-criteria.patch
-Patch124:       0124-Add-sector-size-as-spare-selection-criterion.patch
-Patch125:       0125-Monitor-check_array-Centralize-exit-path.patch
-Patch126:       0126-Monitor-check_array-Reduce-duplicated-error-handling.patch
-Patch127:       0127-Monitor-check_array-Declate-mdinfo-instance-globally.patch
-Patch128:       0128-Monitor-check_array-Read-sysfs-entry-earlier.patch
-Patch129:       0129-Monitor-check_array-Obtain-RAID-level-from-syfs.patch
-Patch130:       0130-Monitor-check_array-Get-failed_disks-from-sysfs.patch
-Patch131:       0131-Monitor-check_array-Get-array_disks-from-sysfs.patch
-Patch132:       0132-Monitor-check_array-Get-nr_disks-active_disks-and-sp.patch
-Patch133:       0133-sysfs-sysfs_read-Count-working_disks.patch
-Patch134:       0134-Monitor-check_array-Use-working_disks-from-sysfs.patch
-Patch135:       0135-retire-the-APIs-that-driver-no-longer-supports.patch
-Patch136:       0136-Monitor-Not-much-point-declaring-mdlist-in-both-fork.patch
-Patch137:       0137-Monitor-mailfrom-is-initialized-correctly.patch
-Patch138:       0138-Monitor-Fixup-a-pile-of-whitespace-issues.patch
-Patch139:       0139-mdadm-Uninitialized-variable-rdev.patch
-Patch140:       0140-super-ddf-sysfs_read-takes-a-pointer-as-device-name-.patch
-Patch141:       0141-mdadm-Fixup-a-large-number-of-bad-formatting-of-logi.patch
-Patch142:       0142-mdadm-Fixup-more-broken-logical-operator-formatting.patch
-Patch143:       0143-mdadm-Fix-broken-formatting.patch
-Patch144:       0144-mdadm-Fixup-broken-formatting.patch
-Patch145:       0145-Detail-don-t-exit-if-ioctl-has-been-successful.patch
-Patch146:       0146-super1-fix-sb-max_dev-when-adding-a-new-disk-in-line.patch
-Patch147:       0147-md_u-Remove-unused-ioctl-declaration-of-START_ARRAY.patch
-Patch148:       0148-Get-failed-disk-count-from-array-state.patch
-Patch149:       0149-Monitor-don-t-assume-mdadm-parameter-is-a-block-devi.patch
-Patch150:       0150-super1-Always-round-data-offset-to-1M.patch
-Patch151:       0151-mdadm-r5cache-allow-adding-journal-to-array-without-.patch
-Patch152:       0152-udev-rules-introduce-rules-for-cluster-md-to-confirm.patch
-Patch153:       0153-Detail-correct-output-for-active-arrays.patch
-Patch154:       0154-imsm-rebuild-from-2-disk-RAID10.patch
-Patch155:       0155-Error-messages-should-end-with-a-newline-character.patch
-Patch156:       0156-Use-correct-syntax-for-passing-DEVLINKS-to-mdadm-fro.patch
-Patch157:       0157-super1-only-set-clustered-flag-when-bitmap-is-presen.patch
-Patch158:       0158-Don-t-use-exit-ERANGE.patch
-Patch159:       0159-Monitor-containers-don-t-have-the-same-sysfs-propert.patch
-Patch160:       0160-Monitor-Include-containers-in-spare-migration.patch
-Patch161:       0161-Detail-differentiate-between-container-and-inactive-.patch
-Patch162:       0162-mdadm-install-two-more-udev-rules-in-mdadm.spec.patch
-Patch163:       0163-mdadm-set-journal_clean-after-scanning-all-disks.patch
-Patch164:       0164-mdadm-bitmap-examine-bitmap-failed-when-bitmap-is-ex.patch
-Patch165:       0165-mdopen-call-modprobe-md_mod-if-it-might-be-needed.patch
-Patch166:       0166-lib-devid2kname-should-take-a-dev_t.patch
-Patch167:       0167-sysfs_init_dev-take-a-dev_t-argument.patch
-Patch168:       0168-Manage_subdevs-Use-a-dev_t.patch
-Patch169:       0169-util-Code-is-80-characters-wide.patch
-Patch170:       0170-Close-mdfd-before-returning-main-function.patch
-Patch171:       0171-Grow-stop-previous-reshape-process-first.patch
-Patch172:       0172-imsm-New-disk-controller-domains.patch
-Patch173:       0173-Monitor-Check-redundancy-for-arrays.patch
-Patch174:       0174-mdadm-grow-Component-size-must-be-larger-than-chunk-.patch
-Patch175:       0175-mdadm-manpage-disable-bitmap_resize-for-external-fil.patch
-Patch176:       0176-mdadm-fixes-some-trivial-typos-in-comments.patch
-Patch177:       0177-Don-t-abort-starting-the-array-if-kernel-does-not-su.patch
-Patch178:       0178-super1-Add-support-for-multiple-ppls.patch
-Patch179:       0179-imsm-Add-support-for-multiple-ppls.patch
-Patch180:       0180-imsm-validate-multiple-ppls-during-assemble.patch
-Patch181:       0181-Zeroout-whole-ppl-space-during-creation-force-assemb.patch
-Patch182:       0182-imsm-switch-to-multiple-ppls-automatically-during-as.patch
-Patch183:       0183-Grow-fix-switching-on-PPL-during-recovery.patch
-Patch184:       0184-imsm-don-t-skip-resync-when-an-invalid-ppl-header-is.patch
-Patch185:       0185-imsm-Write-empty-PPL-header-if-assembling-regular-cl.patch
-Patch186:       0186-imsm-always-do-ppl-recovery-when-starting-a-rebuildi.patch
-Patch187:       0187-imsm-use-correct-map-when-validating-ppl.patch
-Patch188:       0188-imsm-write-initial-ppl-on-a-disk-added-for-rebuild.patch
-Patch189:       0189-Grow-Use-all-80-characters.patch
-Patch190:       0190-imsm-Set-disk-slot-number.patch
-Patch191:       0191-mdmon-get-safe-mode-delay-file-descriptor-early.patch
-Patch192:       0192-mdadm-mdstat-fixup-a-number-of-broken-formatting.patch
-Patch193:       0193-mdadm-mdstat-correct-the-strncmp-number-4-as-6.patch
-Patch194:       0194-mdcheck-add-some-logging.patch
-Patch195:       0195-mdcheck-improve-cleanup.patch
-Patch197:       0197-mdadm-grow-adding-a-test-to-ensure-resize-was-requir.patch
-Patch198:       0198-mdadm-mdopen-create-new-function-create_named_array-.patch
-Patch199:       0199-systemd-add-I-to-description-of-mdadm-last-resort-se.patch
-Patch200:       0200-Incremental-Use-validate_geometry-instead-of-avail_s.patch
-Patch201:       0201-imsm-fix-reading-scsi-serial.patch
-Patch202:       0202-To-support-clustered-raid10.patch
-Patch203:       0203-imsm-More-precise-message-when-spanned-raid-is-creat.patch
-Patch204:       0204-sysfs-include-faulty-drive-in-disk-count.patch
-Patch205:       0205-Monitor-msg-Don-t-print-error-message-if-mdmon-doesn.patch
-Patch206:       0206-imsm-continue-resync-on-3-disk-RAID10.patch
-Patch207:       0207-managemon-Don-t-add-disk-to-the-array-after-it-has-s.patch
-Patch208:       0208-mdadm-grow-correct-the-s-size-1-to-make-max-work.patch
-Patch209:       0209-policy.c-Avoid-to-take-spare-without-defined-domain-.patch
-Patch210:       0210-mdadm-allow-clustered-raid10-to-be-created-with-defa.patch
-
+Patch1:         0001-Makefile-install-mdadm_env.sh-to-usr-lib-mdadm.patch
+Patch11:        0001-Document-PART-POLICY-lines.patch
+Patch12:        0002-policy-support-devices-with-multiple-paths.patch
+Patch13:        0003-mdcheck-add-systemd-unit-files-to-run-mdcheck.patch
+Patch14:        0004-Monitor-add-system-timer-to-run-oneshot-periodically.patch
+Patch15:        0005-imsm-update-metadata-correctly-while-raid10-double-d.patch
+Patch16:        0006-Grow-avoid-overflow-in-compute_backup_blocks.patch
+Patch17:        0007-Grow-report-correct-new-chunk-size.patch
+Patch18:        0008-policy.c-prevent-NULL-pointer-referencing.patch
+Patch1001:      1001-display-timeout-status.patch
 %define _udevdir %(pkg-config --variable=udevdir udev)
 %define _systemdshutdowndir %{_unitdir}/../system-shutdown
 
 %description
-Mdadm is a program that can be used to control Linux md devices. It is
-intended to provide all the functionality of the mdtools and raidtools
-programs but with a very different interface.
+mdadm is a program that can be used to control Linux md devices.
 
 %prep
 %setup -q -a1
 %patch1 -p1
-%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
 %patch11 -p1
 %patch12 -p1
 %patch13 -p1
@@ -282,220 +68,26 @@
 %patch16 -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
-%patch29 -p1
-%patch30 -p1
-%patch31 -p1
-%patch32 -p1
-%patch33 -p1
-%patch34 -p1
-%patch35 -p1
-%patch36 -p1
-%patch37 -p1
-%patch38 -p1
-%patch39 -p1
-%patch40 -p1
-%patch41 -p1
-%patch42 -p1
-%patch43 -p1
-%patch44 -p1
-%patch45 -p1
-%patch46 -p1
-%patch47 -p1
-%patch48 -p1
-%patch49 -p1
-%patch50 -p1
-%patch51 -p1
-%patch52 -p1
-%patch53 -p1
-%patch54 -p1
-%patch55 -p1
-%patch56 -p1
-%patch57 -p1
-%patch58 -p1
-%patch59 -p1
-%patch60 -p1
-%patch61 -p1
-%patch62 -p1
-%patch63 -p1
-%patch64 -p1
-%patch65 -p1
-%patch66 -p1
-%patch67 -p1
-%patch68 -p1
-%patch69 -p1
-%patch70 -p1
-%patch71 -p1
-%patch72 -p1
-%patch73 -p1
-%patch74 -p1
-%patch75 -p1
-%patch76 -p1
-%patch77 -p1
-%patch78 -p1
-%patch79 -p1
-%patch80 -p1
-%patch81 -p1
-%patch82 -p1
-%patch83 -p1
-%patch84 -p1
-%patch85 -p1
-%patch86 -p1
-%patch87 -p1
-%patch88 -p1
-%patch89 -p1
-%patch90 -p1
-%patch91 -p1
-%patch92 -p1
-%patch93 -p1
-%patch94 -p1
-%patch95 -p1
-%patch96 -p1
-%patch97 -p1
-%patch98 -p1
-%patch99 -p1
-%patch100 -p1
-%patch101 -p1
-%patch102 -p1
-%patch103 -p1
-%patch104 -p1
-%patch105 -p1
-%patch106 -p1
-%patch107 -p1
-%patch108 -p1
-%patch109 -p1
-%patch110 -p1
-%patch111 -p1
-%patch112 -p1
-%patch113 -p1
-%patch114 -p1
-%patch115 -p1
-%patch116 -p1
-%patch117 -p1
-%patch118 -p1
-%patch119 -p1
-%patch120 -p1
-%patch121 -p1
-%patch122 -p1
-%patch123 -p1
-%patch124 -p1
-%patch125 -p1
-%patch126 -p1
-%patch127 -p1
-%patch128 -p1
-%patch129 -p1
-%patch130 -p1
-%patch131 -p1
-%patch132 -p1
-%patch133 -p1
-%patch134 -p1
-%patch135 -p1
-%patch136 -p1
-%patch137 -p1
-%patch138 -p1
-%patch139 -p1
-%patch140 -p1
-%patch141 -p1
-%patch142 -p1
-%patch143 -p1
-%patch144 -p1
-%patch145 -p1
-%patch146 -p1
-%patch147 -p1
-%patch148 -p1
-%patch149 -p1
-%patch150 -p1
-%patch151 -p1
-%patch152 -p1
-%patch153 -p1
-%patch154 -p1
-%patch155 -p1
-%patch156 -p1
-%patch157 -p1
-%patch158 -p1
-%patch159 -p1
-%patch160 -p1
-%patch161 -p1
-%patch162 -p1
-%patch163 -p1
-%patch164 -p1
-%patch165 -p1
-%patch166 -p1
-%patch167 -p1
-%patch168 -p1
-%patch169 -p1
-%patch170 -p1
-%patch171 -p1
-%patch172 -p1
-%patch173 -p1
-%patch174 -p1
-%patch175 -p1
-%patch176 -p1
-%patch177 -p1
-%patch178 -p1
-%patch179 -p1
-%patch180 -p1
-%patch181 -p1
-%patch182 -p1
-%patch183 -p1
-%patch184 -p1
-%patch185 -p1
-%patch186 -p1
-%patch187 -p1
-%patch188 -p1
-%patch189 -p1
-%patch190 -p1
-%patch191 -p1
-%patch192 -p1
-%patch193 -p1
-%patch194 -p1
-%patch195 -p1
-%patch197 -p1
-%patch198 -p1
-%patch199 -p1
-%patch200 -p1
-%patch201 -p1
-%patch202 -p1
-%patch203 -p1
-%patch204 -p1
-%patch205 -p1
-%patch206 -p1
-%patch207 -p1
-%patch208 -p1
-%patch209 -p1
-%patch210 -p1
+%patch1001 -p1
 
 %build
-make %{?_smp_mflags} CC="%__cc" CXFLAGS="$RPM_OPT_FLAGS -Wno-error" SUSE=yes
+make %{?_smp_mflags} CC="%__cc" CXFLAGS="%{optflags} -Wno-error" SUSE=yes
 cd Software-RAID.HOWTO
 sgml2html Software-RAID.HOWTO.sgml
 sgml2txt Software-RAID.HOWTO.sgml
 
 %install
-make install install-systemd install-udev DESTDIR=%{buildroot} 
SYSTEMD_DIR=%{_unitdir} UDEVDIR=%{_udevdir} SUSE=yes
+%make_install install-systemd install-udev SYSTEMD_DIR=%{_unitdir} 
UDEVDIR=%{_udevdir} SUSE=yes
 rm -rf %{buildroot}/lib/udev
 install -d %{buildroot}%{_fillupdir}
 install -d %{buildroot}/usr/share/mdadm
 install -m 755 misc/mdcheck %{buildroot}/usr/share/mdadm/mdcheck
-install -d %{buildroot}/etc/cron.daily
-install -d %{buildroot}/etc/cron.d
-install -m 755 %{S:7} %{buildroot}/etc/cron.daily/mdadm
-install -m 644 %{S:3} %{buildroot}/etc/cron.d/mdadm
 install -m 644 %{S:2} %{buildroot}%{_fillupdir}/
 install -d %{buildroot}%{_systemdshutdowndir}
 install -d %{buildroot}%{_sbindir}
 ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcmdmonitor
 
-%define services mdmonitor.service
+%define services mdmonitor.service mdcheck_start.service 
mdcheck_continue.service mdmonitor-oneshot.service
 
 %pre
 %service_add_pre %services
@@ -517,7 +109,8 @@
 
 %files
 %defattr(-,root,root)
-%doc COPYING ChangeLog README.initramfs TODO mdadm.conf-example mkinitramfs
+%license COPYING
+%doc ChangeLog README.initramfs TODO mdadm.conf-example mkinitramfs
 %doc Software-RAID.HOWTO/Software-RAID.HOWTO*{.txt,.html}
 %doc %{_mandir}/man?/*
 /sbin/*
@@ -529,10 +122,6 @@
 %{_udevdir}/rules.d/63-md-raid-arrays.rules
 %{_udevdir}/rules.d/64-md-raid-assembly.rules
 %{_udevdir}/rules.d/69-md-clustered-confirm-device.rules
-%dir /etc/cron.daily
-/etc/cron.daily/mdadm
-%dir /etc/cron.d
-%config /etc/cron.d/mdadm
 # %%{_systemdshutdowndir}/ is not owned by all versions of systemd-mini.
 # But we really do not want to pull in a full systemd, so we rather just own
 # that directory by ourselves too. After all, this is allowed.
@@ -543,7 +132,13 @@
 %{_unitdir}/[email protected]
 %{_unitdir}/[email protected]
 %{_unitdir}/[email protected]
-%dir %{_unitdir}/../scripts
-%{_unitdir}/../scripts/mdadm_env.sh
+%{_unitdir}/mdcheck_continue.service
+%{_unitdir}/mdcheck_continue.timer
+%{_unitdir}/mdcheck_start.service
+%{_unitdir}/mdcheck_start.timer
+%{_unitdir}/mdmonitor-oneshot.service
+%{_unitdir}/mdmonitor-oneshot.timer
+%dir %{_libexecdir}/mdadm
+%{_libexecdir}/mdadm/mdadm_env.sh
 
 %changelog

++++++ 0001-Document-PART-POLICY-lines.patch ++++++
>From 6b6112842030309c297a521918d1a2e982426fa3 Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Fri, 9 Nov 2018 17:12:33 +1100
Subject: [PATCH 1/5] Document PART-POLICY lines

PART-POLICY has been accepted in mdadm.conf since the same
time that POLICY was accepted, but it was never documented.
So add the missing documentation.

Also fix a bug which would have stopped it from working if
anyone had ever tried to use it.

Signed-off-by: NeilBrown <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 mdadm.conf.5 | 24 +++++++++++++++++++++++-
 policy.c     |  2 +-
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/mdadm.conf.5 b/mdadm.conf.5
index 18512cb0ec7e..47c962ab2071 100644
--- a/mdadm.conf.5
+++ b/mdadm.conf.5
@@ -501,7 +501,7 @@ To update hot plug configuration it is necessary to execute
 .B mdadm \-\-udev\-rules
 command after changing the config file
 
-Key words used in the
+Keywords used in the
 .I POLICY
 line and supported values are:
 
@@ -565,6 +565,28 @@ be automatically added to that array (or it's container)
 as above and the disk will become a spare in remaining cases
 .RE
 
+.TP
+.B PART-POLICY
+This is similar to
+.B POLICY
+and accepts the same keyword assignments.  It allows a consistent set
+of policies to applied to each of the partitions of a device.
+
+A
+.B PART-POLICY
+line should set
+.I type=disk
+and identify the path to one or more disk devices.  Each partition on
+these disks will be treated according to the
+.I action=
+setting  from this line.  If a
+.I domain
+is set in the line, then the domain associated with each patition will
+be based on the domain, but with
+.RB \(dq -part N\(dq
+appended, when N is the partition number for the partition that was
+found.
+
 .SH EXAMPLE
 DEVICE /dev/sd[bcdjkl]1
 .br
diff --git a/policy.c b/policy.c
index c0d18a7eca5b..258f39317951 100644
--- a/policy.c
+++ b/policy.c
@@ -300,7 +300,7 @@ static int path_has_part(char *path, char **part)
                l--;
        if (l < 5 || strncmp(path+l-5, "-part", 5) != 0)
                return 0;
-       *part = path+l-4;
+       *part = path+l-5;
        return 1;
 }
 
-- 
2.14.0.rc0.dirty

++++++ 0001-Makefile-install-mdadm_env.sh-to-usr-lib-mdadm.patch ++++++
>From 6e79d4bd229e5db4e435917daf4c57cd79db9265 Mon Sep 17 00:00:00 2001
From: colyli <[email protected]>
Date: Wed, 17 Oct 2018 11:08:39 +0800
Subject: [PATCH] Makefile: install mdadm_env.sh to /usr/lib/mdadm

Current Makefile installs mdadm_env.sh to /usr/libexec/mdadm but calls it
from /usr/lib/mdadm. This patch changes the installation directory to
/usr/lib/mdadm to make things working.

Signed-off-by: Coly Li <[email protected]>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 2767ac6..c0aaece 100644
--- a/Makefile
+++ b/Makefile
@@ -89,7 +89,7 @@ MDMON_DIR = $(RUN_DIR)
 # place for autoreplace cookies
 FAILED_SLOTS_DIR = $(RUN_DIR)/failed-slots
 SYSTEMD_DIR=/lib/systemd/system
-LIB_DIR=/usr/libexec/mdadm
+LIB_DIR=/usr/lib/mdadm
 
 COROSYNC:=$(shell [ -d /usr/include/corosync ] || echo -DNO_COROSYNC)
 DLM:=$(shell [ -f /usr/include/libdlm.h ] || echo -DNO_DLM)
-- 
2.19.0

++++++ 0002-policy-support-devices-with-multiple-paths.patch ++++++
>From cd72f9d114da206baa01fd56ff2d8ffcc08f3239 Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Fri, 9 Nov 2018 17:12:33 +1100
Subject: [PATCH 2/5] policy: support devices with multiple paths.

As new releases of Linux some time change the name of
a path, some distros keep "legacy" names as well.  This
is useful, but confuses mdadm which assumes each device has
precisely one path.

So change this assumption:  allow a disk to have several
paths, and allow any to match when looking for a policy
which matches a disk.

Reported-and-tested-by: Mariusz Tkaczyk <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 Incremental.c |   5 +-
 mdadm.h       |   2 +-
 policy.c      | 163 ++++++++++++++++++++++++++++++++--------------------------
 3 files changed, 95 insertions(+), 75 deletions(-)

diff --git a/Incremental.c b/Incremental.c
index a4ff7d4bd22d..d4d3c353560d 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -1080,6 +1080,7 @@ static int partition_try_spare(char *devname, int *dfdp, 
struct dev_policy *pol,
                struct supertype *st2 = NULL;
                char *devname = NULL;
                unsigned long long devsectors;
+               char *pathlist[2];
 
                if (de->d_ino == 0 || de->d_name[0] == '.' ||
                    (de->d_type != DT_LNK && de->d_type != DT_UNKNOWN))
@@ -1094,7 +1095,9 @@ static int partition_try_spare(char *devname, int *dfdp, 
struct dev_policy *pol,
                        /* This is a partition - skip it */
                        goto next;
 
-               pol2 = path_policy(de->d_name, type_disk);
+               pathlist[0] = de->d_name;
+               pathlist[1] = NULL;
+               pol2 = path_policy(pathlist, type_disk);
 
                domain_merge(&domlist, pol2, st ? st->ss->name : NULL);
                if (domain_test(domlist, pol, st ? st->ss->name : NULL) != 1)
diff --git a/mdadm.h b/mdadm.h
index 387e681aa4ed..705bd9b53b3a 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -1247,7 +1247,7 @@ extern void policyline(char *line, char *type);
 extern void policy_add(char *type, ...);
 extern void policy_free(void);
 
-extern struct dev_policy *path_policy(char *path, char *type);
+extern struct dev_policy *path_policy(char **paths, char *type);
 extern struct dev_policy *disk_policy(struct mdinfo *disk);
 extern struct dev_policy *devid_policy(int devid);
 extern void dev_policy_free(struct dev_policy *p);
diff --git a/policy.c b/policy.c
index 258f39317951..fa67d5594c04 100644
--- a/policy.c
+++ b/policy.c
@@ -189,15 +189,17 @@ struct dev_policy *pol_find(struct dev_policy *pol, char 
*name)
        return pol;
 }
 
-static char *disk_path(struct mdinfo *disk)
+static char **disk_paths(struct mdinfo *disk)
 {
        struct stat stb;
        int prefix_len;
        DIR *by_path;
        char symlink[PATH_MAX] = "/dev/disk/by-path/";
-       char nm[PATH_MAX];
+       char **paths;
+       int cnt = 0;
        struct dirent *ent;
-       int rv;
+
+       paths = xmalloc(sizeof(*paths) * (cnt+1));
 
        by_path = opendir(symlink);
        if (by_path) {
@@ -214,22 +216,13 @@ static char *disk_path(struct mdinfo *disk)
                                continue;
                        if (stb.st_rdev != makedev(disk->disk.major, 
disk->disk.minor))
                                continue;
-                       closedir(by_path);
-                       return xstrdup(ent->d_name);
+                       paths[cnt++] = xstrdup(ent->d_name);
+                       paths = xrealloc(paths, sizeof(*paths) * (cnt+1));
                }
                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);
-       if (rv > 0) {
-               char *dname;
-               nm[rv] = 0;
-               dname = strrchr(nm, '/');
-               if (dname)
-                       return xstrdup(dname + 1);
-       }
-       return xstrdup("unknown");
+       paths[cnt] = NULL;
+       return paths;
 }
 
 char type_part[] = "part";
@@ -246,18 +239,53 @@ static char *disk_type(struct mdinfo *disk)
                return type_disk;
 }
 
-static int pol_match(struct rule *rule, char *path, char *type)
+static int path_has_part(char *path, char **part)
+{
+       /* check if path ends with "-partNN" and
+        * if it does, place a pointer to "-pathNN"
+        * in 'part'.
+        */
+       int l;
+       if (!path)
+               return 0;
+       l = strlen(path);
+       while (l > 1 && isdigit(path[l-1]))
+               l--;
+       if (l < 5 || strncmp(path+l-5, "-part", 5) != 0)
+               return 0;
+       *part = path+l-5;
+       return 1;
+}
+
+static int pol_match(struct rule *rule, char **paths, char *type, char **part)
 {
-       /* check if this rule matches on path and type */
+       /* Check if this rule matches on any path and type.
+        * If 'part' is not NULL, then 'path' must end in -partN, which
+        * we ignore for matching, and return in *part on success.
+        */
        int pathok = 0; /* 0 == no path, 1 == match, -1 == no match yet */
        int typeok = 0;
 
-       while (rule) {
+       for (; rule; rule = rule->next) {
                if (rule->name == rule_path) {
+                       char *p;
+                       int i;
                        if (pathok == 0)
                                pathok = -1;
-                       if (path && fnmatch(rule->value, path, 0) == 0)
-                               pathok = 1;
+                       if (!paths)
+                               continue;
+                       for (i = 0; paths[i]; i++) {
+                               if (part) {
+                                       if (!path_has_part(paths[i], &p))
+                                               continue;
+                                       *p = '\0';
+                                       *part = p+1;
+                               }
+                               if (fnmatch(rule->value, paths[i], 0) == 0)
+                                       pathok = 1;
+                               if (part)
+                                       *p = '-';
+                       }
                }
                if (rule->name == rule_type) {
                        if (typeok == 0)
@@ -265,7 +293,6 @@ static int pol_match(struct rule *rule, char *path, char 
*type)
                        if (type && strcmp(rule->value, type) == 0)
                                typeok = 1;
                }
-               rule = rule->next;
        }
        return pathok >= 0 && typeok >= 0;
 }
@@ -286,24 +313,6 @@ static void pol_merge(struct dev_policy **pol, struct rule 
*rule)
                        pol_new(pol, r->name, r->value, metadata);
 }
 
-static int path_has_part(char *path, char **part)
-{
-       /* check if path ends with "-partNN" and
-        * if it does, place a pointer to "-pathNN"
-        * in 'part'.
-        */
-       int l;
-       if (!path)
-               return 0;
-       l = strlen(path);
-       while (l > 1 && isdigit(path[l-1]))
-               l--;
-       if (l < 5 || strncmp(path+l-5, "-part", 5) != 0)
-               return 0;
-       *part = path+l-5;
-       return 1;
-}
-
 static void pol_merge_part(struct dev_policy **pol, struct rule *rule, char 
*part)
 {
        /* copy any name assignments from rule into pol, appending
@@ -352,7 +361,7 @@ static int config_rules_has_path = 0;
  * path_policy() gathers policy information for the
  * disk described in the given a 'path' and a 'type'.
  */
-struct dev_policy *path_policy(char *path, char *type)
+struct dev_policy *path_policy(char **paths, char *type)
 {
        struct pol_rule *rules;
        struct dev_policy *pol = NULL;
@@ -361,27 +370,24 @@ struct dev_policy *path_policy(char *path, char *type)
        rules = config_rules;
 
        while (rules) {
-               char *part;
+               char *part = NULL;
                if (rules->type == rule_policy)
-                       if (pol_match(rules->rule, path, type))
+                       if (pol_match(rules->rule, paths, type, NULL))
                                pol_merge(&pol, rules->rule);
                if (rules->type == rule_part && strcmp(type, type_part) == 0)
-                       if (path_has_part(path, &part)) {
-                               *part = 0;
-                               if (pol_match(rules->rule, path, type_disk))
-                                       pol_merge_part(&pol, rules->rule, 
part+1);
-                               *part = '-';
-                       }
+                       if (pol_match(rules->rule, paths, type_disk, &part))
+                                       pol_merge_part(&pol, rules->rule, part);
                rules = rules->next;
        }
 
        /* Now add any metadata-specific internal knowledge
         * about this path
         */
-       for (i=0; path && superlist[i]; i++)
+       for (i=0; paths[0] && superlist[i]; i++)
                if (superlist[i]->get_disk_controller_domain) {
                        const char *d =
-                               superlist[i]->get_disk_controller_domain(path);
+                               superlist[i]->get_disk_controller_domain(
+                                       paths[0]);
                        if (d)
                                pol_new(&pol, pol_domain, d, 
superlist[i]->name);
                }
@@ -400,22 +406,34 @@ void pol_add(struct dev_policy **pol,
        pol_dedup(*pol);
 }
 
+static void free_paths(char **paths)
+{
+       int i;
+
+       if (!paths)
+               return;
+
+       for (i = 0; paths[i]; i++)
+               free(paths[i]);
+       free(paths);
+}
+
 /*
  * disk_policy() gathers policy information for the
  * disk described in the given mdinfo (disk.{major,minor}).
  */
 struct dev_policy *disk_policy(struct mdinfo *disk)
 {
-       char *path = NULL;
+       char **paths = NULL;
        char *type = disk_type(disk);
        struct dev_policy *pol = NULL;
 
        if (config_rules_has_path)
-               path = disk_path(disk);
+               paths = disk_paths(disk);
 
-       pol = path_policy(path, type);
+       pol = path_policy(paths, type);
 
-       free(path);
+       free_paths(paths);
        return pol;
 }
 
@@ -756,27 +774,26 @@ int policy_check_path(struct mdinfo *disk, struct map_ent 
*array)
 {
        char path[PATH_MAX];
        FILE *f = NULL;
-       char *id_path = disk_path(disk);
-       int rv;
+       char **id_paths = disk_paths(disk);
+       int i;
+       int rv = 0;
 
-       if (!id_path)
-               return 0;
+       for (i = 0; id_paths[i]; i++) {
+               snprintf(path, PATH_MAX, FAILED_SLOTS_DIR "/%s", id_paths[i]);
+               f = fopen(path, "r");
+               if (!f)
+                       continue;
 
-       snprintf(path, PATH_MAX, FAILED_SLOTS_DIR "/%s", id_path);
-       f = fopen(path, "r");
-       if (!f) {
-               free(id_path);
-               return 0;
+               rv = fscanf(f, " %s %x:%x:%x:%x\n",
+                           array->metadata,
+                           array->uuid,
+                           array->uuid+1,
+                           array->uuid+2,
+                           array->uuid+3);
+               fclose(f);
+               break;
        }
-
-       rv = fscanf(f, " %s %x:%x:%x:%x\n",
-                   array->metadata,
-                   array->uuid,
-                   array->uuid+1,
-                   array->uuid+2,
-                   array->uuid+3);
-       fclose(f);
-       free(id_path);
+       free_paths(id_paths);
        return rv == 5;
 }
 
-- 
2.14.0.rc0.dirty

++++++ 0003-mdcheck-add-systemd-unit-files-to-run-mdcheck.patch ++++++
>From 4199d3c629c14866505923d19fa50017ee92d2e1 Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Wed, 5 Dec 2018 16:35:00 +1100
Subject: [PATCH 3/5] mdcheck: add systemd unit files to run mdcheck.

Having the mdcheck script is not use if is never run.
This patch adds systemd unit files so that it can easily
be run on the first Sunday of each month for 6 hours,
then on every subsequent morning until the check is
finished.

The units still need to be enabled with
  systemctl enable mdcheck_start.timer

The timer will only actually be started when an array
which might need it becomes active.

Signed-off-by: NeilBrown <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 Makefile                         |  5 ++++-
 systemd/mdcheck_continue.service | 18 ++++++++++++++++++
 systemd/mdcheck_continue.timer   | 13 +++++++++++++
 systemd/mdcheck_start.service    | 17 +++++++++++++++++
 systemd/mdcheck_start.timer      | 15 +++++++++++++++
 5 files changed, 67 insertions(+), 1 deletion(-)
 create mode 100644 systemd/mdcheck_continue.service
 create mode 100644 systemd/mdcheck_continue.timer
 create mode 100644 systemd/mdcheck_start.service
 create mode 100644 systemd/mdcheck_start.timer

diff --git a/Makefile b/Makefile
index 2767ac68396d..afb62cc6e3a6 100644
--- a/Makefile
+++ b/Makefile
@@ -276,7 +276,10 @@ install-udev: udev-md-raid-arrays.rules 
udev-md-raid-assembly.rules udev-md-raid
 
 install-systemd: systemd/[email protected]
        @for file in [email protected] mdmonitor.service [email protected] \
-               [email protected] [email protected]; \
+               [email protected] [email protected] \
+               mdcheck_start.timer mdcheck_start.service \
+               mdcheck_continue.timer mdcheck_continue.service \
+               ; \
        do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > .install.tmp.2 && \
           $(ECHO) $(INSTALL) -D -m 644 systemd/$$file 
$(DESTDIR)$(SYSTEMD_DIR)/$$file ; \
           $(INSTALL) -D -m 644 .install.tmp.2 $(DESTDIR)$(SYSTEMD_DIR)/$$file 
; \
diff --git a/systemd/mdcheck_continue.service b/systemd/mdcheck_continue.service
new file mode 100644
index 000000000000..592c60798f82
--- /dev/null
+++ b/systemd/mdcheck_continue.service
@@ -0,0 +1,18 @@
+#  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 scrubbing - continuation
+ConditionPathExistsGlob = /var/lib/mdcheck/MD_UUID_*
+
+[Service]
+Type=oneshot
+Environment= MDADM_CHECK_DURATION='"6 hours"'
+EnvironmentFile=-/run/sysconfig/mdadm
+ExecStartPre=-/usr/lib/mdadm/mdadm_env.sh
+ExecStart=/usr/share/mdadm/mdcheck --continue --duration $MDADM_CHECK_DURATION
+
diff --git a/systemd/mdcheck_continue.timer b/systemd/mdcheck_continue.timer
new file mode 100644
index 000000000000..3ccfd7858a3f
--- /dev/null
+++ b/systemd/mdcheck_continue.timer
@@ -0,0 +1,13 @@
+#  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 scrubbing - continuation
+
+[Timer]
+OnCalendar= 1:05:00
+
diff --git a/systemd/mdcheck_start.service b/systemd/mdcheck_start.service
new file mode 100644
index 000000000000..812141bb5c9a
--- /dev/null
+++ b/systemd/mdcheck_start.service
@@ -0,0 +1,17 @@
+#  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 scrubbing
+Wants=mdcheck_continue.timer
+
+[Service]
+Type=oneshot
+Environment= MDADM_CHECK_DURATION='"6 hours"'
+EnvironmentFile=-/run/sysconfig/mdadm
+ExecStartPre=-/usr/lib/mdadm/mdadm_env.sh
+ExecStart=/usr/share/mdadm/mdcheck --duration $MDADM_CHECK_DURATION
diff --git a/systemd/mdcheck_start.timer b/systemd/mdcheck_start.timer
new file mode 100644
index 000000000000..64807362d649
--- /dev/null
+++ b/systemd/mdcheck_start.timer
@@ -0,0 +1,15 @@
+#  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 scrubbing
+
+[Timer]
+OnCalendar=Sun *-*-1..7 1:00:00
+
+[Install]
+WantedBy= mdmonitor.service
-- 
2.14.0.rc0.dirty

++++++ 0004-Monitor-add-system-timer-to-run-oneshot-periodically.patch ++++++
>From 7cd7e91ab3de5aa75dc963cb08b0618c1885cf0d Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Wed, 5 Dec 2018 16:35:00 +1100
Subject: [PATCH 4/5] Monitor: add system timer to run --oneshot periodically

"mdadm --monitor --oneshot" can be used to get a warning
if there are any degraded arrays.  It can be helpful to get
this warning periodically while the condition persists.

This patch add a systemd service and timer which can
be enabled with
   systemctl enable mdmonitor-oneshot.service

and will then provide daily warnings.

Signed-off-by: NeilBrown <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 Makefile                          |  1 +
 systemd/mdmonitor-oneshot.service | 15 +++++++++++++++
 systemd/mdmonitor-oneshot.timer   | 15 +++++++++++++++
 3 files changed, 31 insertions(+)
 create mode 100644 systemd/mdmonitor-oneshot.service
 create mode 100644 systemd/mdmonitor-oneshot.timer

diff --git a/Makefile b/Makefile
index afb62cc6e3a6..dfe00b0a0be8 100644
--- a/Makefile
+++ b/Makefile
@@ -279,6 +279,7 @@ install-systemd: systemd/[email protected]
                [email protected] [email protected] \
                mdcheck_start.timer mdcheck_start.service \
                mdcheck_continue.timer mdcheck_continue.service \
+               mdmonitor-oneshot.timer mdmonitor-oneshot.service \
                ; \
        do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > .install.tmp.2 && \
           $(ECHO) $(INSTALL) -D -m 644 systemd/$$file 
$(DESTDIR)$(SYSTEMD_DIR)/$$file ; \
diff --git a/systemd/mdmonitor-oneshot.service 
b/systemd/mdmonitor-oneshot.service
new file mode 100644
index 000000000000..fd469b12cc78
--- /dev/null
+++ b/systemd/mdmonitor-oneshot.service
@@ -0,0 +1,15 @@
+#  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=Reminder for degraded MD arrays
+
+[Service]
+Environment=  MDADM_MONITOR_ARGS=--scan
+EnvironmentFile=-/run/sysconfig/mdadm
+ExecStartPre=-/usr/lib/mdadm/mdadm_env.sh
+ExecStart=BINDIR/mdadm --monitor --oneshot $MDADM_MONITOR_ARGS
diff --git a/systemd/mdmonitor-oneshot.timer b/systemd/mdmonitor-oneshot.timer
new file mode 100644
index 000000000000..cb54bdaa8897
--- /dev/null
+++ b/systemd/mdmonitor-oneshot.timer
@@ -0,0 +1,15 @@
+#  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=Reminder for degraded MD arrays
+
+[Timer]
+OnCalendar= 2:00:00
+
+[Install]
+WantedBy= mdmonitor.service
-- 
2.14.0.rc0.dirty

++++++ 0005-imsm-update-metadata-correctly-while-raid10-double-d.patch ++++++
>From d7a1fda2769ba272d89de6caeab35d52b73a9c3c Mon Sep 17 00:00:00 2001
From: Mariusz Tkaczyk <[email protected]>
Date: Wed, 17 Oct 2018 12:11:41 +0200
Subject: [PATCH 5/5] imsm: update metadata correctly while raid10 double
 degradation

Mdmon calls end_migration() when map state changes from normal to
degraded. It is not valid because in raid 10 double degradation case
mdmon breaks checkpointing but array is still rebuilding.
In this case mdmon has to mark map as degraded and continues marking
recovery checkpoint in metadata. Migration can be finished only if newly
failed device is a rebuilding device.

Add catching double degraded to degraded transition. Migration is
finished but map state doesn't change, array is still degraded.

Update failed_disk_num correctly. If double degradation
happens rebuild will start on the lowest slot, but this variable points
to the first failed slot. If second fail happens while rebuild this
variable shouldn't be updated until rebuild is not finished.

Signed-off-by: Mariusz Tkaczyk <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 super-intel.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/super-intel.c b/super-intel.c
index 6438987b778c..d2035ccd8270 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -8136,7 +8136,8 @@ static int mark_failure(struct intel_super *super,
                        set_imsm_ord_tbl_ent(map2, slot2,
                                             idx | IMSM_ORD_REBUILD);
        }
-       if (map->failed_disk_num == 0xff)
+       if (map->failed_disk_num == 0xff ||
+               (!is_rebuilding(dev) && map->failed_disk_num > slot))
                map->failed_disk_num = slot;
 
        clear_disk_badblocks(super->bbm_log, ord_to_idx(ord));
@@ -8558,13 +8559,25 @@ static void imsm_set_disk(struct active_array *a, int 
n, int state)
                        break;
                }
                if (is_rebuilding(dev)) {
-                       dprintf_cont("while rebuilding.");
+                       dprintf_cont("while rebuilding ");
                        if (map->map_state != map_state)  {
-                               dprintf_cont(" Map state change");
-                               end_migration(dev, super, map_state);
+                               dprintf_cont("map state change ");
+                               if (n == map->failed_disk_num) {
+                                       dprintf_cont("end migration");
+                                       end_migration(dev, super, map_state);
+                               } else {
+                                       dprintf_cont("raid10 double 
degradation, map state change");
+                                       map->map_state = map_state;
+                               }
                                super->updates_pending++;
-                       } else if (!rebuild_done) {
+                       } else if (!rebuild_done)
                                break;
+                       else if (n == map->failed_disk_num) {
+                               /* r10 double degraded to degraded transition */
+                               dprintf_cont("raid10 double degradation end 
migration");
+                               end_migration(dev, super, map_state);
+                               a->last_checkpoint = 0;
+                               super->updates_pending++;
                        }
 
                        /* check if recovery is really finished */
@@ -8575,7 +8588,7 @@ static void imsm_set_disk(struct active_array *a, int n, 
int state)
                                }
                        if (recovery_not_finished) {
                                dprintf_cont("\n");
-                               dprintf("Rebuild has not finished yet, state 
not changed");
+                               dprintf_cont("Rebuild has not finished yet, map 
state changes only if raid10 double degradation happens");
                                if (a->last_checkpoint < mdi->recovery_start) {
                                        a->last_checkpoint =
                                                mdi->recovery_start;
-- 
2.14.0.rc0.dirty

++++++ 0006-Grow-avoid-overflow-in-compute_backup_blocks.patch ++++++
>From 085df42259cba7863cd6ebe5cd0d8492ac5b869e Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Thu, 6 Dec 2018 10:35:41 +1100
Subject: [PATCH] Grow: avoid overflow in compute_backup_blocks()

With a chunk size of 16Meg and data drive count of 8,
this calculate can easily overflow the 'int' type that
is used for the multiplications.
So force it to use "long" instead.

Reported-and-tested-by: Ed Spiridonov <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 Grow.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Grow.c b/Grow.c
index 4436a4d6bd4c..76f82c075e38 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1196,7 +1196,8 @@ unsigned long compute_backup_blocks(int nchunk, int 
ochunk,
        /* Find GCD */
        a = GCD(a, b);
        /* LCM == product / GCD */
-       blocks = (ochunk/512) * (nchunk/512) * odata * ndata / a;
+       blocks = (unsigned long)(ochunk/512) * (unsigned long)(nchunk/512) *
+               odata * ndata / a;
 
        return blocks;
 }
-- 
2.14.0.rc0.dirty

++++++ 0007-Grow-report-correct-new-chunk-size.patch ++++++
>From 76d505dec6c9f92564553596fc8350324be82463 Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Thu, 6 Dec 2018 10:36:28 +1100
Subject: [PATCH] Grow: report correct new chunk size.

When using "--grow --chunk=" to change chunk
size, the old chunksize is reported instead of the new.

Signed-off-by: NeilBrown <[email protected]>
Signed-off-by: Jes Sorensen <[email protected]>
---
 Grow.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Grow.c b/Grow.c
index 76f82c075e38..363b209d14a3 100644
--- a/Grow.c
+++ b/Grow.c
@@ -3286,7 +3286,7 @@ static int reshape_array(char *container, int fd, char 
*devname,
                                goto release;
                        } else if (verbose >= 0)
                                printf("chunk size for %s set to %d\n",
-                                      devname, array.chunk_size);
+                                      devname, info->new_chunk);
                }
                unfreeze(st);
                return 0;
-- 
2.14.0.rc0.dirty

++++++ 0008-policy.c-prevent-NULL-pointer-referencing.patch ++++++
>From 179cab343006df996f0a85a542b40e44db0c2e2f Mon Sep 17 00:00:00 2001
From: Gioh Kim <[email protected]>
Date: Fri, 7 Dec 2018 12:04:44 +0100
Subject: [PATCH] policy.c: prevent NULL pointer referencing

paths could be NULL and paths[0] should be followed by NULL pointer
checking.

Signed-off-by: Gioh Kim <[email protected]>
---
 policy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/policy.c b/policy.c
index fa67d5594c04..e3a0671f3a3a 100644
--- a/policy.c
+++ b/policy.c
@@ -383,7 +383,7 @@ struct dev_policy *path_policy(char **paths, char *type)
        /* Now add any metadata-specific internal knowledge
         * about this path
         */
-       for (i=0; paths[0] && superlist[i]; i++)
+       for (i=0; paths && paths[0] && superlist[i]; i++)
                if (superlist[i]->get_disk_controller_domain) {
                        const char *d =
                                superlist[i]->get_disk_controller_domain(
-- 
2.14.0.rc0.dirty

++++++ 1001-display-timeout-status.patch ++++++
---
 Detail.c |    1 +
 md_p.h   |    1 +
 2 files changed, 2 insertions(+)

Index: mdadm-4.0/Detail.c
===================================================================
--- mdadm-4.0.orig/Detail.c
+++ mdadm-4.0/Detail.c
@@ -693,6 +693,8 @@ This is pretty boring
                                    disk.raid_disk >= 0)
                                        failed++;
                        }
+                       if (disk.state & (1<<MD_DISK_TIMEOUT))
+                               printf(" timeout");
                        if (disk.state & (1 << MD_DISK_ACTIVE))
                                printf(" active");
                        if (disk.state & (1 << MD_DISK_SYNC)) {
Index: mdadm-4.0/md_p.h
===================================================================
--- mdadm-4.0.orig/md_p.h
+++ mdadm-4.0/md_p.h
@@ -90,6 +90,7 @@
                                   * dire need
                                   */
 #define        MD_DISK_FAILFAST        10 /* Fewer retries, more failures */
+#define        MD_DISK_TIMEOUT         11 /* disk is faulty due to timeout */
 
 #define MD_DISK_REPLACEMENT    17
 #define MD_DISK_JOURNAL                18 /* disk is used as the write journal 
in RAID-5/6 */
++++++ mdadm-4.0.tar.xz -> mdadm-4.1.tar.xz ++++++
++++ 17922 lines of diff (skipped)


Reply via email to