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)
