diff --git a/.ceph.metadata b/.ceph.metadata
index fc4a646..e30ef94 100644
--- a/.ceph.metadata
+++ b/.ceph.metadata
@@ -1 +1 @@
-1f5ac965c1d358a0ea45c400d0196647696ba826  SOURCES/ceph-16.2.5.tar.gz
+bdff32b32a0ce20d168ac3f8ac38277a38bc46a0  SOURCES/ceph-16.2.6.tar.gz
diff --git a/SOURCES/0002-src-common-CMakeLists.txt.patch b/SOURCES/0002-src-common-CMakeLists.txt.patch
deleted file mode 100644
index e3252b3..0000000
--- a/SOURCES/0002-src-common-CMakeLists.txt.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
-index 65ba10b0f1..eeedc29c37 100644
---- a/src/common/CMakeLists.txt
-+++ b/src/common/CMakeLists.txt
-@@ -165,7 +165,7 @@ elseif(HAVE_ARMV8_CRC)
-     crc32c_aarch64.c)
- endif(HAVE_INTEL)
- 
--add_library(crc32 ${crc32_srcs})
-+add_library(crc32 STATIC ${crc32_srcs})
- if(HAVE_ARMV8_CRC)
-   set_target_properties(crc32 PROPERTIES
-     COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARMV8_CRC_COMPILE_FLAGS}")
diff --git a/SOURCES/0006-src-blk-CMakeLists.txt.patch b/SOURCES/0006-src-blk-CMakeLists.txt.patch
deleted file mode 100644
index 548f676..0000000
--- a/SOURCES/0006-src-blk-CMakeLists.txt.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ceph-16.1.0-43-g6b74fb5c/src/blk/CMakeLists.txt.orig	2021-02-01 08:16:26.719517641 -0500
-+++ ceph-16.1.0-43-g6b74fb5c/src/blk/CMakeLists.txt	2021-02-01 08:16:47.810092341 -0500
-@@ -25,7 +25,7 @@
-     zoned/HMSMRDevice.cc)
- endif()
- 
--add_library(blk ${libblk_srcs})
-+add_library(blk STATIC ${libblk_srcs})
- target_include_directories(blk PRIVATE "./")
- 
- if(HAVE_LIBAIO)
diff --git a/SOURCES/0009-librgw-notifications-initialize-kafka-and-amqp.patch b/SOURCES/0009-librgw-notifications-initialize-kafka-and-amqp.patch
deleted file mode 100644
index 17a12ae..0000000
--- a/SOURCES/0009-librgw-notifications-initialize-kafka-and-amqp.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 178f6bdac97b57300bbe0956633cf686a7e3ccee Mon Sep 17 00:00:00 2001
-From: Yuval Lifshitz <ylifshit@redhat.com>
-Date: Fri, 12 Mar 2021 08:56:45 +0200
-Subject: [PATCH] librgw/notifications: initialize kafka and amqp
-
-Fixes: https://tracker.ceph.com/issues/49738
-
-Signed-off-by: Yuval Lifshitz <ylifshit@redhat.com>
----
- src/rgw/librgw.cc | 23 +++++++++++++++++++++++
- 1 file changed, 23 insertions(+)
-
-diff --git a/src/rgw/librgw.cc b/src/rgw/librgw.cc
-index 012cc54c3b..a5351dbe7c 100644
---- a/src/rgw/librgw.cc
-+++ b/src/rgw/librgw.cc
-@@ -53,6 +53,12 @@
- #include "rgw_http_client.h"
- #include "rgw_http_client_curl.h"
- #include "rgw_perf_counters.h"
-+#ifdef WITH_RADOSGW_AMQP_ENDPOINT
-+#include "rgw_amqp.h"
-+#endif
-+#ifdef WITH_RADOSGW_KAFKA_ENDPOINT
-+#include "rgw_kafka.h"
-+#endif
- 
- #include "services/svc_zone.h"
- 
-@@ -617,6 +623,17 @@ namespace rgw {
-       /* ignore error */
-     }
- 
-+#ifdef WITH_RADOSGW_AMQP_ENDPOINT
-+    if (!rgw::amqp::init(cct.get())) {
-+      derr << "ERROR: failed to initialize AMQP manager" << dendl;
-+    }
-+#endif
-+#ifdef WITH_RADOSGW_KAFKA_ENDPOINT
-+    if (!rgw::kafka::init(cct.get())) {
-+      derr << "ERROR: failed to initialize Kafka manager" << dendl;
-+    }
-+#endif
-+
-     return 0;
-   } /* RGWLib::init() */
- 
-@@ -645,6 +662,12 @@ namespace rgw {
-     rgw_shutdown_resolver();
-     rgw_http_client_cleanup();
-     rgw::curl::cleanup_curl();
-+#ifdef WITH_RADOSGW_AMQP_ENDPOINT
-+    rgw::amqp::shutdown();
-+#endif
-+#ifdef WITH_RADOSGW_KAFKA_ENDPOINT
-+    rgw::kafka::shutdown();
-+#endif
- 
-     rgw_perf_stop(g_ceph_context);
- 
--- 
-2.26.2
-
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
new file mode 100644
index 0000000..58e34f2
--- /dev/null
+++ b/SOURCES/0014-rgw-Replace-boost-string_ref-view-with-std-string_vi.patch
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 0000000..667770d
--- /dev/null
+++ b/SOURCES/0015-src-kv-rocksdb_cache.patch
@@ -0,0 +1,296 @@
+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/SPECS/ceph.spec b/SPECS/ceph.spec
index 42a2a15..15ad6c1 100644
--- a/SPECS/ceph.spec
+++ b/SPECS/ceph.spec
@@ -34,7 +34,7 @@
 %endif
 %if 0%{?fedora} || 0%{?rhel}
 %bcond_without selinux
-%ifarch x86_64
+%ifarch x86_64 ppc64le
 %bcond_without rbd_rwl_cache
 %bcond_without rbd_ssd_cache
 %global _system_pmdk 1
@@ -53,6 +53,8 @@
 %bcond_without lttng
 %bcond_without libradosstriper
 %bcond_without ocf
+%global luarocks_package_name luarocks
+%bcond_without lua_packages
 %global _remote_tarball_prefix https://download.ceph.com/tarballs/
 %endif
 %if 0%{?suse_version}
@@ -77,6 +79,21 @@
 %if ! %{defined _fillupdir}
 %global _fillupdir /var/adm/fillup-templates
 %endif
+#luarocks
+%if 0%{?is_opensuse}
+# openSUSE
+%bcond_without lua_packages
+%if 0%{?sle_version}
+# openSUSE Leap
+%global luarocks_package_name lua53-luarocks
+%else
+# openSUSE Tumbleweed
+%global luarocks_package_name lua54-luarocks
+%endif
+%else
+# SLE
+%bcond_with lua_packages
+%endif
 %endif
 %bcond_with seastar
 %bcond_with jaeger
@@ -100,19 +117,6 @@
 %endif
 %endif
 
-%if 0%{?suse_version}
-%if !0%{?is_opensuse}
-# SLE does not support luarocks
-%bcond_with lua_packages
-%else
-%global luarocks_package_name lua53-luarocks
-%bcond_without lua_packages
-%endif
-%else
-%global luarocks_package_name luarocks
-%bcond_without lua_packages
-%endif
-
 %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
 %{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create}
 %{!?python3_pkgversion: %global python3_pkgversion 3}
@@ -126,8 +130,8 @@
 # main package definition
 #################################################################################
 Name:		ceph
-Version:	16.2.5
-Release:	2%{?dist}
+Version:	16.2.6
+Release:	1%{?dist}
 %if 0%{?fedora} || 0%{?rhel}
 Epoch:		2
 %endif
@@ -145,12 +149,11 @@ Group:		System/Filesystems
 URL:		http://ceph.com/
 Source0:	%{?_remote_tarball_prefix}ceph-%{version}.tar.gz
 Patch0001:	0001-src-common-crc32c_intel_fast.patch
-Patch0002:	0002-src-common-CMakeLists.txt.patch
 Patch0003:	0003-src-common-bitstr.h.patch
-Patch0006:	0006-src-blk-CMakeLists.txt.patch
 Patch0007:	0007-src-test-neorados-CMakeLists.txt.patch
 Patch0008:	0008-cmake-modules-Finduring.cmake.patch
-Patch0009:	0009-librgw-notifications-initialize-kafka-and-amqp.patch
+Patch0014:	0014-rgw-Replace-boost-string_ref-view-with-std-string_vi.patch
+Patch0015:	0015-src-kv-rocksdb_cache.patch
 Source1:	cmake-modules-BuildBoost.cmake.noautopatch
 # ceph 14.0.1 does not support 32-bit architectures, bugs #1727788, #1727787
 ExcludeArch:	i686 armv7hl
@@ -186,7 +189,6 @@ BuildRequires:	fuse3-devel
 # %%else
 BuildRequires:	gcc-c++
 # %%endif
-BuildRequires:	gdbm
 %if 0%{with tcmalloc}
 # libprofiler did not build on ppc64le until 2.7.90
 %if 0%{?fedora} || 0%{?rhel} >= 8
@@ -217,6 +219,7 @@ BuildRequires:	liboath-devel
 BuildRequires:	libtool
 BuildRequires:	libxml2-devel
 BuildRequires:	make
+BuildRequires:	libzstd-devel
 BuildRequires:	ncurses-devel
 BuildRequires:	libicu-devel
 BuildRequires:	parted
@@ -288,19 +291,17 @@ BuildRequires:	protobuf-devel
 BuildRequires:	ragel
 BuildRequires:	systemtap-sdt-devel
 BuildRequires:	yaml-cpp-devel
-BuildRequires:  gcc-toolset-9-libubsan-devel
-BuildRequires:  gcc-toolset-9-libasan-devel
-BuildRequires:  gcc-toolset-9-libatomic-devel
-# %%if 0%%{?fedora}
-# BuildRequires:  libubsan
-# BuildRequires:  libasan
-# BuildRequires:  libatomic
-# %%endif
-# %%if 0%%{?rhel}
-# BuildRequires:  gcc-toolset-9-libubsan-devel
-# BuildRequires:  gcc-toolset-9-libasan-devel
-# BuildRequires:  gcc-toolset-9-libatomic-devel
-# %%endif
+%if 0%{?fedora}
+BuildRequires:	libubsan
+BuildRequires:	libasan
+BuildRequires:	libatomic
+%endif
+%if 0%{?rhel}
+BuildRequires:	gcc-toolset-9-annobin
+BuildRequires:	gcc-toolset-9-libubsan-devel
+BuildRequires:	gcc-toolset-9-libasan-devel
+BuildRequires:	gcc-toolset-9-libatomic-devel
+%endif
 %endif
 #################################################################################
 # distro-conditional dependencies
@@ -342,7 +343,6 @@ BuildRequires:	openldap-devel
 #BuildRequires:	krb5-devel
 BuildRequires:	openssl-devel
 BuildRequires:	CUnit-devel
-BuildRequires:	redhat-lsb-core
 BuildRequires:	python%{python3_pkgversion}-devel
 BuildRequires:	python%{python3_pkgversion}-setuptools
 BuildRequires:	python%{python3_pkgversion}-Cython
@@ -354,6 +354,7 @@ BuildRequires:	lz4-devel >= 1.7
 %if 0%{with make_check}
 %if 0%{?fedora} || 0%{?rhel}
 BuildRequires:	golang-github-prometheus
+BuildRequires: jsonnet
 BuildRequires:	libtool-ltdl-devel
 BuildRequires:	xmlsec1
 BuildRequires:	xmlsec1-devel
@@ -371,6 +372,7 @@ 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
@@ -509,6 +511,7 @@ Requires:	libradosstriper1 = %{_epoch_prefix}%{version}-%{release}
 %if 0%{?suse_version}
 Requires(pre):	pwdutils
 %endif
+Requires:	systemd-udev
 %description -n ceph-common
 Common utilities to mount and interact with a ceph storage cluster.
 Comprised of files that are common to Ceph clients and servers.
@@ -1306,7 +1309,7 @@ mkdir build
 cd build
 %{cmake} .. \
     -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-    -DCMAKE_COLOR_MAKEFILE=OFF \
+    -DCMAKE_COLOR_MAKEFILE:BOOL=OFF \
     -DBUILD_CONFIG=rpmbuild \
     -DCMAKE_INSTALL_PREFIX=%{_prefix} \
     -DCMAKE_INSTALL_LIBDIR=%{_libdir} \
@@ -1341,10 +1344,10 @@ cd build
     -DWITH_OCF=ON \
 %endif
 %if 0%{?fedora}
-    -DWITH_SYSTEM_ROCKSDB=ON \
+    -DWITH_SYSTEM_ROCKSDB:BOOL=ON \
 %endif
-    -DWITH_SYSTEM_LIBURING=OFF \
-    -DWITH_SYSTEM_BOOST=OFF \
+    -DWITH_SYSTEM_LIBURING:BOOL=OFF \
+    -DWITH_SYSTEM_BOOST:BOOL=OFF \
 %if 0%{with cephfs_shell}
     -DWITH_CEPHFS_SHELL=ON \
 %endif
@@ -1380,11 +1383,15 @@ cd build
 %endif
     -DBOOST_J=$CEPH_SMP_NCPUS \
 %if 0%{with ceph_test_package}
-    -DWITH_SYSTEM_GTEST=ON \
+    -DWITH_SYSTEM_GTEST:BOOL=ON \
 %endif
 %if 0%{?_system_pmdk}
     -DWITH_SYSTEM_PMDK:BOOL=ON \
 %endif
+    -DWITH_SYSTEM_ZSTD:BOOL=ON \
+%if 0%{?rhel}
+    -DWITH_FMT_HEADER_ONLY:BOOL=ON \
+%endif
     -DWITH_GRAFANA=ON
 
 %if %{with cmake_verbose_logging}
@@ -1394,6 +1401,7 @@ cat ./CMakeFiles/CMakeError.log
 
 export VERBOSE=1
 export V=1
+export GCC_COLORS=
 make  "$CEPH_MFLAGS_JOBS"
 
 
@@ -2516,6 +2524,9 @@ exit 0
 %config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml
 
 %changelog
+* 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