diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fb89961 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/kvdo-6.1.0.153.tgz diff --git a/.kmod-kvdo.metadata b/.kmod-kvdo.metadata new file mode 100644 index 0000000..e173389 --- /dev/null +++ b/.kmod-kvdo.metadata @@ -0,0 +1 @@ +e1b39ca68695d985f93fd19271aa4f98481dfd0b SOURCES/kvdo-6.1.0.153.tgz diff --git a/README.md b/README.md deleted file mode 100644 index 98f42b4..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SPECS/kvdo.spec b/SPECS/kvdo.spec new file mode 100644 index 0000000..cd7ad30 --- /dev/null +++ b/SPECS/kvdo.spec @@ -0,0 +1,334 @@ +%define spec_release 15 + +%define kmod_name kvdo +%define kmod_driver_version 6.1.0.153 +%define kmod_rpm_release %{spec_release} +%define kmod_kernel_version 3.10.0-693.el7 +%define kmod_headers_version %(rpm -qa kernel-devel | sed 's/^kernel-devel-//') +%define kmod_kbuild_dir . +%define kmod_dependencies %{nil} +%define kmod_build_dependencies %{nil} +%define kmod_devel_package 0 + +%{!?dist: %define dist .el7_4} + +Source0: %{kmod_name}-%{kmod_driver_version}.tgz +%{nil} + +%define findpat %( echo "%""P" ) +%define __find_requires /usr/lib/rpm/redhat/find-requires.ksyms +%define __find_provides /usr/lib/rpm/redhat/find-provides.ksyms %{kmod_name} %{?epoch:%{epoch}:}%{version}-%{release} +%define sbindir %( if [ -d "/sbin" -a \! -h "/sbin" ]; then echo "/sbin"; else echo %{_sbindir}; fi ) + +Name: kmod-kvdo +Version: %{kmod_driver_version} +Release: %{kmod_rpm_release}%{?dist} +Summary: Kernel Modules for Virtual Data Optimizer +License: GPLv2+ +URL: http://github.com/dm-vdo/kvdo +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) +BuildRequires: kernel-devel >= %{kmod_kernel_version} +BuildRequires: redhat-rpm-config +BuildRequires: kernel-debug >= %{kmod_kernel_version} +BuildRequires: glibc +BuildRequires: kernel-abi-whitelists +BuildRequires: libuuid-devel +ExclusiveArch: x86_64 +ExcludeArch: s390 +ExcludeArch: s390x +ExcludeArch: ppc +ExcludeArch: ppc64 +ExcludeArch: ppc64le +ExcludeArch: aarch64 +ExcludeArch: i686 +%global kernel_source() /usr/src/kernels/%{kmod_headers_version} + +%global _use_internal_dependency_generator 0 +Provides: kernel-modules = %{kmod_kernel_version}.%{_target_cpu} +Provides: kmod-%{kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires(post): %{sbindir}/weak-modules +Requires(postun): %{sbindir}/weak-modules +Requires: kernel >= %{kmod_kernel_version} +%if 0 +Requires: firmware(%{kmod_name}) = ENTER_FIRMWARE_VERSION +%endif +%if "%{kmod_build_dependencies}" != "" +BuildRequires: %{kmod_build_dependencies} +%endif +%if "%{kmod_dependencies}" != "" +Requires: %{kmod_dependencies} +%endif +# if there are multiple kmods for the same driver from different vendors, +# they should conflict with each other. +Conflicts: kmod-%{kmod_name} + +%description +Virtual Data Optimizer (VDO) is a device mapper target that delivers +block-level deduplication, compression, and thin provisioning. + +This package provides the kernel modules for VDO. + +%if 0 + +%package -n kmod-kvdo-firmware +Version: ENTER_FIRMWARE_VERSION +Summary: Kernel Modules for Virtual Data Optimizer +Provides: firmware(%{kmod_name}) = ENTER_FIRMWARE_VERSION +Provides: kernel-modules = %{kmod_kernel_version}.%{_target_cpu} +%description -n kmod-kvdo-firmware +Virtual Data Optimizer (VDO) is a device mapper target that delivers +block-level deduplication, compression, and thin provisioning. + +This package provides the firmware for VDO. + +%files -n kmod-kvdo-firmware +%defattr(644,root,root,755) +%{FIRMWARE_FILES} + +%endif + +# Development package +%if 0%{kmod_devel_package} +%package -n kmod-kvdo-devel +Version: %{kmod_driver_version} +Requires: kernel >= %{kmod_kernel_version} +Summary: Kernel Modules for Virtual Data Optimizer + +%description -n kmod-kvdo-devel +Virtual Data Optimizer (VDO) is a device mapper target that delivers +block-level deduplication, compression, and thin provisioning. + +This package provides the development files for VDO. + +%files -n kmod-kvdo-devel +%defattr(644,root,root,755) +/usr/share/kmod-%{kmod_name}/Module.symvers +%endif + +%post +modules=( $(find /lib/modules/%{kmod_headers_version}/extra/kmod-%{kmod_name} | grep '\.ko$') ) +printf '%s\n' "${modules[@]}" >> /var/lib/rpm-kmod-posttrans-weak-modules-add + +%pretrans -p +posix.unlink("/var/lib/rpm-kmod-posttrans-weak-modules-add") + +%posttrans +if [ -f "/var/lib/rpm-kmod-posttrans-weak-modules-add" ]; then + modules=( $(cat /var/lib/rpm-kmod-posttrans-weak-modules-add) ) + rm -rf /var/lib/rpm-kmod-posttrans-weak-modules-add + printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --add-modules +fi + +%preun +rpm -ql kmod-kvdo-%{kmod_driver_version}-%{kmod_rpm_release}%{?dist}.$(arch) | grep '\.ko$' > /var/run/rpm-kmod-%{kmod_name}-modules + +# Check whether kvdo or uds is loaded, and if so attempt to remove it. A +# failure here means there is still something using the module, which should be +# cleared up before attempting to remove again. +for module in kvdo uds; do + if grep -q "^${module}" /proc/modules; then + modprobe -r ${module} + fi +done + +%postun +modules=( $(cat /var/run/rpm-kmod-%{kmod_name}-modules) ) +rm /var/run/rpm-kmod-%{kmod_name}-modules +printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --remove-modules + +%files +%defattr(644,root,root,755) +/lib/modules/%{kmod_headers_version} +/etc/depmod.d/%{kmod_name}.conf +/usr/share/doc/kmod-%{kmod_name}/greylist.txt + +%prep +%setup -n %{kmod_name}-%{kmod_driver_version} +%{nil} +set -- * +mkdir source +mv "$@" source/ +mkdir obj + +%build +rm -rf obj +cp -r source obj +make -C %{kernel_source} M=$PWD/obj/%{kmod_kbuild_dir} V=1 \ + NOSTDINC_FLAGS="-I $PWD/obj/include -I $PWD/obj/include/uapi" +# mark modules executable so that strip-to-file can strip them +find obj/%{kmod_kbuild_dir} -name "*.ko" -type f -exec chmod u+x '{}' + + +whitelist="/lib/modules/kabi-current/kabi_whitelist_%{_target_cpu}" +for modules in $( find obj/%{kmod_kbuild_dir} -name "*.ko" -type f -printf "%{findpat}\n" | sed 's|\.ko$||' | sort -u ) ; do + # update depmod.conf + module_weak_path=$(echo $modules | sed 's/[\/]*[^\/]*$//') + if [ -z "$module_weak_path" ]; then + module_weak_path=%{name} + else + module_weak_path=%{name}/$module_weak_path + fi + echo "override $(echo $modules | sed 's/.*\///') $(echo %{kmod_headers_version} | sed 's/\.[^\.]*$//').* weak-updates/$module_weak_path" >> source/depmod.conf + + # update greylist + nm -u obj/%{kmod_kbuild_dir}/$modules.ko | sed 's/.*U //' | sed 's/^\.//' | sort -u | while read -r symbol; do + grep -q "^\s*$symbol\$" $whitelist || echo "$symbol" >> source/greylist + done +done +sort -u source/greylist | uniq > source/greylist.txt + +%install +export INSTALL_MOD_PATH=$RPM_BUILD_ROOT +export INSTALL_MOD_DIR=extra/%{name} +make -C %{kernel_source} modules_install V=1 \ + M=$PWD/obj/%{kmod_kbuild_dir} +# Cleanup unnecessary kernel-generated module dependency files. +find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \; + +install -m 644 -D source/depmod.conf $RPM_BUILD_ROOT/etc/depmod.d/%{kmod_name}.conf +install -m 644 -D source/greylist.txt $RPM_BUILD_ROOT/usr/share/doc/kmod-%{kmod_name}/greylist.txt +%if 0 +%{FIRMWARE_FILES_INSTALL} +%endif +%if 0%{kmod_devel_package} +install -m 644 -D $PWD/obj/%{kmod_kbuild_dir}/Module.symvers $RPM_BUILD_ROOT/usr/share/kmod-%{kmod_name}/Module.symvers +%endif + +%clean +rm -rf $RPM_BUILD_ROOT + +%changelog +* Tue Feb 27 2018 - Andy Walsh - 6.1.0.153-15 +- Fixed preun handling of loaded modules +- Resolves: rhbz#1549178 + +* Fri Feb 16 2018 - Joseph Chapman - 6.1.0.149-13 +- Sync mode is safe if underlying storage changes to requiring flushes +- Resolves: rhbz#1540777 + +* Wed Feb 07 2018 - Joseph Chapman - 6.1.0.146-13 +- Module target is now "vdo" instead of "dedupe" +- Fixed a bug where crash recovery led to failed kernel page request +- Improved modification log messages +- Improved package description and summary fields +- Resolves: rhbz#1535127 +- Resolves: rhbz#1535597 +- Resolves: rhbz#1540696 +- Resolves: rhbz#1541409 + +* Tue Feb 06 2018 - Andy Walsh - 6.1.0.144-13 +- Updated summary and descriptions +- Resolves: rhbz#1541409 + +* Thu Feb 01 2018 - Joseph Chapman - 6.1.0.130-12 +- Fix General Protection Fault unlocking UDS callback mutex +- Removing kmod-kvdo package unloads kernel module +- Fix URL to point to GitHub tree +- Resolves: rhbz#1510176 +- Resolves: rhbz#1533260 +- Resolves: rhbz#1539061 + +* Fri Jan 19 2018 - Joseph Chapman - 6.1.0.124-11 +- Fixed provisional referencing for dedupe. +- Only log a bio submission from a VDO to itself. +- vdoformat cleans up metadata properly after fail. +- Resolves: rhbz#1511587 +- Resolves: rhbz#1520972 +- Resolves: rhbz#1532481 + +* Wed Jan 10 2018 - Joseph Chapman - 6.1.0.114-11 +- /sys/uds permissions now resticted to superuser only +- Remove /sys/uds files that should not be used in production +- Removing kvdo module reports version +- VDO automatically chooses the proper write policy by default +- Fixed a Coverity-detected error path leak +- Resolves: rhbz#1525305 +- Resolves: rhbz#1527734 +- Resolves: rhbz#1527737 +- Resolves: rhbz#1527924 +- Resolves: rhbz#1528399 + +* Thu Dec 21 2017 - Joseph Chapman - 6.1.0.106-11 +- Detect journal overflow after 160E of writes +- Clean up UDS threads when removing last VDO +- Resolves: rhbz#1512968 +- Resolves: rhbz#1523240 + +* Tue Dec 12 2017 Joe Chapman 6.1.0.97-11 +- Default logical size is no longer over-provisioned +- Remove debug logging when verifying dedupe advice +- Resolves: rhbz#1519330 + +* Fri Dec 08 2017 Joe Chapman 6.1.0.89-11 +- improve metadata cleanup after vdoformat failure +- log REQ_FLUSH & REQ_FUA at level INFO +- improve performance of cuncurrent write requests with the same data +- Resolves: rhbz#1520972 +- Resolves: rhbz#1521200 + +* Fri Dec 01 2017 Joe Chapman 6.1.0.72-10 +- clear VDO metadata on a vdo remove call +- fix create of new dedupe indices +- add magic number to VDO geometry block +- do less logging when stopping a VDO +- add a UUID +- Resolves: rhbz#1512127 +- Resolves: rhbz#1516081 +- Resolves: rhbz#1511109 +- Resolves: rhbz#1515183 + +* Fri Nov 17 2017 Joe Chapman 6.1.0.55-9 +- fail loading an uncreated index more gracefully +- remove spurious/unnecessary files from the distribution +- fix kernel module version +- make logging less chatty +- fix an integer overflow in makeVDOLayout +- Resolves: rhbz#1511034 +- Resolves: rhbz#1511109 +- Resolves: rhbz#1511096 + +* Fri Nov 10 2017 Joe Chapman 6.1.0.44-8 +- fix readCacheSize handling large numbers +- vdoformat signals error when it finds a geometry block +- prevent kernel oops when loading an old geometry block +- vdoformat silently rounds down physical sizes to a block boundary +- UDS threads identify related VDO device +- clean up contents of source tarballs +- Resolves: rhbz#1505936 +- Resolves: rhbz#1507996 +- Resolves: rhbz#1509466 +- Resolves: rhbz#1510558 +- Resolves: rhbz#1510585 +- Resolves: rhbz#1511201 +- Resolves: rhbz#1511209 + +* Fri Nov 03 2017 Joe Chapman 6.1.0.34-7 +- Bugfixes +- Resolves: rhbz#1491422 + +* Mon Oct 30 2017 Joe Chapman 6.1.0.13-6 +- Fixed some scanning tool complaints +- Resolves: rhbz#1491422 + +* Tue Oct 24 2017 Andy Walsh 6.1.0.0-6 +- Fixed kernel requirement to allow subsequent releases without updating spec +- Resolves: rhbz#1491422 + +* Fri Oct 20 2017 John Wiele 6.1.0.0-5 +- Bumped kernel requirement to 3.10.0-741 +- Resolves: rhbz#1491422 + +* Tue Oct 17 2017 John Wiele 6.1.0.0-4 +- Resolved some missing symbols +- Resolves: rhbz#1491422 + +* Mon Oct 16 2017 John Wiele 6.1.0.0-3 +- Updated to provide a useable package +- Resolves: rhbz#1491422 + +* Sat Oct 14 2017 Andy Walsh 6.1.0.0-2 +- Removed invalid requirement and some unnecessary comments in spec +- Resolves: rhbz#1491422 + +* Wed Oct 11 2017 John Wiele 6.1.0.0-1 +- Initial vdo module for Driver Update Program +- Resolves: rhbz#1491422