diff --git a/.ceph.metadata b/.ceph.metadata
index cb4918b..7d10768 100644
--- a/.ceph.metadata
+++ b/.ceph.metadata
@@ -1 +1 @@
-94e58f4c16cd86d255a6a306181dd5050a3246fe  SOURCES/ceph-16.2.7.tar.gz
+2eb3d38288df77154e7515b28b8eb27cb267a190  SOURCES/ceph-17.1.0.tar.gz
diff --git a/README.md b/README.md
index eed4fc1..76122bf 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Branch names follow convention like `c<VERSION>-sig-storage-ceph-VERSION>`
 as descibed on [Naming and Patterns for Mapping Git Branches to Koji Tags]
 (https://wiki.centos.org/BrianStinson/GitBranchesandKojiTags)
 
-* c9s-sig-storage-ceph-pacific: CentOS-8
+* c9s-sig-storage-ceph-quincy: CentOS-8
 * ...
 
 Instructions for building the ceph package for the CentOS Storage SIG
@@ -25,24 +25,24 @@ Get the lookaside uploader script from ssh://git@git.centos.org/centos-git-commo
 To build:
 
 1. Upload the source tar file to the lookaside cache, e.g.:
-    $ lookaside_upload -f SOURCES/ceph-16.2.6.tar.gz -n ceph -b c9s-sig-storage-ceph-pacific
+    $ lookaside_upload -f SOURCES/ceph-17.1.0.tar.gz -n ceph -b c9s-sig-storage-ceph-quincy
 
 2. update the .glusterfs.metadata with the hash from step 1:
     $ cat .ceph.metadata
-e9c6a6a482b8e46117c2a6c37b50c569bd62d92e  SOURCES/ceph-16.5.tar.gz
+e9c6a6a482b8e46117c2a6c37b50c569bd62d92e  SOURCES/ceph-17.1.0.tar.gz
 
 3. commit and push SPECS/ceph.spec and .ceph.metadata, e.g.:
     $ git add SPECS/ceph.spec .ceph.metadata
-    $ git push origin c9s-sig-storage-ceph-pacific
+    $ git push origin c9s-sig-storage-ceph-quincy
 
 4. retrieve the commit for step 3:
     $ git log|head -n 1
 commit 29f19456be12986e86392652331e3a56ff0a88a0
 
 5. build
-    $ cbs build storage9s-ceph-pacific-el9s git+https://git.centos.org/rpms/ceph.git#29f19456be12986e86392652331e3a56ff0a88a0
+    $ cbs build storage9s-ceph-quincy-el9s git+https://git.centos.org/rpms/ceph.git#29f19456be12986e86392652331e3a56ff0a88a0
 
 
 
-    $ cbs build [--scratch] storage9s-ceph-pacific-el9s ceph-16.2.6-1.el9s.src.rpm
+    $ cbs build [--scratch] storage9s-ceph-quincy-el9s ceph-17.1.0-1.el9s.src.rpm
 
diff --git a/SOURCES/0003-src-common-bitstr.h.patch b/SOURCES/0003-src-common-bitstr.h.patch
index ed2b0ce..3c7a516 100644
--- a/SOURCES/0003-src-common-bitstr.h.patch
+++ b/SOURCES/0003-src-common-bitstr.h.patch
@@ -8,14 +8,3 @@
  
  namespace ceph {
    class Formatter;
---- ceph-15.2.4/src/global/signal_handler.h.orig        2020-07-17 12:57:54.763628429 -0400
-+++ ceph-15.2.4/src/global/signal_handler.h     2020-07-17 12:58:10.610628429 -0400
-@@ -16,6 +16,8 @@
- #define CEPH_GLOBAL_SIGNAL_HANDLER_H
-
- #include <signal.h>
-+#include <string>
-+
- #include "acconfig.h"
-
- typedef void (*signal_handler_t)(int);
diff --git a/SOURCES/0007-src-test-neorados-CMakeLists.txt.patch b/SOURCES/0007-src-test-neorados-CMakeLists.txt.patch
deleted file mode 100644
index a160f38..0000000
--- a/SOURCES/0007-src-test-neorados-CMakeLists.txt.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ceph-16.1.0-43-g6b74fb5c/src/test/neorados/CMakeLists.txt.orig	2021-02-01 08:25:18.006965821 -0500
-+++ ceph-16.1.0-43-g6b74fb5c/src/test/neorados/CMakeLists.txt	2021-02-01 08:25:34.244407147 -0500
-@@ -19,7 +19,7 @@
- target_link_libraries(ceph_test_neorados_op_speed
-   libneorados fmt::fmt ${unittest_libs})
- 
--add_library(neoradostest-support common_tests.cc)
-+add_library(neoradostest-support STATIC common_tests.cc)
- target_link_libraries(neoradostest-support
-   libneorados fmt::fmt)
- 
diff --git a/SOURCES/0010-CET-Add-CET-marker-to-crc32c_intel_fast_zero_asm.s.patch b/SOURCES/0010-CET-Add-CET-marker-to-crc32c_intel_fast_zero_asm.s.patch
new file mode 100644
index 0000000..7b3e34b
--- /dev/null
+++ b/SOURCES/0010-CET-Add-CET-marker-to-crc32c_intel_fast_zero_asm.s.patch
@@ -0,0 +1,27 @@
+From 1999108aeb1f6f93a19ea7bb64c6ae8b87d1b264 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Thu, 20 Jan 2022 05:33:13 -0800
+Subject: [PATCH] CET: Add CET marker to crc32c_intel_fast_zero_asm.s
+
+Add .note.gnu.property section to crc32c_intel_fast_zero_asm.s to mark
+for IBT and SHSTK compatibility.
+---
+ src/common/crc32c_intel_fast_zero_asm.s | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/common/crc32c_intel_fast_zero_asm.s b/src/common/crc32c_intel_fast_zero_asm.s
+index 216ecf639f3..2e291d858f3 100644
+--- a/src/common/crc32c_intel_fast_zero_asm.s
++++ b/src/common/crc32c_intel_fast_zero_asm.s
+@@ -654,4 +654,8 @@ slversion crc32_iscsi_zero_00, 00,   02,  0014
+ %ifidn __OUTPUT_FORMAT__, elf64
+ ; inform linker that this doesn't require executable stack
+ section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
+ %endif
+-- 
+2.34.1
+
diff --git a/SOURCES/0010-os-bluestore-strip-trailing-slash-for-directory-list.patch b/SOURCES/0010-os-bluestore-strip-trailing-slash-for-directory-list.patch
deleted file mode 100644
index 036f0fc..0000000
--- a/SOURCES/0010-os-bluestore-strip-trailing-slash-for-directory-list.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 3aa31813980d22719277a04797df48310acdff66 Mon Sep 17 00:00:00 2001
-From: Jonas Jelten <jj@sft.lol>
-Date: Mon, 15 Mar 2021 23:21:07 +0100
-Subject: [PATCH] os/bluestore: strip trailing slash for directory listings
-
-Calls to BlueRocksEnv::GetChildren may contain a trailing / in the
-queried directory, which is stripped away with this patch.
-
-If it's not stripped, the directory entry is not found in BlueFS:
-```
-10 bluefs readdir db/
-20 bluefs readdir dir db/ not found
- 3 rocksdb: [db/db_impl/db_impl_open.cc:1785] Persisting Option File error: OK
-```
-
-Fixes: https://tracker.ceph.com/issues/49815
-Signed-off-by: Jonas Jelten <jj@sft.lol>
----
- src/os/bluestore/BlueFS.cc | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc
-index ea39626aef..62b9d27f58 100644
---- a/src/os/bluestore/BlueFS.cc
-+++ b/src/os/bluestore/BlueFS.cc
-@@ -3493,9 +3493,14 @@
- 
- int BlueFS::readdir(const string& dirname, vector<string> *ls)
- {
-+  std::string dname = dirname;
-+  // dirname may contain a trailing /
-+  if (!dname.empty() && dname.back() == '/') {
-+    dname.pop_back();
-+  }
-   std::lock_guard l(lock);
--  dout(10) << __func__ << " " << dirname << dendl;
--  if (dirname.empty()) {
-+  dout(10) << __func__ << " " << dname << dendl;
-+  if (dname.empty()) {
-     // list dirs
-     ls->reserve(dir_map.size() + 2);
-     for (auto& q : dir_map) {
-@@ -3503,9 +3508,9 @@
-     }
-   } else {
-     // list files in dir
--    map<string,DirRef>::iterator p = dir_map.find(dirname);
-+    map<string,DirRef>::iterator p = dir_map.find(dname);
-     if (p == dir_map.end()) {
--      dout(20) << __func__ << " dir " << dirname << " not found" << dendl;
-+      dout(20) << __func__ << " dir " << dname << " not found" << dendl;
-       return -ENOENT;
-     }
-     DirRef dir = p->second;
--- 
-2.26.2
-
diff --git a/SOURCES/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch b/SOURCES/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
new file mode 100644
index 0000000..9cf4e6b
--- /dev/null
+++ b/SOURCES/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
@@ -0,0 +1,172 @@
+From bbcc1a69f787881f16156f3c789052942a564103 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Thu, 20 Jan 2022 05:35:49 -0800
+Subject: [PATCH] isa-l/CET: Add CET marker to x86-64 crc32 assembly codes
+
+Add .note.gnu.property section to x86-64 crc32 assembly codes to mark
+for IBT and SHSTK compatibility.
+---
+ crc/crc32_gzip_refl_by16_10.asm | 9 +++++++++
+ crc/crc32_gzip_refl_by8.asm     | 9 +++++++++
+ crc/crc32_gzip_refl_by8_02.asm  | 9 +++++++++
+ crc/crc32_ieee_01.asm           | 8 ++++++++
+ crc/crc32_ieee_02.asm           | 9 +++++++++
+ crc/crc32_ieee_by16_10.asm      | 9 +++++++++
+ crc/crc32_ieee_by4.asm          | 9 +++++++++
+ crc/crc32_iscsi_00.asm          | 8 ++++++++
+ crc/crc32_iscsi_01.asm          | 8 ++++++++
+ 9 files changed, 78 insertions(+)
+
+diff --git a/src/isa-l/crc/crc32_gzip_refl_by16_10.asm b/src/isa-l/crc/crc32_gzip_refl_by16_10.asm
+index 40236f6..b16874d 100644
+--- a/src/isa-l/crc/crc32_gzip_refl_by16_10.asm
++++ b/src/isa-l/crc/crc32_gzip_refl_by16_10.asm
+@@ -566,3 +566,12 @@ global no_ %+ FUNCTION_NAME
+ no_ %+ FUNCTION_NAME %+ :
+ %endif
+ %endif ; (AS_FEATURE_LEVEL) >= 10
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_gzip_refl_by8.asm b/src/isa-l/crc/crc32_gzip_refl_by8.asm
+index 62f7e7d..97b0c4a 100644
+--- a/src/isa-l/crc/crc32_gzip_refl_by8.asm
++++ b/src/isa-l/crc/crc32_gzip_refl_by8.asm
+@@ -622,3 +622,12 @@ dq 0x0706050403020100, 0x000e0d0c0b0a0908
+ 
+ ;;;       func        core, ver, snum
+ slversion crc32_gzip_refl_by8, 01,   00,  002c
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_gzip_refl_by8_02.asm b/src/isa-l/crc/crc32_gzip_refl_by8_02.asm
+index 80d849e..1d5a75f 100644
+--- a/src/isa-l/crc/crc32_gzip_refl_by8_02.asm
++++ b/src/isa-l/crc/crc32_gzip_refl_by8_02.asm
+@@ -553,3 +553,12 @@ pshufb_shf_table:
+ ;       dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+ dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+ dq 0x0706050403020100, 0x000e0d0c0b0a0908
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_ieee_01.asm b/src/isa-l/crc/crc32_ieee_01.asm
+index 32495ed..cfc443b 100644
+--- a/src/isa-l/crc/crc32_ieee_01.asm
++++ b/src/isa-l/crc/crc32_ieee_01.asm
+@@ -653,3 +653,11 @@ dq 0x0706050403020100, 0x000e0d0c0b0a0908
+ ;;;       func        core, ver, snum
+ slversion crc32_ieee_01, 01,   06,  0011
+ 
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_ieee_02.asm b/src/isa-l/crc/crc32_ieee_02.asm
+index 8a472b0..dd7096a 100644
+--- a/src/isa-l/crc/crc32_ieee_02.asm
++++ b/src/isa-l/crc/crc32_ieee_02.asm
+@@ -649,3 +649,12 @@ pshufb_shf_table:
+ ;	dq 0x060504030201008f, 0x0e0d0c0b0a090807 ; shl 1  (16-15) / shr15
+ dq 0x8786858483828100, 0x8f8e8d8c8b8a8988
+ dq 0x0706050403020100, 0x000e0d0c0b0a0908
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_ieee_by16_10.asm b/src/isa-l/crc/crc32_ieee_by16_10.asm
+index 200fd93..2afd597 100644
+--- a/src/isa-l/crc/crc32_ieee_by16_10.asm
++++ b/src/isa-l/crc/crc32_ieee_by16_10.asm
+@@ -582,3 +582,12 @@ global no_ %+ FUNCTION_NAME
+ no_ %+ FUNCTION_NAME %+ :
+ %endif
+ %endif ; (AS_FEATURE_LEVEL) >= 10
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_ieee_by4.asm b/src/isa-l/crc/crc32_ieee_by4.asm
+index 39bed5a..847d0bd 100644
+--- a/src/isa-l/crc/crc32_ieee_by4.asm
++++ b/src/isa-l/crc/crc32_ieee_by4.asm
+@@ -563,3 +563,12 @@ SHUF_MASK	dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+ 
+ ;;;       func             core, ver, snum
+ slversion crc32_ieee_by4, 05,   02,  0017
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_iscsi_00.asm b/src/isa-l/crc/crc32_iscsi_00.asm
+index 4f81e3a..3d6b2d1 100644
+--- a/src/isa-l/crc/crc32_iscsi_00.asm
++++ b/src/isa-l/crc/crc32_iscsi_00.asm
+@@ -669,3 +669,11 @@ DD 0x54851c7f,0x89e3d7c4,0xeba4fdf8,0x36c23643
+ ;;;       func            core, ver, snum
+ slversion crc32_iscsi_00, 00,   04,  0014
+ 
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/isa-l/crc/crc32_iscsi_01.asm b/src/isa-l/crc/crc32_iscsi_01.asm
+index 2a81517..c048413 100644
+--- a/src/isa-l/crc/crc32_iscsi_01.asm
++++ b/src/isa-l/crc/crc32_iscsi_01.asm
+@@ -588,3 +588,11 @@ K_table:
+ ;;;       func            core, ver, snum
+ slversion crc32_iscsi_01, 01,   04,  0015
+ 
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+-- 
+2.34.1
+
diff --git a/SOURCES/0012-spdk-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assemb.patch b/SOURCES/0012-spdk-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assemb.patch
new file mode 100644
index 0000000..baa9154
--- /dev/null
+++ b/SOURCES/0012-spdk-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assemb.patch
@@ -0,0 +1,100 @@
+From 72e6d27e08c86c16e8931739a5e6ecbc06b102d5 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Thu, 20 Jan 2022 05:40:56 -0800
+Subject: [PATCH] spdk/isa-l/CET: Add CET marker to x86-64 crc32 assembly codes
+
+Add .note.gnu.property section to x86-64 crc32 assembly codes to mark
+for IBT and SHSTK compatibility.
+---
+ crc/crc32_gzip_refl_by8.asm | 9 +++++++++
+ crc/crc32_ieee_01.asm       | 8 ++++++++
+ crc/crc32_ieee_by4.asm      | 9 +++++++++
+ crc/crc32_iscsi_00.asm      | 8 ++++++++
+ crc/crc32_iscsi_01.asm      | 8 ++++++++
+ 5 files changed, 42 insertions(+)
+
+diff --git a/src/spdk/isa-l/crc/crc32_gzip_refl_by8.asm b/src/spdk/isa-l/crc/crc32_gzip_refl_by8.asm
+index 62f7e7d..97b0c4a 100644
+--- a/src/spdk/isa-l/crc/crc32_gzip_refl_by8.asm
++++ b/src/spdk/isa-l/crc/crc32_gzip_refl_by8.asm
+@@ -622,3 +622,12 @@ dq 0x0706050403020100, 0x000e0d0c0b0a0908
+ 
+ ;;;       func        core, ver, snum
+ slversion crc32_gzip_refl_by8, 01,   00,  002c
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/spdk/isa-l/crc/crc32_ieee_01.asm b/src/spdk/isa-l/crc/crc32_ieee_01.asm
+index 32495ed..cfc443b 100644
+--- a/src/spdk/isa-l/crc/crc32_ieee_01.asm
++++ b/src/spdk/isa-l/crc/crc32_ieee_01.asm
+@@ -653,3 +653,11 @@ dq 0x0706050403020100, 0x000e0d0c0b0a0908
+ ;;;       func        core, ver, snum
+ slversion crc32_ieee_01, 01,   06,  0011
+ 
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/spdk/isa-l/crc/crc32_ieee_by4.asm b/src/spdk/isa-l/crc/crc32_ieee_by4.asm
+index 39bed5a..847d0bd 100644
+--- a/src/spdk/isa-l/crc/crc32_ieee_by4.asm
++++ b/src/spdk/isa-l/crc/crc32_ieee_by4.asm
+@@ -563,3 +563,12 @@ SHUF_MASK	dq 0x08090A0B0C0D0E0F, 0x0001020304050607
+ 
+ ;;;       func             core, ver, snum
+ slversion crc32_ieee_by4, 05,   02,  0017
++
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/spdk/isa-l/crc/crc32_iscsi_00.asm b/src/spdk/isa-l/crc/crc32_iscsi_00.asm
+index 4f81e3a..3d6b2d1 100644
+--- a/src/spdk/isa-l/crc/crc32_iscsi_00.asm
++++ b/src/spdk/isa-l/crc/crc32_iscsi_00.asm
+@@ -669,3 +669,11 @@ DD 0x54851c7f,0x89e3d7c4,0xeba4fdf8,0x36c23643
+ ;;;       func            core, ver, snum
+ slversion crc32_iscsi_00, 00,   04,  0014
+ 
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+diff --git a/src/spdk/isa-l/crc/crc32_iscsi_01.asm b/src/spdk/isa-l/crc/crc32_iscsi_01.asm
+index 2a81517..c048413 100644
+--- a/src/spdk/isa-l/crc/crc32_iscsi_01.asm
++++ b/src/spdk/isa-l/crc/crc32_iscsi_01.asm
+@@ -588,3 +588,11 @@ K_table:
+ ;;;       func            core, ver, snum
+ slversion crc32_iscsi_01, 01,   04,  0015
+ 
++%ifidn __OUTPUT_FORMAT__, elf64
++; inform linker that this doesn't require executable stack
++section .note.GNU-stack noalloc noexec nowrite progbits
++; inform linker that this is compatible with IBT and SHSTK
++section .note.gnu.property  note  alloc noexec align=8
++DD 0x00000004,0x00000010,0x00000005,0x00554e47
++DD 0xc0000002,0x00000004,0x00000003,0x00000000
++%endif
+-- 
+2.34.1
+
diff --git a/SOURCES/0014-rgw-Replace-boost-string_ref-view-with-std-string_vi.patch b/SOURCES/0014-rgw-Replace-boost-string_ref-view-with-std-string_vi.patch
deleted file mode 100644
index 58e34f2..0000000
--- a/SOURCES/0014-rgw-Replace-boost-string_ref-view-with-std-string_vi.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/rgw/rgw_string.h b/src/rgw/rgw_string.h
-index 257daa9c1fe..90e64f98a25 100644
---- a/src/rgw/rgw_string.h
-+++ b/src/rgw/rgw_string.h
-@@ -8,6 +8,8 @@
- #include <stdlib.h>
- #include <limits.h>
- #include <string_view>
-+#include <string>
-+#include <stdexcept>
- 
- #include <boost/container/small_vector.hpp>
- 
diff --git a/SOURCES/0015-src-kv-rocksdb_cache.patch b/SOURCES/0015-src-kv-rocksdb_cache.patch
deleted file mode 100644
index 667770d..0000000
--- a/SOURCES/0015-src-kv-rocksdb_cache.patch
+++ /dev/null
@@ -1,296 +0,0 @@
-diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.cc b/src/kv/rocksdb_cache/BinnedLRUCache.cc
-index 0d657883e92de..47c56e2ddd769 100644
---- a/src/kv/rocksdb_cache/BinnedLRUCache.cc
-+++ b/src/kv/rocksdb_cache/BinnedLRUCache.cc
-@@ -151,13 +151,20 @@ void BinnedLRUCacheShard::EraseUnRefEntries() {
-   }
- }
- 
--void BinnedLRUCacheShard::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
--                                           bool thread_safe) {
-+void BinnedLRUCacheShard::ApplyToAllCacheEntries(
-+  const std::function<void(const rocksdb::Slice& key,
-+                           void* value,
-+                           size_t charge,
-+                           DeleterFn)>& callback,
-+  bool thread_safe)
-+{
-   if (thread_safe) {
-     mutex_.lock();
-   }
-   table_.ApplyToAllCacheEntries(
--      [callback](BinnedLRUHandle* h) { callback(h->value, h->charge); });
-+    [callback](BinnedLRUHandle* h) {
-+      callback(h->key(), h->value, h->charge, h->deleter);
-+    });
-   if (thread_safe) {
-     mutex_.unlock();
-   }
-@@ -345,7 +352,7 @@ bool BinnedLRUCacheShard::Release(rocksdb::Cache::Handle* handle, bool force_era
- 
- rocksdb::Status BinnedLRUCacheShard::Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
-                              size_t charge,
--                             void (*deleter)(const rocksdb::Slice& key, void* value),
-+                             DeleterFn deleter,
-                              rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) {
-   auto e = new BinnedLRUHandle();
-   rocksdb::Status s;
-@@ -464,6 +471,12 @@ std::string BinnedLRUCacheShard::GetPrintableOptions() const {
-   return std::string(buffer);
- }
- 
-+DeleterFn BinnedLRUCacheShard::GetDeleter(rocksdb::Cache::Handle* h) const
-+{
-+  auto* handle = reinterpret_cast<BinnedLRUHandle*>(h);
-+  return handle->deleter;
-+}
-+
- BinnedLRUCache::BinnedLRUCache(CephContext *c, 
-                                size_t capacity, 
-                                int num_shard_bits,
-@@ -519,6 +532,13 @@ void BinnedLRUCache::DisownData() {
- #endif  // !__SANITIZE_ADDRESS__
- }
- 
-+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
-+DeleterFn BinnedLRUCache::GetDeleter(Handle* handle) const
-+{
-+  return reinterpret_cast<const BinnedLRUHandle*>(handle)->deleter;
-+}
-+#endif
-+
- size_t BinnedLRUCache::TEST_GetLRUSize() {
-   size_t lru_size_of_all_shards = 0;
-   for (int i = 0; i < num_shards_; i++) {
-diff --git a/src/kv/rocksdb_cache/BinnedLRUCache.h b/src/kv/rocksdb_cache/BinnedLRUCache.h
-index 85608be0e5734..88bf4502e8927 100644
---- a/src/kv/rocksdb_cache/BinnedLRUCache.h
-+++ b/src/kv/rocksdb_cache/BinnedLRUCache.h
-@@ -56,7 +56,7 @@ std::shared_ptr<rocksdb::Cache> NewBinnedLRUCache(
- 
- struct BinnedLRUHandle {
-   void* value;
--  void (*deleter)(const rocksdb::Slice&, void* value);
-+  DeleterFn deleter;
-   BinnedLRUHandle* next_hash;
-   BinnedLRUHandle* next;
-   BinnedLRUHandle* prev;
-@@ -189,7 +189,7 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
-   // Like Cache methods, but with an extra "hash" parameter.
-   virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
-                         size_t charge,
--                        void (*deleter)(const rocksdb::Slice& key, void* value),
-+                        DeleterFn deleter,
-                         rocksdb::Cache::Handle** handle,
-                         rocksdb::Cache::Priority priority) override;
-   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) override;
-@@ -205,13 +205,19 @@ class alignas(CACHE_LINE_SIZE) BinnedLRUCacheShard : public CacheShard {
-   virtual size_t GetUsage() const override;
-   virtual size_t GetPinnedUsage() const override;
- 
--  virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
--                                      bool thread_safe) override;
-+  virtual void ApplyToAllCacheEntries(
-+    const std::function<void(const rocksdb::Slice& key,
-+                             void* value,
-+                             size_t charge,
-+                             DeleterFn)>& callback,
-+    bool thread_safe) override;
- 
-   virtual void EraseUnRefEntries() override;
- 
-   virtual std::string GetPrintableOptions() const override;
- 
-+  virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const override;
-+
-   void TEST_GetLRUList(BinnedLRUHandle** lru, BinnedLRUHandle** lru_low_pri);
- 
-   //  Retrieves number of elements in LRU, for unit test purpose only
-@@ -304,7 +310,9 @@ class BinnedLRUCache : public ShardedCache {
-   virtual size_t GetCharge(Handle* handle) const override;
-   virtual uint32_t GetHash(Handle* handle) const override;
-   virtual void DisownData() override;
--
-+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
-+  virtual DeleterFn GetDeleter(Handle* handle) const override;
-+#endif
-   //  Retrieves number of elements in LRU, for unit test purpose only
-   size_t TEST_GetLRUSize();
-   // Sets the high pri pool ratio
-diff --git a/src/kv/rocksdb_cache/ShardedCache.cc b/src/kv/rocksdb_cache/ShardedCache.cc
-index 367140a94d8be..6cbd89ad6472c 100644
---- a/src/kv/rocksdb_cache/ShardedCache.cc
-+++ b/src/kv/rocksdb_cache/ShardedCache.cc
-@@ -44,7 +44,7 @@ void ShardedCache::SetStrictCapacityLimit(bool strict_capacity_limit) {
- }
- 
- rocksdb::Status ShardedCache::Insert(const rocksdb::Slice& key, void* value, size_t charge,
--                            void (*deleter)(const rocksdb::Slice& key, void* value),
-+                            DeleterFn deleter,
-                             rocksdb::Cache::Handle** handle, Priority priority) {
-   uint32_t hash = HashSlice(key);
-   return GetShard(Shard(hash))
-@@ -109,13 +109,36 @@ size_t ShardedCache::GetPinnedUsage() const {
-   return usage;
- }
- 
-+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
-+DeleterFn ShardedCache::GetDeleter(Handle* handle) const
-+{
-+  uint32_t hash = GetHash(handle);
-+  return GetShard(Shard(hash))->GetDeleter(handle);
-+}
-+
-+void ShardedCache::ApplyToAllEntries(
-+    const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
-+                             DeleterFn deleter)>& callback,
-+    const ApplyToAllEntriesOptions& opts)
-+{
-+  int num_shards = 1 << num_shard_bits_;
-+  for (int s = 0; s < num_shards; s++) {
-+    GetShard(s)->ApplyToAllCacheEntries(callback, true /* thread_safe */);
-+  }
-+}
-+#else
- void ShardedCache::ApplyToAllCacheEntries(void (*callback)(void*, size_t),
-                                           bool thread_safe) {
-   int num_shards = 1 << num_shard_bits_;
-   for (int s = 0; s < num_shards; s++) {
--    GetShard(s)->ApplyToAllCacheEntries(callback, thread_safe);
-+    GetShard(s)->ApplyToAllCacheEntries(
-+      [callback](const rocksdb::Slice&, void* value, size_t charge, DeleterFn) {
-+        callback(value, charge);
-+      },
-+      thread_safe);
-   }
- }
-+#endif
- 
- void ShardedCache::EraseUnRefEntries() {
-   int num_shards = 1 << num_shard_bits_;
-@@ -131,7 +154,7 @@ std::string ShardedCache::GetPrintableOptions() const {
-   char buffer[kBufferSize];
-   {
-     std::lock_guard<std::mutex> l(capacity_mutex_);
--    snprintf(buffer, kBufferSize, "    capacity : %" ROCKSDB_PRIszt "\n",
-+    snprintf(buffer, kBufferSize, "    capacity : %zu\n",
-              capacity_);
-     ret.append(buffer);
-     snprintf(buffer, kBufferSize, "    num_shard_bits : %d\n", num_shard_bits_);
-diff --git a/src/kv/rocksdb_cache/ShardedCache.h b/src/kv/rocksdb_cache/ShardedCache.h
-index 4d64893ab1c7b..f98421a09a33a 100644
---- a/src/kv/rocksdb_cache/ShardedCache.h
-+++ b/src/kv/rocksdb_cache/ShardedCache.h
-@@ -14,6 +14,7 @@
- #include <string>
- #include <mutex>
- 
-+#include "rocksdb/version.h"
- #include "rocksdb/cache.h"
- #include "include/ceph_hash.h"
- #include "common/PriorityCache.h"
-@@ -22,10 +23,11 @@
- #ifndef CACHE_LINE_SIZE
- #define CACHE_LINE_SIZE 64 // XXX arch-specific define 
- #endif
--#define ROCKSDB_PRIszt "zu"
- 
- namespace rocksdb_cache {
- 
-+using DeleterFn = void (*)(const rocksdb::Slice& key, void* value);
-+
- // Single cache shard interface.
- class CacheShard {
-  public:
-@@ -34,7 +36,7 @@ class CacheShard {
- 
-   virtual rocksdb::Status Insert(const rocksdb::Slice& key, uint32_t hash, void* value,
-                                  size_t charge,
--                                 void (*deleter)(const rocksdb::Slice& key, void* value),
-+                                 DeleterFn deleter,
-                                  rocksdb::Cache::Handle** handle, rocksdb::Cache::Priority priority) = 0;
-   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, uint32_t hash) = 0;
-   virtual bool Ref(rocksdb::Cache::Handle* handle) = 0;
-@@ -44,10 +46,15 @@ class CacheShard {
-   virtual void SetStrictCapacityLimit(bool strict_capacity_limit) = 0;
-   virtual size_t GetUsage() const = 0;
-   virtual size_t GetPinnedUsage() const = 0;
--  virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
--                                      bool thread_safe) = 0;
-+  virtual void ApplyToAllCacheEntries(
-+    const std::function<void(const rocksdb::Slice& key,
-+                             void* value,
-+                             size_t charge,
-+                             DeleterFn)>& callback,
-+    bool thread_safe) = 0;
-   virtual void EraseUnRefEntries() = 0;
-   virtual std::string GetPrintableOptions() const { return ""; }
-+  virtual DeleterFn GetDeleter(rocksdb::Cache::Handle* handle) const = 0;
- };
- 
- // Generic cache interface which shards cache by hash of keys. 2^num_shard_bits
-@@ -57,34 +64,43 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
-  public:
-   ShardedCache(size_t capacity, int num_shard_bits, bool strict_capacity_limit);
-   virtual ~ShardedCache() = default;
-+  // rocksdb::Cache
-   virtual const char* Name() const override = 0;
--  virtual CacheShard* GetShard(int shard) = 0;
--  virtual const CacheShard* GetShard(int shard) const = 0;
--  virtual void* Value(Handle* handle) override = 0;
--  virtual size_t GetCharge(Handle* handle) const = 0;
--  virtual uint32_t GetHash(Handle* handle) const = 0;
--  virtual void DisownData() override = 0;
--
--  virtual void SetCapacity(size_t capacity) override;
--  virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
--
-   virtual rocksdb::Status Insert(const rocksdb::Slice& key, void* value, size_t charge,
--                                 void (*deleter)(const rocksdb::Slice& key, void* value),
-+                                 DeleterFn,
-                                  rocksdb::Cache::Handle** handle, Priority priority) override;
-   virtual rocksdb::Cache::Handle* Lookup(const rocksdb::Slice& key, rocksdb::Statistics* stats) override;
-   virtual bool Ref(rocksdb::Cache::Handle* handle) override;
-   virtual bool Release(rocksdb::Cache::Handle* handle, bool force_erase = false) override;
-+  virtual void* Value(Handle* handle) override = 0;
-   virtual void Erase(const rocksdb::Slice& key) override;
-   virtual uint64_t NewId() override;
--  virtual size_t GetCapacity() const override;
-+  virtual void SetCapacity(size_t capacity) override;
-+  virtual void SetStrictCapacityLimit(bool strict_capacity_limit) override;
-   virtual bool HasStrictCapacityLimit() const override;
-+  virtual size_t GetCapacity() const override;
-   virtual size_t GetUsage() const override;
-   virtual size_t GetUsage(rocksdb::Cache::Handle* handle) const override;
-   virtual size_t GetPinnedUsage() const override;
-+  virtual size_t GetCharge(Handle* handle) const = 0;
-+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
-+  virtual DeleterFn GetDeleter(Handle* handle) const override;
-+#endif
-+  virtual void DisownData() override = 0;
-+#if (ROCKSDB_MAJOR >= 6 && ROCKSDB_MINOR >= 22)
-+  virtual void ApplyToAllEntries(
-+      const std::function<void(const rocksdb::Slice& key, void* value, size_t charge,
-+                               DeleterFn deleter)>& callback,
-+      const ApplyToAllEntriesOptions& opts) override;
-+#else
-   virtual void ApplyToAllCacheEntries(void (*callback)(void*, size_t),
-                                       bool thread_safe) override;
-+#endif
-   virtual void EraseUnRefEntries() override;
-   virtual std::string GetPrintableOptions() const override;
-+  virtual CacheShard* GetShard(int shard) = 0;
-+  virtual const CacheShard* GetShard(int shard) const = 0;
-+  virtual uint32_t GetHash(Handle* handle) const = 0;
- 
-   int GetNumShardBits() const { return num_shard_bits_; }
- 
-@@ -120,7 +136,7 @@ class ShardedCache : public rocksdb::Cache, public PriorityCache::PriCache {
- //    return Hash(s.data(), s.size(), 0);
-   }
- 
--  uint32_t Shard(uint32_t hash) {
-+  uint32_t Shard(uint32_t hash) const {
-     // Note, hash >> 32 yields hash in gcc, not the zero we expect!
-     return (num_shard_bits_ > 0) ? (hash >> (32 - num_shard_bits_)) : 0;
-   }
diff --git a/SOURCES/0016-src-tracing-patch b/SOURCES/0016-src-tracing-patch
new file mode 100644
index 0000000..228d93f
--- /dev/null
+++ b/SOURCES/0016-src-tracing-patch
@@ -0,0 +1,23 @@
+--- ceph-16.2.6-681-gfdc003bc/src/tracing/bluestore.tp.orig	2021-12-07 08:02:04.682972474 -0500
++++ ceph-16.2.6-681-gfdc003bc/src/tracing/bluestore.tp	2021-12-07 08:03:13.840771852 -0500
+@@ -1,3 +1,9 @@
++
++#ifdef __x86_64__
++#undef STAP_SDT_ARG_CONSTRAINT
++#define STAP_SDT_ARG_CONSTRAINT norx
++#endif
++
+ #include "include/int_types.h"
+ 
+ TRACEPOINT_EVENT(bluestore, transaction_state_duration,
+--- ceph-16.2.6-681-gfdc003bc/src/tracing/librbd.tp.orig	2021-12-07 09:50:16.467579483 -0500
++++ ceph-16.2.6-681-gfdc003bc/src/tracing/librbd.tp	2021-12-07 09:50:47.620026940 -0500
+@@ -1,3 +1,8 @@
++#ifdef __x86_64__
++#undef STAP_SDT_ARG_CONSTRAINT
++#define STAP_SDT_ARG_CONSTRAINT norx
++#endif
++
+ #include "tracing/tracing-common.h"
+ #include "include/rbd/librbd.h"
+ #include "include/int_types.h"
diff --git a/SOURCES/0017-gcc-12-omnibus.patch b/SOURCES/0017-gcc-12-omnibus.patch
new file mode 100644
index 0000000..7e4f116
--- /dev/null
+++ b/SOURCES/0017-gcc-12-omnibus.patch
@@ -0,0 +1,83 @@
+--- ceph-16.2.7/src/include/buffer.h.orig	2022-01-17 12:17:19.193356237 -0500
++++ ceph-16.2.7/src/include/buffer.h	2022-01-17 12:17:58.599639592 -0500
+@@ -38,6 +38,7 @@
+ # include <sys/mman.h>
+ #endif
+ 
++#include <memory>
+ #include <iosfwd>
+ #include <iomanip>
+ #include <list>
+--- ceph-16.2.7/src/common/LogEntry.cc.orig	2022-01-17 13:52:10.799134159 -0500
++++ ceph-16.2.7/src/common/LogEntry.cc	2022-01-17 13:52:47.244469274 -0500
+@@ -183,7 +183,7 @@
+       return "crit";
+     default:
+       ceph_abort();
+-      return 0;
++      return "";
+   }
+ }
+ 
+--- ceph-16.2.7/src/common/dout.h.orig	2022-01-18 08:58:11.805226954 -0500
++++ ceph-16.2.7/src/common/dout.h	2022-01-19 08:06:23.987388663 -0500
+@@ -99,11 +99,15 @@
+ template<typename T>
+ struct dynamic_marker_t {
+   T value;
+-  operator T() const { return value; }
++  // constexpr ctor isn't needed as it's an aggregate type
++  constexpr operator T() const { return value; }
+ };
+ 
+ template<typename T>
+-dynamic_marker_t<T> need_dynamic(T&& t) {
++constexpr dynamic_marker_t<T> need_dynamic(T&& t) {
++  // deprecated in C++17 but that's fine for testing
++  static_assert(std::is_literal_type_v<T>);
++  static_assert(std::is_literal_type_v<dynamic_marker_t<T>>);
+   return dynamic_marker_t<T>{ std::forward<T>(t) };
+ }
+ 
+--- ceph-16.2.7/src/test/librados/tier_cxx.cc.orig	2022-01-19 09:30:47.209459506 -0500
++++ ceph-16.2.7/src/test/librados/tier_cxx.cc	2022-01-19 10:02:47.783240298 -0500
+@@ -114,7 +114,7 @@
+ #include "rgw/rgw_common.h"
+ 
+ void check_fp_oid_refcount(librados::IoCtx& ioctx, std::string foid, uint64_t count,
+-			   std::string fp_algo = NULL)
++			   std::string fp_algo = "")
+ {
+   bufferlist t;
+   int size = foid.length();
+@@ -142,7 +142,7 @@
+   ASSERT_LE(count, refs.count());
+ }
+ 
+-string get_fp_oid(string oid, std::string fp_algo = NULL)
++string get_fp_oid(string oid, std::string fp_algo = "")
+ {
+   if (fp_algo == "sha1") {
+     unsigned char fingerprint[CEPH_CRYPTO_SHA1_DIGESTSIZE + 1];
+--- ceph-16.2.7/src/test/test_trans.cc.orig	2022-01-19 13:24:33.460008897 -0500
++++ ceph-16.2.7/src/test/test_trans.cc	2022-01-19 13:24:58.211554005 -0500
+@@ -51,7 +51,7 @@
+   cout << "#dev " << filename << std::endl;
+   cout << "#mb " << mb << std::endl;
+ 
+-  ObjectStore *fs = new FileStore(cct.get(), filename, NULL);
++  ObjectStore *fs = new FileStore(cct.get(), filename, "");
+   if (fs->mount() < 0) {
+     cout << "mount failed" << std::endl;
+     return -1;
+--- ceph-17.0.0-10335-gfd206722/src/s3select/include/s3select_functions.h.orig	2022-02-11 17:21:40.268627997 -0500
++++ ceph-17.0.0-10335-gfd206722/src/s3select/include/s3select_functions.h	2022-02-11 17:21:57.155325437 -0500
+@@ -466,7 +466,7 @@
+ 
+   std::string  print(int ident) override
+   {
+-    return std::string(0);
++    return std::string("");
+   }
+ 
+   void push_argument(base_statement* arg)
diff --git a/SOURCES/0018-src-rgw-store-dbstore-CMakeLists.txt.patch b/SOURCES/0018-src-rgw-store-dbstore-CMakeLists.txt.patch
new file mode 100644
index 0000000..9be5877
--- /dev/null
+++ b/SOURCES/0018-src-rgw-store-dbstore-CMakeLists.txt.patch
@@ -0,0 +1,37 @@
+--- ceph-17.1.0/src/rgw/store/dbstore/CMakeLists.txt.orig	2022-02-28 14:11:49.987077811 -0500
++++ ceph-17.1.0/src/rgw/store/dbstore/CMakeLists.txt	2022-02-28 14:12:19.576542037 -0500
+@@ -38,6 +38,7 @@
+ 
+ # add pthread library
+ set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} pthread)
++set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} global)
+ 
+ find_package(gtest QUIET)
+ if(WITH_TESTS)
+--- ceph-17.1.0/src/rgw/CMakeLists.txt.orig	2022-02-28 16:21:08.430487482 -0500
++++ ceph-17.1.0/src/rgw/CMakeLists.txt	2022-02-28 16:25:01.893245213 -0500
+@@ -254,10 +254,6 @@
+   target_link_libraries(rgw_common PUBLIC ${jaeger_base})
+ endif()
+ 
+-if(WITH_RADOSGW_DBSTORE)
+-  target_link_libraries(rgw_common PRIVATE global dbstore)
+-endif()
+-
+ set(rgw_a_srcs
+   rgw_auth_keystone.cc
+   rgw_client_io.cc
+@@ -308,8 +304,13 @@
+   find_package(RDKafka 0.9.2 REQUIRED)
+ endif()
+ 
++if(WITH_RADOSGW_DBSTORE)
++set (DBSTORE_LIB dbstore)
++endif()
++
+ target_link_libraries(rgw_a
+   PRIVATE
++    ${DBSTORE_LIB}
+     common_utf8 global
+     ${CRYPTO_LIBS}
+     ${LUA_LIBRARIES}
diff --git a/SPECS/ceph.spec b/SPECS/ceph.spec
index 455aa09..2ae3dc0 100644
--- a/SPECS/ceph.spec
+++ b/SPECS/ceph.spec
@@ -17,12 +17,11 @@
 #################################################################################
 # conditional build section
 #
-# please read http://rpm.org/user_doc/conditional_builds.html for explanation of
-# bcond syntax!
+# please read this for explanation of bcond syntax:
+# https://rpm-software-management.github.io/rpm/manual/conditionalbuilds.html
 #################################################################################
 %global _hardened_build 1
 
-%bcond_with cephadm
 %bcond_with make_check
 %bcond_with zbd
 %bcond_with cmake_verbose_logging
@@ -32,17 +31,16 @@
 %else
 %bcond_without tcmalloc
 %endif
-%bcond_with system_pmdk
-%if 0%{?fedora} || 0%{?rhel}
-%bcond_without selinux
-%ifarch x86_64 ppc64le
-%bcond_without rbd_rwl_cache
 %bcond_without rbd_ssd_cache
+%ifarch x86_64
+%bcond_without rbd_rwl_cache
 %else
 %bcond_with rbd_rwl_cache
-%bcond_with rbd_ssd_cache
-%global _system_pmdk 0
+%global _system_pmdk 1
 %endif
+%if 0%{?fedora} || 0%{?rhel}
+%bcond_without system_pmdk
+%bcond_without selinux
 %if 0%{?rhel} >= 8
 %bcond_with cephfs_java
 %else
@@ -58,18 +56,15 @@
 %global _remote_tarball_prefix https://download.ceph.com/tarballs/
 %endif
 %if 0%{?suse_version}
+%bcond_without system_pmdk
 %bcond_with amqp_endpoint
 %bcond_with cephfs_java
 %bcond_with kafka_endpoint
 %bcond_with libradosstriper
 %ifarch x86_64 aarch64 ppc64le
 %bcond_without lttng
-%bcond_without rbd_rwl_cache
-%bcond_without rbd_ssd_cache
 %else
 %bcond_with lttng
-%bcond_with rbd_rwl_cache
-%bcond_with rbd_ssd_cache
 %endif
 %bcond_with ocf
 %bcond_with selinux
@@ -121,15 +116,38 @@
 %{!?python3_version_nodots: %global python3_version_nodots 3}
 %{!?python3_version: %global python3_version 3}
 
-# disable dwz which compresses the debuginfo
-%global _find_debuginfo_dwz_opts %{nil}
+%if ! 0%{?suse_version}
+# use multi-threaded xz compression: xz level 7 using ncpus threads
+%global _source_payload w7T%{_smp_build_ncpus}.xzdio
+%global _binary_payload w7T%{_smp_build_ncpus}.xzdio
+%endif
+
+%define smp_limit_mem_per_job() %( \
+  kb_per_job=%1 \
+  kb_total=$(head -3 /proc/meminfo | sed -n 's/MemAvailable:\\s*\\(.*\\) kB.*/\\1/p') \
+  jobs=$(( $kb_total / $kb_per_job )) \
+  [ $jobs -lt 1 ] && jobs=1 \
+  echo $jobs )
+
+%if 0%{?_smp_ncpus_max} == 0
+%if 0%{?__isa_bits} == 32
+# 32-bit builds can use 3G memory max, which is not enough even for -j2
+%global _smp_ncpus_max 1
+%else
+# 3.0 GiB mem per job
+# SUSE distros use limit_build in the place of smp_limit_mem_per_job, please
+# be sure to update it (in the build section, below) as well when changing this
+# number.
+%global _smp_ncpus_max %{smp_limit_mem_per_job 3000000}
+%endif
+%endif
 
 #################################################################################
 # main package definition
 #################################################################################
 Name:		ceph
-Version:	16.2.7
-Release:	1%{?dist}
+Version:	17.1.0
+Release:	0.1.rc1%{?dist}
 %if 0%{?fedora} || 0%{?rhel}
 Epoch:		2
 %endif
@@ -140,18 +158,21 @@ Epoch:		2
 
 Summary:	User space components of the Ceph file system
 #License:	LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-3-Clause and MIT
-License:	(LGPLv2.1 or LGPLv3) and CC-BY-SA-3.0 and GPLv2 and Boost-1.0 and BSD and MIT
+License:	(LGPLv2+ or LGPLv3) and CC-BY-SA-3.0 and GPLv2 and Boost-1.0 and BSD and MIT
 %if 0%{?suse_version}
 Group:		System/Filesystems
 %endif
 URL:		http://ceph.com/
-Source0:	%{?_remote_tarball_prefix}ceph-%{version}.tar.gz
+Source0:	ceph-17.1.0.tar.gz
 Patch0001:	0001-src-common-crc32c_intel_fast.patch
 Patch0003:	0003-src-common-bitstr.h.patch
-Patch0007:	0007-src-test-neorados-CMakeLists.txt.patch
 Patch0008:	0008-cmake-modules-Finduring.cmake.patch
-Patch0014:	0014-rgw-Replace-boost-string_ref-view-with-std-string_vi.patch
-Patch0015:	0015-src-kv-rocksdb_cache.patch
+Patch0010:	0010-CET-Add-CET-marker-to-crc32c_intel_fast_zero_asm.s.patch
+Patch0011:	0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
+Patch0012:	0012-spdk-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assemb.patch
+Patch0016:	0016-src-tracing-patch
+Patch0017:	0017-gcc-12-omnibus.patch
+Patch0018:	0018-src-rgw-store-dbstore-CMakeLists.txt.patch
 # Source1:	cmake-modules-BuildBoost.cmake.noautopatch
 # ceph 14.0.1 does not support 32-bit architectures, bugs #1727788, #1727787
 ExcludeArch:	i686 armv7hl
@@ -177,9 +198,8 @@ BuildRequires:	selinux-policy-devel
 %endif
 BuildRequires:	gperf
 BuildRequires:	cmake > 3.5
-BuildRequires:	cryptsetup
 BuildRequires:	fuse3-devel
-%if 0%{with seastar}
+%if 0%{with seastar} && 0%{?rhel}
 BuildRequires:	gcc-toolset-9-gcc-c++ >= 9.2.1-2.3
 %else
 BuildRequires:	gcc-c++
@@ -196,46 +216,47 @@ BuildRequires:  gperftools-devel >= 2.6.1
 BuildRequires:	gperftools-devel >= 2.4
 %endif
 %endif
-BuildRequires:	leveldb-devel > 1.2
 BuildRequires:	libaio-devel
 BuildRequires:	libblkid-devel >= 2.17
 BuildRequires:	cryptsetup-devel
 BuildRequires:	libcurl-devel
 BuildRequires:	libcap-ng-devel
-BuildRequires:	fmt-devel >= 5.2.1
+BuildRequires:	fmt-devel >= 6.2.1
 %if 0%{?fedora}
 BuildRequires:	rocksdb-devel
 Requires:	rocksdb
 %endif
-# BuildRequires:	liburing-devel
+BuildRequires:	liburing-devel
 BuildRequires:	pkgconfig(libudev)
 BuildRequires:	libnl3-devel
 BuildRequires:	liboath-devel
 BuildRequires:	libtool
 BuildRequires:	libxml2-devel
-BuildRequires:	make
 BuildRequires:	libzstd-devel
+BuildRequires:	ninja-build
 BuildRequires:	ncurses-devel
 BuildRequires:	libicu-devel
-BuildRequires:	parted
 BuildRequires:	patch
 BuildRequires:	perl
 BuildRequires:	pkgconfig
 BuildRequires:	procps
 BuildRequires:	python%{python3_pkgversion}
 BuildRequires:	python%{python3_pkgversion}-devel
+BuildRequires:	python%{python3_pkgversion}-setuptools
+BuildRequires:	python%{python3_pkgversion}-Cython
 BuildRequires:	snappy-devel
 BuildRequires:	sqlite-devel
 BuildRequires:	sudo
 BuildRequires:	pkgconfig(udev)
-BuildRequires:	util-linux
 BuildRequires:	valgrind-devel
 BuildRequires:	which
-BuildRequires:	xfsprogs
 BuildRequires:	xfsprogs-devel
 BuildRequires:	xmlstarlet
 BuildRequires:	nasm
 BuildRequires:	lua-devel
+%if 0%{with seastar} || 0%{with jaeger}
+BuildRequires:	yaml-cpp-devel >= 0.6
+%endif
 %if 0%{with amqp_endpoint}
 BuildRequires:	librabbitmq-devel
 %endif
@@ -243,9 +264,10 @@ BuildRequires:	librabbitmq-devel
 BuildRequires:	librdkafka-devel
 %endif
 %if 0%{with lua_packages}
-BuildRequires:  %{luarocks_package_name}
+BuildRequires:	%{luarocks_package_name}
 %endif
 %if 0%{with make_check}
+BuildRequires:	hostname
 BuildRequires:	jq
 BuildRequires:	libuuid-devel
 BuildRequires:	python%{python3_pkgversion}-bcrypt
@@ -258,11 +280,12 @@ BuildRequires:	python%{python3_pkgversion}-pyOpenSSL
 BuildRequires:	socat
 %endif
 %if 0%{with zbd}
-BuildRequires:  libzbd-devel
+BuildRequires:	libzbd-devel
 %endif
 %if 0%{with jaeger}
 BuildRequires:	bison
 BuildRequires:	flex
+BuildRequires:	thrift-devel >= 0.13.0
 %if 0%{?fedora} || 0%{?rhel}
 BuildRequires:	json-devel
 %endif
@@ -270,7 +293,6 @@ BuildRequires:	json-devel
 BuildRequires:	nlohmann_json-devel
 %endif
 BuildRequires:	libevent-devel
-BuildRequires:	yaml-cpp-devel
 %endif
 %if 0%{with system_pmdk}
 BuildRequires:	libpmem-devel
@@ -282,10 +304,8 @@ BuildRequires:	gnutls-devel
 BuildRequires:	hwloc-devel
 BuildRequires:	libpciaccess-devel
 BuildRequires:	lksctp-tools-devel
-BuildRequires:	protobuf-devel
 BuildRequires:	ragel
 BuildRequires:	systemtap-sdt-devel
-BuildRequires:	yaml-cpp-devel
 %if 0%{?fedora}
 BuildRequires:	libubsan
 BuildRequires:	libasan
@@ -307,6 +327,7 @@ BuildRequires:	systemd-rpm-macros
 %{?systemd_requires}
 PreReq:		%fillup_prereq
 BuildRequires:	fdupes
+BuildRequires:	memory-constraints
 BuildRequires:	net-tools
 BuildRequires:	libbz2-devel
 BuildRequires:	mozilla-nss-devel
@@ -317,9 +338,8 @@ BuildRequires:	openldap2-devel
 #BuildRequires:	krb5
 #BuildRequires:	krb5-devel
 BuildRequires:	cunit-devel
-BuildRequires:	python%{python3_pkgversion}-setuptools
-BuildRequires:	python%{python3_pkgversion}-Cython
 BuildRequires:	python%{python3_pkgversion}-PrettyTable
+BuildRequires:	python%{python3_pkgversion}-PyYAML
 BuildRequires:	python%{python3_pkgversion}-Sphinx
 BuildRequires:	rdma-core-devel
 BuildRequires:	liblz4-devel >= 1.7
@@ -339,17 +359,17 @@ BuildRequires:	openldap-devel
 BuildRequires:	openssl-devel
 BuildRequires:	CUnit-devel
 BuildRequires:	python%{python3_pkgversion}-devel
-BuildRequires:	python%{python3_pkgversion}-setuptools
-BuildRequires:	python%{python3_pkgversion}-Cython
 BuildRequires:	python%{python3_pkgversion}-prettytable
+BuildRequires:	python%{python3_pkgversion}-pyyaml
 BuildRequires:	python%{python3_pkgversion}-sphinx
 BuildRequires:	lz4-devel >= 1.7
 %endif
 # distro-conditional make check dependencies
+BuildRequires:	golang
 %if 0%{with make_check}
+BuildRequires:	golang
 %if 0%{?fedora} || 0%{?rhel}
 BuildRequires:	golang-github-prometheus
-BuildRequires:	jsonnet
 BuildRequires:	libtool-ltdl-devel
 BuildRequires:	xmlsec1
 BuildRequires:	xmlsec1-devel
@@ -367,7 +387,6 @@ BuildRequires:	python%{python3_pkgversion}-pyOpenSSL
 %endif
 %if 0%{?suse_version}
 BuildRequires:	golang-github-prometheus-prometheus
-BuildRequires:	jsonnet
 BuildRequires:	libxmlsec1-1
 BuildRequires:	libxmlsec1-nss1
 BuildRequires:	libxmlsec1-openssl1
@@ -438,16 +457,12 @@ Requires:	librgw2 = %{_epoch_prefix}%{version}-%{release}
 %if 0%{with selinux}
 Requires:	ceph-selinux = %{_epoch_prefix}%{version}-%{release}
 %endif
-Requires:	cryptsetup
-Requires:	e2fsprogs
 Requires:	findutils
 Requires:	grep
 Requires:	logrotate
 Requires:	parted
 Requires:	psmisc
-Requires:	python%{python3_pkgversion}-setuptools
 Requires:	util-linux
-Requires:	xfsprogs
 Requires:	which
 %if 0%{?rhel} && 0%{?rhel} < 8
 # The following is necessary due to tracker 36508 and can be removed once the
@@ -468,19 +483,19 @@ Recommends:	smartmontools
 %description base
 Base is the package that includes all the files shared amongst ceph servers
 
-%if 0%{with cephadm}
 %package -n cephadm
 Summary:	Utility to bootstrap Ceph clusters
 BuildArch:	noarch
 Requires:	lvm2
 Requires:	python%{python3_pkgversion}
+Requires:	openssh-server
+Requires:	which
 %if 0%{?weak_deps}
 Recommends:	podman >= 2.0.2
 %endif
 %description -n cephadm
 Utility to bootstrap a Ceph cluster and manage Ceph daemons deployed
 with systemd and podman.
-%endif
 
 %package -n ceph-common
 Summary:	Ceph Common
@@ -535,9 +550,6 @@ Group:		System/Filesystems
 %endif
 Provides:	ceph-test:/usr/bin/ceph-monstore-tool
 Requires:	ceph-base = %{_epoch_prefix}%{version}-%{release}
-%if 0%{with jaeger}
-Requires:	libjaeger = %{_epoch_prefix}%{version}-%{release}
-%endif
 %description mon
 ceph-mon is the cluster monitor daemon for the Ceph distributed file
 system. One or more instances of ceph-mon form a Paxos part-time
@@ -672,14 +684,16 @@ BuildArch:	noarch
 Group:		System/Filesystems
 %endif
 Requires:	ceph-mgr = %{_epoch_prefix}%{version}-%{release}
-Requires:	python%{python3_pkgversion}-remoto
+Requires:	python%{python3_pkgversion}-asyncssh
 Requires:	cephadm = %{_epoch_prefix}%{version}-%{release}
 %if 0%{?suse_version}
 Requires:	openssh
+Requires:	python%{python3_pkgversion}-CherryPy
 Requires:	python%{python3_pkgversion}-Jinja2
 %endif
 %if 0%{?rhel} || 0%{?fedora}
 Requires:	openssh-clients
+Requires:	python%{python3_pkgversion}-cherrypy
 Requires:	python%{python3_pkgversion}-jinja2
 %endif
 %description mgr-cephadm
@@ -783,6 +797,7 @@ in realtime.
 %if %{with ocf}
 %package resource-agents
 Summary:	OCF-compliant resource agents for Ceph daemons
+BuildArch:	noarch
 %if 0%{?suse_version}
 Group:		System/Filesystems
 %endif
@@ -801,10 +816,11 @@ Group:		System/Filesystems
 %endif
 Provides:	ceph-test:/usr/bin/ceph-osdomap-tool
 Requires:	ceph-base = %{_epoch_prefix}%{version}-%{release}
-Requires:	lvm2
 Requires:	sudo
 Requires:	libstoragemgmt
-Requires:	python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release}
+%if 0%{?weak_deps}
+Recommends:	ceph-volume = %{_epoch_prefix}%{version}-%{release}
+%endif
 %description osd
 ceph-osd is the object storage daemon for the Ceph distributed file
 system.  It is responsible for storing objects on a local file system
@@ -817,12 +833,33 @@ Summary:	Ceph Object Storage Daemon (crimson)
 Group:		System/Filesystems
 %endif
 Requires:	ceph-osd = %{_epoch_prefix}%{version}-%{release}
+Requires:	binutils
 %description crimson-osd
 crimson-osd is the object storage daemon for the Ceph distributed file
 system.  It is responsible for storing objects on a local file system
 and providing access to them over the network.
 %endif
 
+%package volume
+Summary: Ceph OSD deployment and inspection tool
+BuildArch: noarch
+%if 0%{?suse_version}
+Group: System/Filesystems
+%endif
+Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release}
+Requires: cryptsetup
+Requires: e2fsprogs
+Requires: lvm2
+Requires: parted
+Requires: util-linux
+Requires: xfsprogs
+Requires: python%{python3_pkgversion}-setuptools
+Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release}
+%description volume
+This package contains a tool to deploy OSD with different devices like
+lvm or physical disks, and trying to follow a predictable, and robust
+way of preparing, activating, and starting the deployed OSD.
+
 %package -n librados2
 Summary:	RADOS distributed object store client library
 %if 0%{?suse_version}
@@ -1043,20 +1080,6 @@ Obsoletes:	libcephfs2-devel < %{_epoch_prefix}%{version}-%{release}
 This package contains libraries and headers needed to develop programs
 that use Ceph distributed file system.
 
-%if 0%{with jaeger}
-%package -n libjaeger
-Summary:       Ceph distributed file system tracing library
-%if 0%{?suse_version}
-Group:         System/Libraries
-%endif
-Provides:      libjaegertracing.so.0()(64bit)
-Provides:      libopentracing.so.1()(64bit)
-Provides:      libthrift.so.0.13.0()(64bit)
-%description -n libjaeger
-This package contains libraries needed to provide distributed
-tracing for Ceph.
-%endif
-
 %package -n python%{python3_pkgversion}-cephfs
 Summary:	Python 3 libraries for Ceph distributed file system
 %if 0%{?suse_version}
@@ -1228,9 +1251,12 @@ This package provides Ceph default alerts for Prometheus.
 # %%endif
 
 %build
-# LTO can be enabled as soon as the following GCC bug is fixed:
-# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200
-%define _lto_cflags %{nil}
+# Disable lto on systems that do not support symver attribute
+# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details
+%if ( 0%{?rhel} && 0%{?rhel} < 9 ) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 )
+ %define _lto_cflags %{nil}
+%endif
+
 
 %if 0%{with seastar} && 0%{?rhel}
 . /opt/rh/gcc-toolset-9/enable
@@ -1244,8 +1270,7 @@ done
 %endif
 
 %if 0%{?suse_version}
-# the following setting fixed an OOM condition we once encountered in the OBS
-RPM_OPT_FLAGS="$RPM_OPT_FLAGS --param ggc-min-expand=20 --param ggc-min-heapsize=32768"
+%limit_build -m 3000
 %endif
 
 export CPPFLAGS="$java_inc"
@@ -1258,120 +1283,106 @@ export LDFLAGS="$RPM_LD_FLAGS"
 export CXXFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g')
 %endif
 
-# Parallel build settings ...
-%ifarch aarch64
-XRPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
-if [ "$XRPM_BUILD_NCPUS" -gt 0 ]; then
-RPM_BUILD_NCPUS=$XRPM_BUILD_NCPUS/2
-fi
-%endif
-CEPH_MFLAGS_JOBS="%{?_smp_mflags}"
-CEPH_SMP_NCPUS=$(echo "$CEPH_MFLAGS_JOBS" | sed 's/-j//')
-# do not eat all memory
-echo "Available memory:"
-free -h
-echo "System limits:"
-ulimit -a
-if test -n "$CEPH_SMP_NCPUS" -a "$CEPH_SMP_NCPUS" -gt 1 ; then
-    mem_per_process=2500
-    max_mem=$(LANG=C free -m | sed -n "s|^Mem: *\([0-9]*\).*$|\1|p")
-    max_jobs="$(($max_mem / $mem_per_process))"
-    test "$CEPH_SMP_NCPUS" -gt "$max_jobs" && CEPH_SMP_NCPUS="$max_jobs" && echo "Warning: Reducing build parallelism to -j$max_jobs because of memory limits"
-    test "$CEPH_SMP_NCPUS" -le 0 && CEPH_SMP_NCPUS="1" && echo "Warning: Not using parallel build at all because of memory limits"
-fi
-export CEPH_SMP_NCPUS
-export CEPH_MFLAGS_JOBS="-j$CEPH_SMP_NCPUS"
-
 env | sort
 
-mkdir build
-cd build
-%{cmake} .. \
+%{?!_vpath_builddir:%global _vpath_builddir %{_target_platform}}
+
+# TODO: drop this step once we can use `cmake -B`
+mkdir -p %{_vpath_builddir}
+%{cmake} . \
+    -GNinja \
     -DCMAKE_BUILD_TYPE=RelWithDebInfo \
     -DCMAKE_COLOR_MAKEFILE:BOOL=OFF \
     -DBUILD_CONFIG=rpmbuild \
     -DCMAKE_INSTALL_PREFIX=%{_prefix} \
-    -DCMAKE_INSTALL_LIBDIR=%{_libdir} \
-    -DCMAKE_INSTALL_LIBEXECDIR=%{_libexecdir} \
-    -DCMAKE_INSTALL_LOCALSTATEDIR=%{_localstatedir} \
-    -DCMAKE_INSTALL_SYSCONFDIR=%{_sysconfdir} \
-    -DCMAKE_INSTALL_MANDIR=%{_mandir} \
-    -DCMAKE_INSTALL_DOCDIR=%{_docdir}/ceph \
-    -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \
-    -DCMAKE_INSTALL_SYSTEMD_SERVICEDIR=%{_unitdir} \
-    -DWITH_MANPAGE=ON \
-    -DWITH_PYTHON3=%{python3_version} \
-    -DWITH_MGR_DASHBOARD_FRONTEND=OFF \
+    -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \
+    -DCMAKE_INSTALL_LIBEXECDIR:PATH=%{_libexecdir} \
+    -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=%{_localstatedir} \
+    -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_sysconfdir} \
+    -DCMAKE_INSTALL_MANDIR:PATH=%{_mandir} \
+    -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/ceph \
+    -DCMAKE_INSTALL_INCLUDEDIR:PATH=%{_includedir} \
+    -DSYSTEMD_SYSTEM_UNIT_DIR:PATH=%{_unitdir} \
+    -DWITH_MANPAGE:BOOL=ON \
+    -DWITH_PYTHON3:STRING=%{python3_version} \
+    -DWITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF \
 %if 0%{without ceph_test_package}
-    -DWITH_TESTS=OFF \
+    -DWITH_TESTS:BOOL=OFF \
 %endif
 %if 0%{with cephfs_java}
-    -DWITH_CEPHFS_JAVA=ON \
+    -DWITH_CEPHFS_JAVA:BOOL=ON \
 %endif
 %if 0%{with selinux}
-    -DWITH_SELINUX=ON \
+    -DWITH_SELINUX:BOOL=ON \
 %endif
 %if %{with lttng}
-    -DWITH_LTTNG=ON \
-    -DWITH_BABELTRACE=ON \
+    -DWITH_LTTNG:BOOL=ON \
+    -DWITH_BABELTRACE:BOOL=ON \
 %else
-    -DWITH_LTTNG=OFF \
-    -DWITH_BABELTRACE=OFF \
+    -DWITH_LTTNG:BOOL=OFF \
+    -DWITH_BABELTRACE:BOOL=OFF \
 %endif
     $CEPH_EXTRA_CMAKE_ARGS \
 %if 0%{with ocf}
-    -DWITH_OCF=ON \
+    -DWITH_OCF:BOOL=ON \
 %endif
 %if 0%{?fedora}
     -DWITH_SYSTEM_ROCKSDB:BOOL=ON \
 %endif
-    -DWITH_SYSTEM_LIBURING:BOOL=OFF \
+    -DWITH_SYSTEM_LIBURING:BOOL=ON \
     -DWITH_SYSTEM_BOOST:BOOL=ON \
 %if 0%{with cephfs_shell}
-    -DWITH_CEPHFS_SHELL=ON \
+    -DWITH_CEPHFS_SHELL:BOOL=ON \
 %endif
 %if 0%{with libradosstriper}
-    -DWITH_LIBRADOSSTRIPER=ON \
+    -DWITH_LIBRADOSSTRIPER:BOOL=ON \
 %else
-    -DWITH_LIBRADOSSTRIPER=OFF \
+    -DWITH_LIBRADOSSTRIPER:BOOL=OFF \
 %endif
 %if 0%{with amqp_endpoint}
-    -DWITH_RADOSGW_AMQP_ENDPOINT=ON \
+    -DWITH_RADOSGW_AMQP_ENDPOINT:BOOL=ON \
 %else
-    -DWITH_RADOSGW_AMQP_ENDPOINT=OFF \
+    -DWITH_RADOSGW_AMQP_ENDPOINT:BOOL=OFF \
 %endif
 %if 0%{with kafka_endpoint}
-    -DWITH_RADOSGW_KAFKA_ENDPOINT=ON \
+    -DWITH_RADOSGW_KAFKA_ENDPOINT:BOOL=ON \
 %else
-    -DWITH_RADOSGW_KAFKA_ENDPOINT=OFF \
+    -DWITH_RADOSGW_KAFKA_ENDPOINT:BOOL=OFF \
 %endif
 %if 0%{without lua_packages}
-    -DWITH_RADOSGW_LUA_PACKAGES=OFF \
+    -DWITH_RADOSGW_LUA_PACKAGES:BOOL=OFF \
 %endif
 %if 0%{with zbd}
-    -DWITH_ZBD=ON \
+    -DWITH_ZBD:BOOL=ON \
 %endif
 %if 0%{with cmake_verbose_logging}
-    -DCMAKE_VERBOSE_MAKEFILE=ON \
+    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
 %endif
 %if 0%{with rbd_rwl_cache}
-    -DWITH_RBD_RWL=ON \
+    -DWITH_RBD_RWL:BOOL=ON \
 %endif
 %if 0%{with rbd_ssd_cache}
-    -DWITH_RBD_SSD_CACHE=ON \
-%endif
-    -DBOOST_J=$CEPH_SMP_NCPUS \
-%if 0%{with ceph_test_package}
-    -DWITH_SYSTEM_GTEST:BOOL=ON \
+    -DWITH_RBD_SSD_CACHE:BOOL=ON \
 %endif
 %if 0%{with system_pmdk}
     -DWITH_SYSTEM_PMDK:BOOL=ON \
 %endif
+%if 0%{with jaeger}
+    -DWITH_JAEGER:BOOL=ON \
+%endif
+%if 0%{?suse_version}
+    -DBOOST_J:STRING=%{jobs} \
+%else
+    -DBOOST_J:STRING=%{_smp_build_ncpus} \
+%endif
+%if 0%{with ceph_test_package}
+    -DWITH_SYSTEM_GTEST:BOOL=ON \
+%endif
     -DWITH_SYSTEM_ZSTD:BOOL=ON \
 %if 0%{?rhel}
     -DWITH_FMT_HEADER_ONLY:BOOL=ON \
 %endif
-    -DWITH_GRAFANA=ON
+    -DWITH_GRAFANA:BOOL=ON
 
 %if %{with cmake_verbose_logging}
 cat ./CMakeFiles/CMakeOutput.log
@@ -1381,23 +1392,19 @@ cat ./CMakeFiles/CMakeError.log
 export VERBOSE=1
 export V=1
 export GCC_COLORS=
-%cmake_build 
-
+%cmake_build
 
 %if 0%{with make_check}
 %check
 # run in-tree unittests
-# cd build
+# cd %{_vpath_builddir}
 # ctest "$CEPH_MFLAGS_JOBS"
 %endif
 
-
 %install
-pushd build
 %cmake_install
 # we have dropped sysvinit bits
 rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph
-popd
 %if 0%{with seastar}
 # package crimson-osd with the name of ceph-osd
 install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd
@@ -1419,7 +1426,6 @@ install -m 0644 -D COPYING %{buildroot}%{_docdir}/ceph/COPYING
 install -m 0644 -D etc/sysctl/90-ceph-osd.conf %{buildroot}%{_sysctldir}/90-ceph-osd.conf
 install -m 0755 -D src/tools/rbd_nbd/rbd-nbd_quiesce %{buildroot}%{_libexecdir}/rbd-nbd/rbd-nbd_quiesce
 
-%if 0%{with cephadm}
 install -m 0755 src/cephadm/cephadm %{buildroot}%{_sbindir}/cephadm
 mkdir -p %{buildroot}%{_sharedstatedir}/cephadm
 chmod 0700 %{buildroot}%{_sharedstatedir}/cephadm
@@ -1427,7 +1433,6 @@ mkdir -p %{buildroot}%{_sharedstatedir}/cephadm/.ssh
 chmod 0700 %{buildroot}%{_sharedstatedir}/cephadm/.ssh
 touch %{buildroot}%{_sharedstatedir}/cephadm/.ssh/authorized_keys
 chmod 0600 %{buildroot}%{_sharedstatedir}/cephadm/.ssh/authorized_keys
-%endif
 
 # firewall templates and /sbin/mount.ceph symlink
 %if 0%{?suse_version} && !0%{?usrmerged}
@@ -1466,7 +1471,7 @@ mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rbd
 mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rbd-mirror
 
 # prometheus alerts
-install -m 644 -D monitoring/prometheus/alerts/ceph_default_alerts.yml %{buildroot}/etc/prometheus/ceph/ceph_default_alerts.yml
+install -m 644 -D monitoring/ceph-mixin/prometheus_alerts.yml %{buildroot}/etc/prometheus/ceph/ceph_default_alerts.yml
 
 %if 0%{?suse_version}
 # create __pycache__ directories and their contents
@@ -1479,10 +1484,6 @@ install -m 644 -D monitoring/prometheus/alerts/ceph_default_alerts.yml %{buildro
 %py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}
 %endif
 
-%if 0%{without cephadm}
-rm -f %{buildroot}%{_mandir}/man8/cephadm.8*
-%endif
-
 #################################################################################
 # files and systemd scriptlets
 #################################################################################
@@ -1521,10 +1522,6 @@ rm -f %{buildroot}%{_mandir}/man8/cephadm.8*
 %{_fillupdir}/sysconfig.*
 %endif
 %{_unitdir}/ceph.target
-%dir %{python3_sitelib}/ceph_volume
-%{python3_sitelib}/ceph_volume/*
-%{python3_sitelib}/ceph_volume-*
-%{_mandir}/man8/ceph-deploy.8*
 %{_mandir}/man8/ceph-create-keys.8*
 %{_mandir}/man8/ceph-run.8*
 %{_mandir}/man8/crushtool.8*
@@ -1570,29 +1567,23 @@ fi
 /sbin/ldconfig
 %systemd_postun ceph.target
 
-%if 0%{with cephadm}
 %pre -n cephadm
 getent group cephadm >/dev/null || groupadd -r cephadm
 getent passwd cephadm >/dev/null || useradd -r -g cephadm -s /bin/bash -c "cephadm user for mgr/cephadm" -d %{_sharedstatedir}/cephadm cephadm
 exit 0
-%endif
 
-%if 0%{with cephadm}
 %if ! 0%{?suse_version}
 %postun -n cephadm
 userdel -r cephadm || true
 exit 0
 %endif
-%endif
 
-%if 0%{with cephadm}
 %files -n cephadm
 %{_sbindir}/cephadm
 %{_mandir}/man8/cephadm.8*
 %attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm
 %attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm/.ssh
 %attr(0600,cephadm,cephadm) %{_sharedstatedir}/cephadm/.ssh/authorized_keys
-%endif
 
 %files common
 %dir %{_docdir}/ceph
@@ -1607,6 +1598,7 @@ exit 0
 %{_bindir}/cephfs-data-scan
 %{_bindir}/cephfs-journal-tool
 %{_bindir}/cephfs-table-tool
+%{_bindir}/crushdiff
 %{_bindir}/rados
 %{_bindir}/radosgw-admin
 %{_bindir}/rbd
@@ -1621,6 +1613,8 @@ exit 0
 %{_bindir}/rbd-replay-prep
 %endif
 %{_bindir}/ceph-post-file
+%dir %{_libdir}/ceph/denc
+%{_libdir}/ceph/denc/denc-mod-*.so
 %{_tmpfilesdir}/ceph-common.conf
 %{_mandir}/man8/ceph-authtool.8*
 %{_mandir}/man8/ceph-conf.8*
@@ -1630,6 +1624,7 @@ exit 0
 %{_mandir}/man8/ceph-syn.8*
 %{_mandir}/man8/ceph-post-file.8*
 %{_mandir}/man8/ceph.8*
+%{_mandir}/man8/crushdiff.8*
 %{_mandir}/man8/mount.ceph.8*
 %{_mandir}/man8/rados.8*
 %{_mandir}/man8/radosgw-admin.8*
@@ -1650,7 +1645,6 @@ exit 0
 %config %{_sysconfdir}/bash_completion.d/radosgw-admin
 %config(noreplace) %{_sysconfdir}/ceph/rbdmap
 %{_unitdir}/rbdmap.service
-%dir %{_udevrulesdir}
 %{_udevrulesdir}/50-rbd.rules
 %attr(3770,ceph,ceph) %dir %{_localstatedir}/log/ceph/
 %attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/
@@ -2038,9 +2032,8 @@ fi
 %endif
 
 %postun immutable-object-cache
-test -n "$FIRST_ARG" || FIRST_ARG=$1
 %systemd_postun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target
-if [ $FIRST_ARG -ge 1 ] ; then
+if [ $1 -ge 1 ] ; then
   # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to
   # "yes". In any case: if units are not running, do not touch them.
   SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph
@@ -2118,23 +2111,18 @@ fi
 %{_bindir}/ceph-osdomap-tool
 %{_bindir}/ceph-osd
 %{_libexecdir}/ceph/ceph-osd-prestart.sh
-%{_sbindir}/ceph-volume
-%{_sbindir}/ceph-volume-systemd
 %{_mandir}/man8/ceph-clsinfo.8*
 %{_mandir}/man8/ceph-osd.8*
 %{_mandir}/man8/ceph-bluestore-tool.8*
-%{_mandir}/man8/ceph-volume.8*
-%{_mandir}/man8/ceph-volume-systemd.8*
 %{_unitdir}/ceph-osd@.service
 %{_unitdir}/ceph-osd.target
-%{_unitdir}/ceph-volume@.service
 %attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/osd
 %config(noreplace) %{_sysctldir}/90-ceph-osd.conf
 
 %post osd
 %if 0%{?suse_version}
 if [ $1 -eq 1 ] ; then
-  /usr/bin/systemctl preset ceph-osd@\*.service ceph-volume@\*.service ceph-osd.target >/dev/null 2>&1 || :
+  /usr/bin/systemctl preset ceph-osd@\*.service ceph-osd.target >/dev/null 2>&1 || :
 fi
 %endif
 %if 0%{?fedora} || 0%{?rhel}
@@ -2151,10 +2139,10 @@ fi
 
 %preun osd
 %if 0%{?suse_version}
-%service_del_preun ceph-osd@\*.service ceph-volume@\*.service ceph-osd.target
+%service_del_preun ceph-osd@\*.service ceph-osd.target
 %endif
 %if 0%{?fedora} || 0%{?rhel}
-%systemd_preun ceph-osd@\*.service ceph-volume@\*.service ceph-osd.target
+%systemd_preun ceph-osd@\*.service ceph-osd.target
 %endif
 
 %postun osd
@@ -2176,6 +2164,48 @@ fi
 %{_bindir}/crimson-osd
 %endif
 
+%files volume
+%{_sbindir}/ceph-volume
+%{_sbindir}/ceph-volume-systemd
+%dir %{python3_sitelib}/ceph_volume
+%{python3_sitelib}/ceph_volume/*
+%{python3_sitelib}/ceph_volume-*
+%{_mandir}/man8/ceph-volume.8*
+%{_mandir}/man8/ceph-volume-systemd.8*
+%{_unitdir}/ceph-volume@.service
+
+%post volume
+%if 0%{?suse_version}
+if [ $1 -eq 1 ] ; then
+  /usr/bin/systemctl preset ceph-volume@\*.service >/dev/null 2>&1 || :
+fi
+%endif
+%if 0%{?fedora} || 0%{?rhel}
+%systemd_post ceph-volume@\*.service
+%endif
+
+%preun volume
+%if 0%{?suse_version}
+%service_del_preun ceph-volume@\*.service
+%endif
+%if 0%{?fedora} || 0%{?rhel}
+%systemd_preun ceph-volume@\*.service
+%endif
+
+%postun volume
+%systemd_postun ceph-volume@\*.service
+if [ $1 -ge 1 ] ; then
+  # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to
+  # "yes". In any case: if units are not running, do not touch them.
+  SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph
+  if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then
+    source $SYSCONF_CEPH
+  fi
+  if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then
+    /usr/bin/systemctl try-restart ceph-volume@\*.service > /dev/null 2>&1 || :
+  fi
+fi
+
 %if %{with ocf}
 
 %files resource-agents
@@ -2317,20 +2347,9 @@ fi
 %{_includedir}/cephfs/metrics/Types.h
 %{_libdir}/libcephfs.so
 
-%if %{with jaeger}
-%files -n libjaeger
-%{_libdir}/libopentracing.so.*
-%{_libdir}/libthrift.so.*
-%{_libdir}/libjaegertracing.so.*
-%post -n libjaeger -p /sbin/ldconfig
-%postun -n libjaeger -p /sbin/ldconfig
-%endif
-
 %files -n python%{python3_pkgversion}-cephfs
 %{python3_sitearch}/cephfs.cpython*.so
 %{python3_sitearch}/cephfs-*.egg-info
-%{python3_sitelib}/ceph_volume_client.py
-%{python3_sitelib}/__pycache__/ceph_volume_client.cpython*.py*
 
 %files -n python%{python3_pkgversion}-ceph-argparse
 %{python3_sitelib}/ceph_argparse.py
@@ -2346,6 +2365,7 @@ fi
 %files -n cephfs-shell
 %{python3_sitelib}/cephfs_shell-*.egg-info
 %{_bindir}/cephfs-shell
+%{_mandir}/man8/cephfs-shell.8*
 %endif
 
 %files -n cephfs-top
@@ -2357,7 +2377,6 @@ fi
 %files -n ceph-test
 %{_bindir}/ceph-client-debug
 %{_bindir}/ceph_bench_log
-%{_bindir}/ceph_kvstorebench
 %{_bindir}/ceph_multi_stress_watch
 %{_bindir}/ceph_erasure_code_benchmark
 %{_bindir}/ceph_omapbench
@@ -2517,8 +2536,6 @@ exit 0
 %endif
 %attr(0755,root,root) %dir %{_sysconfdir}/grafana/dashboards/ceph-dashboard
 %config %{_sysconfdir}/grafana/dashboards/ceph-dashboard/*
-%doc monitoring/grafana/dashboards/README
-%doc monitoring/grafana/README.md
 
 %files prometheus-alerts
 %if 0%{?suse_version}
@@ -2528,18 +2545,97 @@ exit 0
 %config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml
 
 %changelog
+* Mon Feb 28 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:17.1.0-0.1.rc1
+- 17.1.0 RC1
+
+* Sat Feb 05 2022 Jiri Vanek <jvanek@redhat.com> - 2:16.2.7-10
+- Rebuilt for java-17-openjdk as system jdk
+
+* Wed Feb 2 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-9
+- 16.2.7, python3.10 w/ __CHAR_UNSIGNED__ fix
+
+* Thu Jan 27 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-8
+- 16.2.7, w/ modern linker (mold), x86_64 and aarch64, this time for real
+
+* Wed Jan 26 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-7
+- 16.2.7, build with modern linker (mold), x86_64 and aarch64
+- reenable ppc64le
+
+* Tue Jan 25 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-6
+- 16.2.7, more CET enablement, rhbz#2040091
+
+* Thu Jan 20 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-5
+- 16.2.7, rebuild with gcc-12, exclude ppc64le until fmt on ppc64le is fixed
+
+* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2:16.2.7-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Mon Jan 10 2022 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-3
+- 16.2.7, rebuild with fmt-8.1.1
+
+* Wed Dec 29 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-2
+- 16.2.7, LGPLv2.1 -> LGPLv2+, rhbz#2036035
+
 * Tue Dec 7 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.7-1
 - 16.2.7 GA
 
+* Tue Nov 02 2021 Mamoru TASAKA <mtasaka@fedoraproject.org> - 2:16.2.6-3
+- rebuild against new liblttng-ust
+
+* Tue Oct 19 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.6-2
+- 16.2.6, rebuild with rocksdb 6.25
+
 * Fri Sep 17 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.6-1
 - 16.2.6 GA
 
-* Thu Jul 22 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-2
-- https://tracker.ceph.com/issues/51797
+* Tue Sep 14 2021 Sahana Prasad <sahana@redhat.com> - 2:16.2.5-11
+- Rebuilt with OpenSSL 3.0.0
+
+* Mon Sep 6 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-10
+- Rebuilt for gtest 1.11.0
+
+* Thu Aug 26 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-9
+- Rebuilt for rocksdb 6.22
+
+* Tue Aug 17 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-8
+- build with ninja, -DWITH_SYSTEM_ZSTD, without gdbm
+
+* Sun Aug 8 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-7
+- Rebuild for Boost 1.76 again
+
+* Fri Aug 06 2021 Jonathan Wakely <jwakely@redhat.com> - 2:16.2.5-6
+- Rebuilt for Boost 1.76
+
+* Thu Aug 5 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-5
+- Rebuild for leveldb-1.23-3 w/ reverted -fno-rtti
+
+* Tue Aug 3 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-4
+- Rebuild for leveldb-1.23
+
+* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2:16.2.5-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Thu Jul 8 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-2
+- Rebuild for new fmt version.
 
 * Thu Jul 8 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.5-1
 - 16.2.5 GA
 
+* Mon Jul 05 2021 Richard Shaw <hobbes1069@gmail.com> - 2:16.2.4-6
+- Rebuild for new fmt version.
+
+* Fri Jun 11 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.4-5
+- https://src.fedoraproject.org/rpms/ceph/pull-request/3#
+
+* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 2:16.2.4-4
+- Rebuilt for Python 3.10
+
+* Wed May 26 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.4-3
+- 16.2.4, bz 1964858, snappy::uint32
+
+* Wed May 19 2021 Pete Walter <pwalter@fedoraproject.org> - 2:16.2.4-2
+- Rebuild for ICU 69
+
 * Thu May 13 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.4-1
 - 16.2.4 GA
 
@@ -2552,6 +2648,9 @@ exit 0
 * Tue Apr 20 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.1-1
 - 16.2.1 GA
 
+* Wed Apr 14 2021 Richard W.M. Jones <rjones@redhat.com> - 2:16.2.0-3
+- Rebuild for updated liburing.
+
 * Sat Apr 10 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.2.0-2
 - 16.2.0, libamqp_mock fix (FTBFS, #1947281), rgw fix