import kmod-redhat-oracleasm-2.0.8-11.el8
This commit is contained in:
commit
1db8a2985c
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
SOURCES/oracleasm-redhat-2.0.8.tar.bz2
|
1
.kmod-redhat-oracleasm.metadata
Normal file
1
.kmod-redhat-oracleasm.metadata
Normal file
@ -0,0 +1 @@
|
||||
3f7008b7f30674a0078edda3e8d32941578dae21 SOURCES/oracleasm-redhat-2.0.8.tar.bz2
|
9
SOURCES/0000-Makefile-config-opts.patch
Normal file
9
SOURCES/0000-Makefile-config-opts.patch
Normal file
@ -0,0 +1,9 @@
|
||||
Index: src/drivers/block/oracleasm/Makefile
|
||||
===================================================================
|
||||
--- src.orig/drivers/block/oracleasm/Makefile 2019-02-07 00:10:13.442236591 +0100
|
||||
+++ src/drivers/block/oracleasm/Makefile 2019-02-07 00:30:59.117388865 +0100
|
||||
@@ -1,3 +1,4 @@
|
||||
+CONFIG_ORACLEASM = m
|
||||
|
||||
obj-$(CONFIG_ORACLEASM) := oracleasm.o
|
||||
oracleasm-y += driver.o transaction_file.o
|
@ -0,0 +1,30 @@
|
||||
From 7035e448d799d95a70a0231c53b03e3e82c242ea Mon Sep 17 00:00:00 2001
|
||||
From: Ming Lei <ming.lei@redhat.com>
|
||||
Date: Wed, 16 Sep 2020 12:09:01 +0800
|
||||
Subject: [PATCH 2/3] oracleasm: driver: make bio_for_each_segment_all working
|
||||
on rhel8
|
||||
|
||||
Signed-off-by: Ming Lei <ming.lei@redhat.com>
|
||||
---
|
||||
drivers/block/oracleasm/driver.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/block/oracleasm/driver.c b/drivers/block/oracleasm/driver.c
|
||||
index 7844036..756d3f9 100644
|
||||
--- a/drivers/block/oracleasm/driver.c
|
||||
+++ b/drivers/block/oracleasm/driver.c
|
||||
@@ -145,9 +145,9 @@ static inline unsigned int asm_block_size(struct block_device *bdev)
|
||||
void asm_bio_unmap(struct bio *bio)
|
||||
{
|
||||
struct bio_vec *bvec;
|
||||
- struct bvec_iter_all iter_all;
|
||||
+ int i;
|
||||
|
||||
- bio_for_each_segment_all(bvec, bio, iter_all) {
|
||||
+ bio_for_each_segment_all(bvec, bio, i) {
|
||||
if (bio_data_dir(bio) == READ)
|
||||
set_page_dirty_lock(bvec->bv_page);
|
||||
|
||||
--
|
||||
2.13.6
|
||||
|
130
SOURCES/0003-oracleasm-copy-rhel8-s-bio_map_user_iov.patch
Normal file
130
SOURCES/0003-oracleasm-copy-rhel8-s-bio_map_user_iov.patch
Normal file
@ -0,0 +1,130 @@
|
||||
From 29ee0198fc5acc9647f8d9a97f0e07bb8a278aa7 Mon Sep 17 00:00:00 2001
|
||||
From: Ming Lei <ming.lei@redhat.com>
|
||||
Date: Wed, 16 Sep 2020 11:08:42 +0800
|
||||
Subject: [PATCH 3/3] oracleasm: copy rhel8's bio_map_user_iov
|
||||
|
||||
Signed-off-by: Ming Lei <ming.lei@redhat.com>
|
||||
---
|
||||
drivers/block/oracleasm/driver.c | 99 +++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 98 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/block/oracleasm/driver.c b/drivers/block/oracleasm/driver.c
|
||||
index 756d3f9..c726726 100644
|
||||
--- a/drivers/block/oracleasm/driver.c
|
||||
+++ b/drivers/block/oracleasm/driver.c
|
||||
@@ -1124,6 +1124,103 @@ static void asm_end_bio_io(struct bio *bio)
|
||||
}
|
||||
} /* asm_end_bio_io() */
|
||||
|
||||
+/**
|
||||
+ * asm_bio_map_user_iov - map user iovec into bio
|
||||
+ * @q: the struct request_queue for the bio
|
||||
+ * @iter: iovec iterator
|
||||
+ * @gfp_mask: memory allocation flags
|
||||
+ *
|
||||
+ * Map the user space address into a bio suitable for io to a block
|
||||
+ * device. Returns an error pointer in case of error.
|
||||
+ */
|
||||
+static struct bio *asm_bio_map_user_iov(struct request_queue *q,
|
||||
+ struct iov_iter *iter,
|
||||
+ gfp_t gfp_mask)
|
||||
+{
|
||||
+ int j;
|
||||
+ struct bio *bio;
|
||||
+ int ret;
|
||||
+ struct bio_vec *bvec;
|
||||
+
|
||||
+ if (!iov_iter_count(iter))
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ bio = bio_kmalloc(gfp_mask, iov_iter_npages(iter, BIO_MAX_PAGES));
|
||||
+ if (!bio)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ while (iov_iter_count(iter)) {
|
||||
+ struct page **pages;
|
||||
+ ssize_t bytes;
|
||||
+ size_t offs, added = 0;
|
||||
+ int npages;
|
||||
+
|
||||
+ bytes = iov_iter_get_pages_alloc(iter, &pages, LONG_MAX, &offs);
|
||||
+ if (unlikely(bytes <= 0)) {
|
||||
+ ret = bytes ? bytes : -EFAULT;
|
||||
+ goto out_unmap;
|
||||
+ }
|
||||
+
|
||||
+ npages = DIV_ROUND_UP(offs + bytes, PAGE_SIZE);
|
||||
+
|
||||
+ if (unlikely(offs & queue_dma_alignment(q))) {
|
||||
+ ret = -EINVAL;
|
||||
+ j = 0;
|
||||
+ } else {
|
||||
+ for (j = 0; j < npages; j++) {
|
||||
+ struct page *page = pages[j];
|
||||
+ unsigned int n = PAGE_SIZE - offs;
|
||||
+ unsigned short prev_bi_vcnt = bio->bi_vcnt;
|
||||
+
|
||||
+ if (n > bytes)
|
||||
+ n = bytes;
|
||||
+
|
||||
+ if (!bio_add_pc_page(q, bio, page, n, offs))
|
||||
+ break;
|
||||
+
|
||||
+ /*
|
||||
+ * check if vector was merged with previous
|
||||
+ * drop page reference if needed
|
||||
+ */
|
||||
+ if (bio->bi_vcnt == prev_bi_vcnt)
|
||||
+ put_page(page);
|
||||
+
|
||||
+ added += n;
|
||||
+ bytes -= n;
|
||||
+ offs = 0;
|
||||
+ }
|
||||
+ iov_iter_advance(iter, added);
|
||||
+ }
|
||||
+ /*
|
||||
+ * release the pages we didn't map into the bio, if any
|
||||
+ */
|
||||
+ while (j < npages)
|
||||
+ put_page(pages[j++]);
|
||||
+ kvfree(pages);
|
||||
+ /* couldn't stuff something into bio? */
|
||||
+ if (bytes)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ bio_set_flag(bio, BIO_USER_MAPPED);
|
||||
+
|
||||
+ /*
|
||||
+ * subtle -- if asm_bio_map_user_iov() ended up bouncing a bio,
|
||||
+ * it would normally disappear when its bi_end_io is run.
|
||||
+ * however, we need it for the unmap, so grab an extra
|
||||
+ * reference to it
|
||||
+ */
|
||||
+ bio_get(bio);
|
||||
+ return bio;
|
||||
+
|
||||
+ out_unmap:
|
||||
+ bio_for_each_segment_all(bvec, bio, j) {
|
||||
+ put_page(bvec->bv_page);
|
||||
+ }
|
||||
+ bio_put(bio);
|
||||
+ return ERR_PTR(ret);
|
||||
+}
|
||||
+
|
||||
static int asm_submit_io(struct file *file,
|
||||
asm_ioc __user *user_iocp,
|
||||
asm_ioc *ioc)
|
||||
@@ -1247,7 +1344,7 @@ static int asm_submit_io(struct file *file,
|
||||
iov.iov_base = (void __user *)ioc->buffer_asm_ioc;
|
||||
iov.iov_len = r->r_count;
|
||||
iov_iter_init(&iter, rw, &iov, 1, r->r_count);
|
||||
- r->r_bio = bio_map_user_iov(bdev_get_queue(bdev), &iter, GFP_KERNEL);
|
||||
+ r->r_bio = asm_bio_map_user_iov(bdev_get_queue(bdev), &iter, GFP_KERNEL);
|
||||
|
||||
if (IS_ERR(r->r_bio)) {
|
||||
ret = PTR_ERR(r->r_bio);
|
||||
--
|
||||
2.13.6
|
||||
|
251
SPECS/kmod-redhat-oracleasm.spec
Normal file
251
SPECS/kmod-redhat-oracleasm.spec
Normal file
@ -0,0 +1,251 @@
|
||||
%define kmod_name oracleasm
|
||||
%define kmod_vendor redhat
|
||||
%define kmod_rpm_name kmod-redhat-oracleasm
|
||||
%define kmod_driver_version 2.0.8
|
||||
%define kmod_driver_epoch 8
|
||||
%define kmod_rpm_release 11
|
||||
%define kmod_kernel_version 4.18.0-286.el8
|
||||
%define kmod_kernel_version_min 4.18.0-286.el8
|
||||
%define kmod_kernel_version_dep 4.18.0
|
||||
%define kmod_kbuild_dir drivers/block/oracleasm
|
||||
%define kmod_install_path extra/kmod-redhat-oracleasm
|
||||
%define kernel_pkg kernel
|
||||
%define kernel_devel_pkg kernel-devel
|
||||
%define kernel_modules_pkg kernel-modules
|
||||
|
||||
%{!?dist: %define dist .el8_4}
|
||||
%{!?make_build: %define make_build make}
|
||||
|
||||
%if "%{kmod_kernel_version_dep}" == ""
|
||||
%define kmod_kernel_version_dep %{kmod_kernel_version}
|
||||
%endif
|
||||
|
||||
|
||||
Source0: %{kmod_name}-%{kmod_vendor}-%{kmod_driver_version}.tar.bz2
|
||||
# Source code patches
|
||||
Patch0: 0000-Makefile-config-opts.patch
|
||||
#Patch1: 0001-oracleasm-driver-replace-fs_context-with-mount_pseud.patch
|
||||
Patch2: 0002-oracleasm-driver-make-bio_for_each_segment_all-worki.patch
|
||||
Patch3: 0003-oracleasm-copy-rhel8-s-bio_map_user_iov.patch
|
||||
|
||||
%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 )
|
||||
%define dup_state_dir %{_localstatedir}/lib/rpm-state/kmod-dups
|
||||
%define kver_state_dir %{dup_state_dir}/kver
|
||||
%define kver_state_file %{kver_state_dir}/%{kmod_kernel_version}.%(arch)
|
||||
%define dup_module_list %{dup_state_dir}/rpm-kmod-%{kmod_name}-modules
|
||||
|
||||
Name: kmod-redhat-oracleasm
|
||||
Version: %{kmod_driver_version}
|
||||
Release: %{kmod_rpm_release}%{?dist}
|
||||
%if "%{kmod_driver_epoch}" != ""
|
||||
Epoch: %{kmod_driver_epoch}
|
||||
%endif
|
||||
Summary: oracleasm kernel module
|
||||
Group: System/Kernel
|
||||
License: GPLv2
|
||||
URL: https://github.com/oracle/linux-uek/tree/uek6/master/drivers/block/oracleasm
|
||||
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||
BuildRequires: %kernel_devel_pkg = %kmod_kernel_version
|
||||
BuildRequires: redhat-rpm-config kernel-abi-whitelists elfutils-libelf-devel kernel-rpm-macros kmod
|
||||
ExclusiveArch: x86_64
|
||||
%global kernel_source() /usr/src/kernels/%{kmod_kernel_version}.$(arch)
|
||||
|
||||
%global _use_internal_dependency_generator 0
|
||||
Provides: %kernel_modules_pkg >= %{kmod_kernel_version_min}.%{_target_cpu}
|
||||
Provides: kmod-%{kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
|
||||
Provides: %{kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
|
||||
Provides: %{kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
|
||||
Requires(post): %{sbindir}/weak-modules
|
||||
Requires(postun): %{sbindir}/weak-modules
|
||||
Requires: kernel >= 4.18.0-240.el8
|
||||
# if there are multiple kmods for the same driver from different vendors,
|
||||
# they should conflict with each other.
|
||||
Conflicts: kmod-%{kmod_name}
|
||||
|
||||
%description
|
||||
oracleasm kernel module
|
||||
|
||||
%post
|
||||
modules=( $(find /lib/modules/%{kmod_kernel_version}.%(arch)/%{kmod_install_path} | grep '\.ko$') )
|
||||
printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --add-modules --no-initramfs
|
||||
|
||||
mkdir -p "%{kver_state_dir}"
|
||||
touch "%{kver_state_file}"
|
||||
|
||||
exit 0
|
||||
|
||||
%posttrans
|
||||
# We have to re-implement part of weak-modules here because it doesn't allow
|
||||
# calling initramfs regeneration separately
|
||||
if [ -f "%{kver_state_file}" ]; then
|
||||
kver_base="%{kmod_kernel_version_dep}"
|
||||
kvers=$(ls -d "/lib/modules/${kver_base%%.*}"*)
|
||||
|
||||
for k_dir in $kvers; do
|
||||
k="${k_dir#/lib/modules/}"
|
||||
|
||||
tmp_initramfs="/boot/initramfs-$k.tmp"
|
||||
dst_initramfs="/boot/initramfs-$k.img"
|
||||
|
||||
# The same check as in weak-modules: we assume that the kernel present
|
||||
# if the symvers file exists.
|
||||
if [ -e "/boot/symvers-$k.gz" ] || [ -e "$k_dir/symvers.gz" ]; then
|
||||
/usr/bin/dracut -f "$tmp_initramfs" "$k" || exit 1
|
||||
cmp -s "$tmp_initramfs" "$dst_initramfs"
|
||||
if [ "$?" = 1 ]; then
|
||||
mv "$tmp_initramfs" "$dst_initramfs"
|
||||
else
|
||||
rm -f "$tmp_initramfs"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f "%{kver_state_file}"
|
||||
rmdir "%{kver_state_dir}" 2> /dev/null
|
||||
fi
|
||||
|
||||
rmdir "%{dup_state_dir}" 2> /dev/null
|
||||
|
||||
exit 0
|
||||
|
||||
%preun
|
||||
if rpm -q --filetriggers kmod 2> /dev/null| grep -q "Trigger for weak-modules call on kmod removal"; then
|
||||
mkdir -p "%{kver_state_dir}"
|
||||
touch "%{kver_state_file}"
|
||||
fi
|
||||
|
||||
mkdir -p "%{dup_state_dir}"
|
||||
rpm -ql kmod-redhat-oracleasm-%{kmod_driver_version}-%{kmod_rpm_release}%{?dist}.$(arch) | \
|
||||
grep '\.ko$' > "%{dup_module_list}"
|
||||
|
||||
%postun
|
||||
if rpm -q --filetriggers kmod 2> /dev/null| grep -q "Trigger for weak-modules call on kmod removal"; then
|
||||
initramfs_opt="--no-initramfs"
|
||||
else
|
||||
initramfs_opt=""
|
||||
fi
|
||||
|
||||
modules=( $(cat "%{dup_module_list}") )
|
||||
rm -f "%{dup_module_list}"
|
||||
printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --remove-modules $initramfs_opt
|
||||
|
||||
rmdir "%{dup_state_dir}" 2> /dev/null
|
||||
|
||||
exit 0
|
||||
|
||||
%files
|
||||
%defattr(644,root,root,755)
|
||||
/lib/modules/%{kmod_kernel_version}.%(arch)
|
||||
/etc/depmod.d/%{kmod_name}.conf
|
||||
%doc /usr/share/doc/%{kmod_rpm_name}/greylist.txt
|
||||
|
||||
|
||||
|
||||
%prep
|
||||
%setup -n %{kmod_name}-%{kmod_vendor}-%{kmod_driver_version}
|
||||
|
||||
%patch0 -p1
|
||||
#%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
set -- *
|
||||
mkdir source
|
||||
mv "$@" source/
|
||||
mkdir obj
|
||||
|
||||
%build
|
||||
rm -rf obj
|
||||
cp -r source obj
|
||||
|
||||
PWD_PATH="$PWD"
|
||||
%if "%{workaround_no_pwd_rel_path}" != "1"
|
||||
PWD_PATH=$(realpath --relative-to="%{kernel_source}" . 2>/dev/null || echo "$PWD")
|
||||
%endif
|
||||
%{make_build} -C %{kernel_source} V=1 M="$PWD_PATH/obj/%{kmod_kbuild_dir}" \
|
||||
NOSTDINC_FLAGS="-I$PWD_PATH/obj/include -I$PWD_PATH/obj/include/uapi %{nil}" \
|
||||
EXTRA_CFLAGS="%{nil}" \
|
||||
%{nil}
|
||||
# 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_kernel_version_dep}" |
|
||||
sed 's/\.[^\.]*$//;
|
||||
s/\([.+?^$\/\\|()\[]\|\]\)/\\\0/g').*" \
|
||||
"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=%{kmod_install_path}
|
||||
PWD_PATH="$PWD"
|
||||
%if "%{workaround_no_pwd_rel_path}" != "1"
|
||||
PWD_PATH=$(realpath --relative-to="%{kernel_source}" . 2>/dev/null || echo "$PWD")
|
||||
%endif
|
||||
make -C %{kernel_source} modules_install \
|
||||
M=$PWD_PATH/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_rpm_name}/greylist.txt
|
||||
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%changelog
|
||||
* Thu Feb 11 2021 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-11
|
||||
- Rebuild against kernel-4.18.0-286.el8.
|
||||
|
||||
* Mon Feb 08 2021 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-10
|
||||
- Rebuild against kernel-4.18.0-282.el8 (#1924967).
|
||||
|
||||
* Sun Jan 17 2021 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-9
|
||||
- Rebuild against kernel-4.18.0-275.el8.
|
||||
|
||||
* Mon Jan 04 2021 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-8
|
||||
- Check for symvers.gz presence in /lib/modules/KVER in addition to boot
|
||||
(#1912195).
|
||||
|
||||
* Tue Dec 29 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-7
|
||||
- Rebuild against kernel-4.18.0-268.el8.
|
||||
|
||||
* Wed Dec 23 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-6
|
||||
- Rebuild against kernel-4.18.0-256.el8.
|
||||
|
||||
* Fri Nov 27 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-5
|
||||
- Rebuild against kernel-4.18.0-254.el8.
|
||||
|
||||
* Sat Nov 21 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-4
|
||||
- Rebuild against kernel-4.18.0-252.el8.
|
||||
|
||||
* Fri Oct 30 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-3
|
||||
- Add "Provides: oracleasm" and "Provides: oracleasm-kmod".
|
||||
- Dropping "0001-oracleasm-driver-replace-fs_context-with-mount_pseud.patch".
|
||||
|
||||
* Thu Oct 22 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-2
|
||||
- Revision bump due to brew NVR conflict.
|
||||
|
||||
* Mon Oct 19 2020 Eugene Syromiatnikov <esyr@redhat.com> 2.0.8-1
|
||||
- 19e841b848491d1e14dcd0063d8d681ed1190255
|
||||
- oracleasm kernel module
|
||||
- Resolves: #1827015
|
Loading…
Reference in New Issue
Block a user