public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ceph] eln: Ceph 21.1.0 RC0
@ 2026-07-23 18:12 Kaleb S. KEITHLEY
  0 siblings, 0 replies; only message in thread
From: Kaleb S. KEITHLEY @ 2026-07-23 18:12 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/ceph
Branch : eln
Commit : b8a426e57e8ca9e095238b99682075a465c496d0
Author : Kaleb S. KEITHLEY <kkeithle@redhat.com>
Date   : 2026-07-23T14:12:20-04:00
Stats  : +658/-325 in 12 file(s)
URL    : https://src.fedoraproject.org/rpms/ceph/c/b8a426e57e8ca9e095238b99682075a465c496d0?branch=eln

Log:
Ceph 21.1.0 RC0

---
diff --git a/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch b/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
index 9cf4e6b..36a1944 100644
--- a/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
+++ b/0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
@@ -12,19 +12,16 @@ for IBT and SHSTK compatibility.
  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
+@@ -569,3 +569,12 @@
+ mask:  dq     0xFFFFFFFFFFFFFFFF, 0x0000000000000000
+ mask2: dq     0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF
+ mask3: dq     0x8080808080808080, 0x8080808080808080
 +
 +%ifidn __OUTPUT_FORMAT__, elf64
 +; inform linker that this doesn't require executable stack
@@ -38,17 +35,16 @@ diff --git a/src/isa-l/crc/crc32_gzip_refl_by8.asm b/src/isa-l/crc/crc32_gzip_re
 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
+ ;       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 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
@@ -72,10 +68,11 @@ 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
- 
+@@ -737,3 +737,12 @@
+ ;	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
@@ -105,66 +102,17 @@ diff --git a/src/isa-l/crc/crc32_ieee_by16_10.asm b/src/isa-l/crc/crc32_ieee_by1
 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
+@@ -606,3 +606,12 @@
+ dq 0x0706050403020100, 0x000e0d0c0b0a0908
+ dq 0x8080808080808080, 0x0f0e0d0c0b0a0908
+ dq 0x8080808080808080, 0x8080808080808080
 +
 +%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 0x00000004,0x00000010,0x00000005,0x00554e47 
 +DD 0xc0000002,0x00000004,0x00000003,0x00000000
 +%endif
 -- 

diff --git a/0016-src-tracing-patch b/0016-src-tracing-patch
deleted file mode 100644
index 228d93f..0000000
--- a/0016-src-tracing-patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- 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/0016-src-tracing.patch b/0016-src-tracing.patch
new file mode 100644
index 0000000..228d93f
--- /dev/null
+++ b/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/0018-src-rgw-store-dbstore-CMakeLists.txt.patch b/0018-src-rgw-store-dbstore-CMakeLists.txt.patch
index 874bbcd..904964e 100644
--- a/0018-src-rgw-store-dbstore-CMakeLists.txt.patch
+++ b/0018-src-rgw-store-dbstore-CMakeLists.txt.patch
@@ -6,10 +6,10 @@
  
 -add_library(dbstore_lib ${dbstore_srcs})
 +add_library(dbstore_lib STATIC ${dbstore_srcs})
- target_include_directories(dbstore_lib
-     PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
-     PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/store/rados"
-@@ -49,6 +49,7 @@
+ if(COMPILER_SUPPORTS_VLA_ERROR)
+   target_compile_options(dbstore_lib PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
+ endif()
+@@ -52,6 +52,7 @@
  
  # add pthread library
  set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} pthread)

diff --git a/0034-src-pybind-rbd-rbd.pyx.patch b/0034-src-pybind-rbd-rbd.pyx.patch
index 1f5ff7a..82f6b0f 100644
--- a/0034-src-pybind-rbd-rbd.pyx.patch
+++ b/0034-src-pybind-rbd-rbd.pyx.patch
@@ -1,8 +1,8 @@
---- ceph-18.1.2/src/pybind/rbd/rbd.pyx.orig	2023-07-21 13:30:08.156825317 -0400
-+++ ceph-18.1.2/src/pybind/rbd/rbd.pyx	2023-07-24 09:09:27.930137117 -0400
-@@ -371,10 +371,10 @@
-     cdef rados_ioctx_t convert_ioctx(rados.Ioctx ioctx) except? NULL:
-         return <rados_ioctx_t>ioctx.io
+--- ceph-20.3.0/src/pybind/rbd/rbd.pyx.orig	2026-03-11 07:32:09.000000000 -0400
++++ ceph-20.3.0/src/pybind/rbd/rbd.pyx	2026-03-17 14:03:14.089738661 -0400
+@@ -399,10 +399,10 @@
+     return <rados_ioctx_t>ioctx.io
+ {{endif}}
  
 -cdef int progress_callback(uint64_t offset, uint64_t total, void* ptr) with gil:
 +cdef int progress_callback(uint64_t offset, uint64_t total, void* ptr) noexcept with gil:
@@ -13,7 +13,7 @@
      return 0
  
  def cstr(val, name, encoding="utf-8", opt=False):
-@@ -426,7 +426,7 @@
+@@ -454,7 +454,7 @@
  
  cdef class Completion
  

diff --git a/0040-gcc-14.patch b/0040-gcc-14.patch
deleted file mode 100644
index 72dd5e8..0000000
--- a/0040-gcc-14.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From f5d3e9146d9ceb12858bc94d60090bd851b1c088 Mon Sep 17 00:00:00 2001
-From: Adam Emerson <aemerson@redhat.com>
-Date: Wed, 20 Dec 2023 13:51:21 -0500
-Subject: [PATCH] test/neorados: Use two fewer GTest internals
-
-To get coroutine tests working, I used some internals. Two of these
-are no longer available in newer versions. Since they can be
-implemented with regular old C++ features, use those.
-
-This fixes an FTBFS on Fedora Rawhide introduced in
-`35231f7251ed70d8d817ee7e727d9763669d101f`.
-
-Signed-off-by: Adam Emerson <aemerson@redhat.com>
----
- src/test/neorados/common_tests.h | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/src/test/neorados/common_tests.h b/src/test/neorados/common_tests.h
-index 9610f08f643f3..396432e417e84 100644
---- a/src/test/neorados/common_tests.h
-+++ b/src/test/neorados/common_tests.h
-@@ -391,10 +391,14 @@ class NeoRadosECTest : public NeoRadosTestBase {
-   public:                                                                      \
-     GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() = default;            \
-     ~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default;  \
--    GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name,    \
--							   test_name));        \
--    GTEST_DISALLOW_MOVE_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name,    \
--							   test_name));        \
-+    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)(			       \
-+      const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&) = delete;     \
-+    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)& operator =(	       \
-+      const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&) = delete;     \
-+    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)(			       \
-+      GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&&) = delete;	       \
-+    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)& operator =(	       \
-+      GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)&&) = delete;	       \
- 									       \
-   private:                                                                     \
-     boost::asio::awaitable<void> CoTestBody() override;                        \
-

diff --git a/0060-src-crimson-common-smp_helpers.h.patch b/0060-src-crimson-common-smp_helpers.h.patch
deleted file mode 100644
index c44f215..0000000
--- a/0060-src-crimson-common-smp_helpers.h.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- ceph-20.2.0/src/crimson/common/smp_helpers.h.orig	2025-12-04 10:38:34.906915674 -0500
-+++ ceph-20.2.0/src/crimson/common/smp_helpers.h	2025-12-04 10:38:45.200845804 -0500
-@@ -8,6 +8,7 @@
- #include <optional>
- #include <type_traits>
- #include <vector>
-+#include <coroutine>
- 
- #include <seastar/core/shared_future.hh>
- #include <seastar/core/smp.hh>

diff --git a/0061-gcc-16.patch b/0061-gcc-16.patch
deleted file mode 100644
index 2ba7bad..0000000
--- a/0061-gcc-16.patch
+++ /dev/null
@@ -1,70 +0,0 @@
---- ceph-20.2.0/src/common/Formatter.h.orig	2026-01-06 17:47:18.437014517 -0500
-+++ ceph-20.2.0/src/common/Formatter.h	2026-01-06 17:47:53.015404074 -0500
-@@ -12,6 +12,7 @@
- #include <memory>
- #include <vector>
- #include <stdarg.h>
-+#include <cstdint>
- #include <sstream>
- #include <map>
- #include <vector>
---- ceph-20.2.0/src/mds/Locker.cc.orig	2026-01-07 10:34:12.731210930 -0500
-+++ ceph-20.2.0/src/mds/Locker.cc	2026-01-07 10:34:35.627823155 -0500
-@@ -4489,7 +4489,7 @@
-       dout(7) << "handle_client_lease client." << client << " renew on " << *dn
- 	      << (!dn->lock.can_lease(client)?", revoking lease":"") << dendl;
-       if (dn->lock.can_lease(client)) {
--        auto reply = make_message<MClientLease>(*m);
-+        auto reply = ceph::make_message<MClientLease>(*m);
- 	int pool = 1;   // fixme.. do something smart!
- 	reply->h.duration_ms = (int)(1000 * mdcache->client_lease_durations[pool]);
- 	reply->h.seq = ++l->seq;
---- ceph-20.2.0/src/mds/Server.cc.orig	2026-01-07 11:27:13.532097596 -0500
-+++ ceph-20.2.0/src/mds/Server.cc	2026-01-07 11:28:42.411581266 -0500
-@@ -150,7 +150,7 @@
-       }
-     }
-     batch_reqs.clear();
--    server->reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
-+    server->reply_client_request(mdr, ceph::make_message<MClientReply>(*mdr->client_request, r));
-   }
-   void print(std::ostream& o) const override {
-     o << "[batch front=" << *mdr << "]";
-@@ -2142,7 +2142,7 @@
-       dout(20) << __func__ << ": batch head " << *mdr << dendl;
-       mdr->release_batch_op()->respond(r);
-     } else {
--     reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
-+     reply_client_request(mdr, ceph::make_message<MClientReply>(*mdr->client_request, r));
-     }
-   } else if (mdr->internal_op > -1) {
-     dout(10) << __func__ << ": completing with result " << cpp_strerror(r) << " on internal " << *mdr << dendl;
-@@ -2290,7 +2290,7 @@
-   }
- 
- 
--  auto reply = make_message<MClientReply>(*req, 0);
-+  auto reply = ceph::make_message<MClientReply>(*req, 0);
-   reply->set_unsafe();
- 
-   // mark xlocks "done", indicating that we are exposing uncommitted changes.
-@@ -2632,7 +2632,7 @@
- 	   req->get_op() != CEPH_MDS_OP_OPEN &&
- 	   req->get_op() != CEPH_MDS_OP_CREATE)) {
- 	dout(5) << "already completed " << req->get_reqid() << dendl;
--        auto reply = make_message<MClientReply>(*req, 0);
-+        auto reply = ceph::make_message<MClientReply>(*req, 0);
- 	if (created != inodeno_t()) {
- 	  bufferlist extra;
- 	  set_reply_extra_bl(req, created, extra);
---- ceph-20.2.0/src/mds/MDCache.cc.orig	2026-01-07 11:28:48.882470871 -0500
-+++ ceph-20.2.0/src/mds/MDCache.cc	2026-01-07 11:29:12.405069562 -0500
-@@ -10535,7 +10535,7 @@
- 
- 
-   CInode *cur = 0;
--  auto reply = make_message<MDiscoverReply>(*dis);
-+  auto reply = ceph::make_message<MDiscoverReply>(*dis);
- 
-   snapid_t snapid = dis->get_snapid();
- 

diff --git a/0065-src-os-memstore-CMakelists.txt.patch b/0065-src-os-memstore-CMakelists.txt.patch
new file mode 100644
index 0000000..d722b50
--- /dev/null
+++ b/0065-src-os-memstore-CMakelists.txt.patch
@@ -0,0 +1,10 @@
+--- ceph-20.3.0/src/os/memstore/CMakeLists.txt.orig	2026-03-17 11:19:40.790594587 -0400
++++ ceph-20.3.0/src/os/memstore/CMakeLists.txt	2026-03-17 11:19:49.669445856 -0400
+@@ -1,6 +1,6 @@
+ include(CheckCXXCompilerFlag)
+ 
+-add_library(memstore
++add_library(memstore STATIC
+   MemStore.cc)
+ target_link_libraries(memstore PRIVATE os)
+ check_cxx_compiler_flag("-Wno-maybe-uninitialized"

diff --git a/0066-src-lss-linux_syscall_support.h.patch b/0066-src-lss-linux_syscall_support.h.patch
new file mode 100644
index 0000000..d20ab11
--- /dev/null
+++ b/0066-src-lss-linux_syscall_support.h.patch
@@ -0,0 +1,21 @@
+--- ceph-21.1.0/src/lss/linux_syscall_support.h.orig	2026-07-21 16:44:58.567709280 -0400
++++ ceph-21.1.0/src/lss/linux_syscall_support.h	2026-07-21 16:46:45.498991029 -0400
+@@ -3461,6 +3461,7 @@
+       LSS_RETURN(int, __ret, __err);
+     }
+   #elif defined(__s390__)
++    #define __NR__socketcall  __NR_socketcall
+     #undef  LSS_REG
+     #define LSS_REG(r, a) register unsigned long __r##r __asm__("r"#r) = (unsigned long) a
+     #undef  LSS_BODY
+--- ceph-21.1.0/CMakeLists.txt.orig	2026-07-22 07:00:30.106561925 -0400
++++ ceph-21.1.0/CMakeLists.txt	2026-07-22 07:01:16.814626456 -0400
+@@ -558,7 +558,7 @@
+ # enable breakpad unless win32 or power
+ # ppc64le port tracked in https://issues.chromium.org/issues/41479970
+ CMAKE_DEPENDENT_OPTION(WITH_BREAKPAD "Build with Google Breakpad crash reporter" ON
+-  "NOT (WIN32 OR CMAKE_SYSTEM_PROCESSOR MATCHES ppc64le)" OFF)
++  "NOT (WIN32 OR CMAKE_SYSTEM_PROCESSOR MATCHES ppc64le OR CMAKE_SYSTEM_PROCESSOR MATCHES s390x)" OFF)
+ if(WITH_BREAKPAD)
+   set(HAVE_BREAKPAD ON)
+   message("-- Enabled Google Breakpad crash reporter")

diff --git a/ceph.spec b/ceph.spec
index 2c65ceb..f02509c 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -120,7 +120,7 @@
 %bcond_with lua_packages
 %endif
 %endif
-%bcond_with crimson
+%bcond_without crimson
 %if 0%{?suse_version}
 %bcond_with jaeger
 %else
@@ -177,6 +177,11 @@
 %global _find_debuginfo_dwz_opts %{nil}
 %endif
 %bcond_with sccache
+%if 0%{?rhel} && 0%{?rhel} >= 10
+%bcond_without pypkg
+%else
+%bcond_with pypkg
+%endif
 
 %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
 %{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create}
@@ -198,6 +203,18 @@
   [ $jobs -lt 1 ] && jobs=1 \
   echo $jobs )
 
+# $1==1: fresh install; $1==0: removal. Skip try-restart on upgrade ($1>1).
+%define ceph_mgr_module_scripts() \
+%post %1\
+if [ $1 -eq 1 ] ; then\
+    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :\
+fi\
+\
+%postun %1\
+if [ $1 -eq 1 ] ; then\
+    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :\
+fi
+
 %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
@@ -223,7 +240,7 @@
 # main package definition
 #################################################################################
 Name:		ceph
-Version:	20.2.2
+Version:	21.1.0
 Release:	1%{?dist}
 %if 0%{?fedora} || 0%{?rhel}
 Epoch:		2
@@ -246,7 +263,7 @@ Patch:		0003-src-common-bitstr.h.patch
 Patch:		0010-CET-Add-CET-marker-to-crc32c_intel_fast_zero_asm.s.patch
 Patch:		0011-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assembly-co.patch
 Patch:		0012-spdk-isa-l-CET-Add-CET-marker-to-x86-64-crc32-assemb.patch
-Patch:		0016-src-tracing-patch
+Patch:		0016-src-tracing.patch
 Patch:		0018-src-rgw-store-dbstore-CMakeLists.txt.patch
 Patch:		0024-gcc-13.patch
 Patch:		0032-cmake-modules-BuildBoost.cmake.patch
@@ -257,7 +274,8 @@ Patch:		0043_src_common_crc32c_ppc_asm.S.patch
 Patch:		0047-openssl-no-engine.patch
 Patch:		0049-src-rocksdb-db-blob-blob_file_meta.h.patch
 Patch:		0056-libarrow-20.0.0.patch
-Patch:		0061-gcc-16.patch
+Patch:		0065-src-os-memstore-CMakelists.txt.patch
+Patch:		0066-src-lss-linux_syscall_support.h.patch
 
 # ceph 14.0.1 does not support 32-bit architectures, bugs #1727788, #1727787
 ExcludeArch:	i686 armv7hl
@@ -284,7 +302,7 @@ BuildRequires:	selinux-policy-devel
 %endif
 BuildRequires:	gperf
 BuildRequires:	cmake > 3.5
-BuildRequires:	fuse3-devel
+BuildRequires:	pkgconfig(fuse3)
 %if 0%{with grpc}
 BuildRequires:	grpc-devel
 %endif
@@ -339,6 +357,8 @@ BuildRequires:	python%{python3_pkgversion}
 BuildRequires:	python%{python3_pkgversion}-devel
 BuildRequires:	python%{python3_pkgversion}-setuptools
 BuildRequires:	python%{python3_pkgversion}-Cython
+BuildRequires:	python%{python3_pkgversion}-pip
+BuildRequires:	python%{python3_pkgversion}-wheel
 BuildRequires:	snappy-devel
 BuildRequires:	sqlite-devel
 BuildRequires:	sudo
@@ -545,6 +565,8 @@ BuildRequires:	libnuma-devel
 %endif
 %endif
 BuildRequires:	python-rpm-macros
+# Catch2 v3 is catch in Fedora and EPEL. Crazy
+BuildRequires: catch-devel
 
 %description
 Ceph is a massively scalable, open-source, distributed storage system that runs
@@ -605,14 +627,39 @@ Requires:	which
 %if 0%{?weak_deps}
 Recommends:	podman >= 2.0.2
 %endif
+# Cephadm zipapp: CMake sets CEPHADM_BUNDLED_DEPENDENCIES to pip, rpm, or none
+# (see build / cmake block below):
+#  - with cephadm_bundling, with cephadm_pip_deps: pip at build, no stanzas here
+#  - with cephadm_bundling, without cephadm_pip_deps: build-time RPM deps only
+#  - without cephadm_bundling: unbundled cephadm, runtime Requires for yaml/jinja2
+# CentOS Storage SIG #75389 needs the unbundled branch (--without cephadm_bundling)
+# after dropping downstream patch 0036; pip-mode SIG builds are a separate SIG fix.
 %if 0%{with cephadm_bundling}
 %if 0%{without cephadm_pip_deps}
+# Zipapp built from system RPMs at build time; bundled zipapp is self-contained at runtime.
+# SUSE and RHEL/Fedora use different PyPI RPM names (Jinja2/PyYAML vs jinja2/pyyaml).
+%if 0%{?suse_version}
+BuildRequires:	python%{python3_pkgversion}-Jinja2 >= 2.10
+BuildRequires:	python%{python3_pkgversion}-PyYAML
+%else
 BuildRequires:	python%{python3_pkgversion}-jinja2 >= 2.10
+BuildRequires:	python%{python3_pkgversion}-pyyaml
 %endif
+%dnl suse/else: rpm bundle, distinct RPM names only (not duplicate stanzas)
+%endif
+%dnl end without cephadm_pip_deps (CEPHADM_BUNDLED_DEPENDENCIES=rpm)
+%else
+# Unbundled cephadm: host must provide yaml and jinja2 at runtime.
+%if 0%{?suse_version}
+Requires:	python%{python3_pkgversion}-Jinja2 >= 2.10
+Requires:	python%{python3_pkgversion}-PyYAML
 %else
 Requires:	python%{python3_pkgversion}-jinja2 >= 2.10
 Requires:	python%{python3_pkgversion}-pyyaml
 %endif
+%dnl suse/else: unbundled cephadm (CEPHADM_BUNDLED_DEPENDENCIES=none)
+%endif
+%dnl end with cephadm_bundling
 %description -n cephadm
 Utility to bootstrap a Ceph cluster and manage Ceph daemons deployed
 with systemd and podman.
@@ -698,11 +745,30 @@ Requires:	ceph-base = %{_epoch_prefix}%{version}-%{release}
 Requires:	ceph-mgr-modules-core = %{_epoch_prefix}%{version}-%{release}
 Requires:	libcephsqlite = %{_epoch_prefix}%{version}-%{release}
 %if 0%{?weak_deps}
+Recommends:	ceph-mgr-alerts = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-cephadm = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-cli-api = %{_epoch_prefix}%{version}-%{release}
 Recommends:	ceph-mgr-dashboard = %{_epoch_prefix}%{version}-%{release}
 Recommends:	ceph-mgr-diskprediction-local = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-influx = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-insights = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-iostat = %{_epoch_prefix}%{version}-%{release}
 Recommends:	ceph-mgr-k8sevents = %{_epoch_prefix}%{version}-%{release}
-Recommends:	ceph-mgr-cephadm = %{_epoch_prefix}%{version}-%{release}
-Recommends:	python%{python3_pkgversion}-influxdb
+Recommends:	ceph-mgr-localpool = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-mds-autoscaler = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-mirroring = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-nfs = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-nvmeof = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-osd-perf-query = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-osd-support = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-prometheus = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-rgw = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-selftest = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-smb = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-snap-schedule = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-stats = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-telegraf = %{_epoch_prefix}%{version}-%{release}
+Recommends:	ceph-mgr-test-orchestrator = %{_epoch_prefix}%{version}-%{release}
 %endif
 %description mgr
 ceph-mgr enables python modules that provide services (such as the REST
@@ -717,6 +783,7 @@ BuildArch:	noarch
 Group:		System/Filesystems
 %endif
 Requires:	ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-smb = %{_epoch_prefix}%{version}-%{release}
 Requires:	ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release}
 Requires:	ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release}
 %if 0%{?fedora} || 0%{?rhel}
@@ -769,18 +836,13 @@ BuildArch:	noarch
 %if 0%{?suse_version}
 Group:		System/Filesystems
 %endif
-Requires:	python%{python3_pkgversion}-bcrypt
-Requires:	python%{python3_pkgversion}-packaging
-Requires:	python%{python3_pkgversion}-pyOpenSSL
+Requires:	python%{python3_pkgversion}-prettytable
 Requires:	python%{python3_pkgversion}-requests
 Requires:	python%{python3_pkgversion}-dateutil
-Requires:	python%{python3_pkgversion}-setuptools
 %if 0%{?fedora} || 0%{?rhel}
-Requires:	python%{python3_pkgversion}-cherrypy
 Requires:	python%{python3_pkgversion}-pyyaml
 %endif
 %if 0%{?suse_version}
-Requires:	python%{python3_pkgversion}-CherryPy
 Requires:	python%{python3_pkgversion}-PyYAML
 %endif
 %if 0%{?weak_deps}
@@ -790,6 +852,38 @@ Recommends:	ceph-mgr-rook = %{_epoch_prefix}%{version}-%{release}
 ceph-mgr-modules-core provides a set of modules which are always
 enabled by ceph-mgr.
 
+%package mgr-modules-standard
+BuildArch:	noarch
+Summary:	Ceph Manager modules without heavy external dependencies
+%if 0%{?suse_version}
+Group:		System/Filesystems
+%endif
+Requires:	ceph-mgr-modules-core = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-alerts = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-influx = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-insights = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-iostat = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-localpool = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-mds-autoscaler = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-mirroring = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-nfs = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-nvmeof = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-osd-perf-query = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-osd-support = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-prometheus = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-rgw = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-selftest = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-smb = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-snap-schedule = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-stats = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-telegraf = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-test-orchestrator = %{_epoch_prefix}%{version}-%{release}
+%description mgr-modules-standard
+ceph-mgr-modules-standard is a meta-package with no files of its own.
+It pulls in the full set of ceph-mgr modules that were formerly shipped
+together in ceph-mgr-modules-core, so that existing users or scripts
+that want the complete standard module set can depend on a single package.
+
 %package mgr-rook
 BuildArch:	noarch
 Summary:	Ceph Manager module for Rook-based orchestration
@@ -797,6 +891,7 @@ Summary:	Ceph Manager module for Rook-based orchestration
 Group:		System/Filesystems
 %endif
 Requires:	ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Requires:	ceph-mgr-nfs = %{_epoch_prefix}%{version}-%{release}
 Requires:	python%{python3_pkgversion}-kubernetes
 Requires:	python%{python3_pkgversion}-jsonpatch
 %description mgr-rook
@@ -839,6 +934,255 @@ Requires:	python%{python3_pkgversion}-jinja2
 ceph-mgr-cephadm is a ceph-mgr module for orchestration functions using
 the integrated cephadm deployment tool management operations.
 
+%package mgr-cli-api
+BuildArch:      noarch
+Summary:        Ceph Manager module providing a CLI REST API
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+%description mgr-cli-api
+ceph-mgr-cli-api is a ceph-mgr module that provides a REST-like API
+for the Ceph command-line interface.
+
+%package mgr-alerts
+BuildArch:      noarch
+Summary:        Ceph Manager module for sending alerts on health state changes
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-alerts
+ceph-mgr-alerts is a ceph-mgr module that sends email notifications
+on cluster health state changes.
+
+%package mgr-influx
+BuildArch:      noarch
+Summary:        Ceph Manager module for sending metrics to InfluxDB
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+%if 0%{?weak_deps}
+Recommends:     python%{python3_pkgversion}-influxdb
+%endif
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-influx
+ceph-mgr-influx is a ceph-mgr module that sends performance metrics
+to an InfluxDB time-series database.
+
+%package mgr-insights
+BuildArch:      noarch
+Summary:        Ceph Manager module for recording cluster health history
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-insights
+ceph-mgr-insights is a ceph-mgr module that records cluster health
+history to support cluster analysis.
+
+%package mgr-iostat
+BuildArch:      noarch
+Summary:        Ceph Manager module for displaying I/O statistics
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-iostat
+ceph-mgr-iostat is a ceph-mgr module that displays a running summary
+of I/O statistics across the cluster.
+
+%package mgr-localpool
+BuildArch:      noarch
+Summary:        Ceph Manager module for creating per-host CRUSH rules and pools
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-localpool
+ceph-mgr-localpool is a ceph-mgr module that automatically creates
+per-host CRUSH rules and pools.
+
+%package mgr-mds-autoscaler
+BuildArch:      noarch
+Summary:        Ceph Manager module for automatically scaling MDS daemons
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-mds-autoscaler
+ceph-mgr-mds-autoscaler is a ceph-mgr module that automatically scales
+the number of MDS daemons based on file system needs.
+
+%package mgr-mirroring
+BuildArch:      noarch
+Summary:        Ceph Manager module for managing CephFS mirroring
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-mirroring
+ceph-mgr-mirroring is a ceph-mgr module that provides management
+commands for CephFS mirroring.
+
+%package mgr-nfs
+BuildArch:      noarch
+Summary:        Ceph Manager module for managing NFS gateway deployments
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-nfs
+ceph-mgr-nfs is a ceph-mgr module that manages NFS gateway deployments
+on top of CephFS and RGW.
+
+%package mgr-nvmeof
+BuildArch:      noarch
+Summary:        Ceph Manager module for managing NVMe-oF gateway deployments
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-nvmeof
+ceph-mgr-nvmeof is a ceph-mgr module that manages NVMe-oF gateway
+deployments for Ceph RBD.
+
+%package mgr-osd-perf-query
+BuildArch:      noarch
+Summary:        Ceph Manager module for OSD performance counter queries
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Requires:       python%{python3_pkgversion}-prettytable
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-osd-perf-query
+ceph-mgr-osd-perf-query is a ceph-mgr module that exposes OSD
+performance counter query functionality.
+
+%package mgr-osd-support
+BuildArch:      noarch
+Summary:        Ceph Manager module for additional OSD management commands
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-osd-support
+ceph-mgr-osd-support is a ceph-mgr module that provides additional
+OSD management commands.
+
+%package mgr-prometheus
+BuildArch:      noarch
+Summary:        Ceph Manager module for exposing metrics to Prometheus
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler}
+Requires:       python%{python3_pkgversion}-cherrypy
+%endif
+%if 0%{?suse_version}
+Requires:       python%{python3_pkgversion}-CherryPy
+%endif
+%description mgr-prometheus
+ceph-mgr-prometheus is a ceph-mgr module that exposes cluster metrics
+in Prometheus exposition format.
+
+%package mgr-rgw
+BuildArch:      noarch
+Summary:        Ceph Manager module for RADOS Gateway management
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-rgw
+ceph-mgr-rgw is a ceph-mgr module that provides management and status
+commands for the RADOS Gateway.
+
+%package mgr-selftest
+BuildArch:      noarch
+Summary:        Ceph Manager module for testing the manager framework
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-selftest
+ceph-mgr-selftest is a ceph-mgr module used for testing the manager
+framework.
+
+%package mgr-smb
+BuildArch:      noarch
+Summary:        Ceph Manager module for managing SMB gateway deployments
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-smb
+ceph-mgr-smb is a ceph-mgr module that manages SMB gateway
+deployments on Ceph.
+
+%package mgr-snap-schedule
+BuildArch:      noarch
+Summary:        Ceph Manager module for automated CephFS snapshot schedules
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-snap-schedule
+ceph-mgr-snap-schedule is a ceph-mgr module that manages automated
+CephFS snapshot schedules.
+
+%package mgr-stats
+BuildArch:      noarch
+Summary:        Ceph Manager module for exposing file system client I/O statistics
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-stats
+ceph-mgr-stats is a ceph-mgr module that exposes file system client
+I/O statistics.
+
+%package mgr-telegraf
+BuildArch:      noarch
+Summary:        Ceph Manager module for sending metrics to Telegraf
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-telegraf
+ceph-mgr-telegraf is a ceph-mgr module that sends performance metrics
+to a Telegraf agent.
+
+%package mgr-test-orchestrator
+BuildArch:      noarch
+Summary:        Ceph Manager module for testing the orchestrator framework
+%if 0%{?suse_version}
+Group:          System/Filesystems
+%endif
+Requires:       ceph-mgr = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:      ceph-mgr-modules-core < %{_epoch_prefix}%{version}-%{release}
+%description mgr-test-orchestrator
+ceph-mgr-test-orchestrator is a ceph-mgr module used for testing the
+orchestrator framework.
+
 %package fuse
 Summary:	Ceph fuse-based client
 %if 0%{?suse_version}
@@ -963,26 +1307,47 @@ Summary:	Ceph Object Storage Daemon
 Group:		System/Filesystems
 %endif
 Requires:	ceph-base = %{_epoch_prefix}%{version}-%{release}
-Requires:	sudo
-Requires:	libstoragemgmt
+Requires:	ceph-osd-classic = %{_epoch_prefix}%{version}-%{release}
 %if 0%{with crimson}
-Requires:	protobuf
+Requires:	protobuf3
+Requires:	ceph-osd-crimson = %{_epoch_prefix}%{version}-%{release}
 %endif
+Requires:	sudo
+Requires:	libstoragemgmt
 %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 provides components shared between classic and crimson OSD
+implementations. It requires either the classic or crimson OSD
+to provide the core OSD daemon.
+
+%package osd-classic
+Summary:	Ceph Object Storage Daemon (classic)
+%if 0%{?suse_version}
+Group: System/Filesystems
+%endif
+Requires:	ceph-osd = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:	ceph-osd < %{_epoch_prefix}%{version}-%{release}
+# libcares.so.2 doesn't carry the version, and only EL crosses 1.28 between a
+# rolling builder and a frozen older minor, so pin the c-ares floor there.
+%if 0%{?rhel} >= 10
+Requires:	c-ares%{?_isa} >= 1.28.0
+%endif
+%description osd-classic
+classic-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.
 
 %if 0%{with crimson}
-%package crimson-osd
+%package osd-crimson
 Summary:	Ceph Object Storage Daemon (crimson)
 %if 0%{?suse_version}
 Group:		System/Filesystems
 %endif
 Requires:	ceph-osd = %{_epoch_prefix}%{version}-%{release}
+Obsoletes:	ceph-osd = %{_epoch_prefix}%{version}-%{release}
 Requires:	binutils
 %description crimson-osd
 crimson-osd is the object storage daemon for the Ceph distributed file
@@ -1290,6 +1655,9 @@ descriptions, and submitting the command to the appropriate daemon.
 Summary:	Python 3 utility libraries for Ceph
 %if 0%{?fedora} || 0%{?rhel}
 Requires:	python%{python3_pkgversion}-pyyaml
+%if %{with pypkg}
+Recommends:	python%{python3_pkgversion}-ceph-smb-ctl
+%endif
 %endif
 %if 0%{?suse_version}
 Requires:	python%{python3_pkgversion}-PyYAML
@@ -1439,6 +1807,22 @@ Group:		System/Monitoring
 This package provides a Ceph hardware monitoring agent.
 %endif
 
+%if %{with pypkg}
+%package -n python%{python3_pkgversion}-ceph-smb-ctl
+Summary:	Ceph SMB Service Remote-Control Client
+BuildArch:	noarch
+%if 0%{?suse_version}
+Group:		System/Filesystems
+%endif
+Requires:	python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release}
+Requires:	python%{python3_pkgversion}-grpcio
+Requires:	python%{python3_pkgversion}-grpcio-reflection
+%description -n python%{python3_pkgversion}-ceph-smb-ctl
+This package provides a tool to interact with Ceph's SMB Service Remote-Control
+gRPC API as a client.
+%endif
+%dnl end package python%{python3_pkgversion}-ceph-smb-ctl
+
 #################################################################################
 # common
 #################################################################################
@@ -1504,6 +1888,7 @@ env | sort
 %if 0%{without ceph_test_package}
     -DWITH_TESTS:BOOL=OFF \
 %endif
+    -DWITH_SYSTEM_CATCH2=ON \
 %if 0%{with cephfs_java}
     -DJAVA_HOME=%{java_home} \
     -DJAVA_LIB_INSTALL_DIR=%{_jnidir} \
@@ -1602,6 +1987,9 @@ env | sort
 %if %{with sccache}
     -DWITH_SCCACHE=ON \
 %endif
+%if 0%{with pypkg}
+    -DWITH_PYPKG:BOOL=ON \
+%endif
 %ifarch aarch64
     -DWITH_UADK:BOOL=OFF \
 %endif
@@ -1655,8 +2043,8 @@ export GCC_COLORS=
 rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph
 
 %if 0%{with crimson}
-# package crimson-osd with the name of ceph-osd
-install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd
+mv %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd-crimson
+mv %{buildroot}%{_bindir}/ceph-osd %{buildroot}%{_bindir}/ceph-osd-classic
 %endif
 
 install -m 0644 -D src/etc-rbdmap %{buildroot}%{_sysconfdir}/ceph/rbdmap
@@ -1738,7 +2126,14 @@ install -m 644 -D -t %{buildroot}%{_datadir}/snmp/mibs monitoring/snmp/CEPH-MIB.
 
 %else
 
-# Remove the rbd/fuse bits
+# Remove the ceph-test bits
+# N.B. why is this, but no other ceph-test binary installed
+rm -f %{buildroot}%{_bindir}/ceph_ec_consistency_checker
+
+# Remove the ceph-exporter package
+rm -f %{buildroot}%{_unitdir}/ceph-exporter@.service
+
+# Remove the rbd-fuse bits
 rm -f %{buildroot}%{_bindir}/ceph-fuse
 rm -f %{buildroot}%{_mandir}/man8/ceph-fuse.8*
 rm -f %{buildroot}%{_sbindir}/mount.fuse.ceph
@@ -1804,19 +2199,25 @@ rm -f %{buildroot}%{_unitdir}/ceph-radosgw@.service
 rm -f %{buildroot}%{_unitdir}/ceph-radosgw.target
 
 # Remove the ceph-osd package
+rm -f %{buildroot}%{_bindir}/ceph-osd
 rm -f %{buildroot}%{_bindir}/ceph-clsinfo
-rm -f %{buildroot}%{_bindir}/ceph-bluestore-tool
 rm -f %{buildroot}%{_bindir}/ceph-erasure-code-tool
-rm -f %{buildroot}%{_bindir}/ceph-objectstore-tool
-rm -f %{buildroot}%{_bindir}/ceph-osdomap-tool
-rm -f %{buildroot}%{_bindir}/ceph-osd
 rm -f %{buildroot}%{_libexecdir}/ceph/ceph-osd-prestart.sh
 rm -f %{buildroot}%{_mandir}/man8/ceph-clsinfo.8*
 rm -f %{buildroot}%{_mandir}/man8/ceph-osd.8*
-rm -f %{buildroot}%{_mandir}/man8/ceph-bluestore-tool.8*
 rm -f %{buildroot}%{_unitdir}/ceph-osd@.service
 rm -f %{buildroot}%{_unitdir}/ceph-osd.target
 
+# Remove the ceph-osd-classic package
+rm -f %{buildroot}%{_bindir}/ceph-bluestore-tool
+rm -f %{buildroot}%{_bindir}/ceph-objectstore-tool
+rm -f %{buildroot}%{_bindir}/ceph-osd-classic
+rm -f %{buildroot}%{_mandir}/man8/ceph-bluestore-tool.8*
+
+# Remove the ceph-osd-crimson package
+rm -f %{buildroot}%{_bindir}/ceph-osd-crimson
+rm -f %{buildroot}%{_bindir}/ceph-crimson-objectstore-tool
+
 # Remove rbd-mirror
 rm -f %{buildroot}%{_bindir}/rbd-mirror
 rm -f %{buildroot}%{_mandir}/man8/rbd-mirror.8*
@@ -1993,6 +2394,7 @@ exit 0
 %{_bindir}/cephfs-data-scan
 %{_bindir}/cephfs-journal-tool
 %{_bindir}/cephfs-table-tool
+%{_bindir}/cephfs-tool
 %{_bindir}/crushdiff
 %{_bindir}/rados
 %if 0%{with radosgw}
@@ -2090,13 +2492,6 @@ exit 0
 %post common
 %tmpfiles_create %{_tmpfilesdir}/ceph-common.conf
 
-%postun common
-# Package removal cleanup
-if [ "$1" -eq "0" ] ; then
-    rm -rf %{_localstatedir}/log/ceph
-    rm -rf %{_sysconfdir}/ceph
-fi
-
 %if 0%{with server}
 
 %files mds
@@ -2190,98 +2585,142 @@ fi
 %files mgr-dashboard
 %{_datadir}/ceph/mgr/dashboard
 
-%post mgr-dashboard
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
-
-%postun mgr-dashboard
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
+%ceph_mgr_module_scripts mgr-dashboard
 
 %files mgr-diskprediction-local
 %{_datadir}/ceph/mgr/diskprediction_local
 
-%post mgr-diskprediction-local
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
-
-%postun mgr-diskprediction-local
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
+%ceph_mgr_module_scripts mgr-diskprediction-local
 
 %files mgr-modules-core
 %dir %{_datadir}/ceph/mgr
-%{_datadir}/ceph/mgr/alerts
 %{_datadir}/ceph/mgr/balancer
 %{_datadir}/ceph/mgr/crash
 %{_datadir}/ceph/mgr/devicehealth
+%{_datadir}/ceph/mgr/orchestrator
+%{_datadir}/ceph/mgr/pg_autoscaler
+%{_datadir}/ceph/mgr/progress
+%{_datadir}/ceph/mgr/rbd_support
+%{_datadir}/ceph/mgr/status
+%{_datadir}/ceph/mgr/telemetry
+%{_datadir}/ceph/mgr/volumes
+
+%files mgr-modules-standard
+
+%files mgr-alerts
+%{_datadir}/ceph/mgr/alerts
+
+%ceph_mgr_module_scripts mgr-alerts
+
+%files mgr-influx
 %{_datadir}/ceph/mgr/influx
+
+%ceph_mgr_module_scripts mgr-influx
+
+%files mgr-insights
 %{_datadir}/ceph/mgr/insights
+
+%ceph_mgr_module_scripts mgr-insights
+
+%files mgr-iostat
 %{_datadir}/ceph/mgr/iostat
+
+%ceph_mgr_module_scripts mgr-iostat
+
+%files mgr-localpool
 %{_datadir}/ceph/mgr/localpool
+
+%ceph_mgr_module_scripts mgr-localpool
+
+%files mgr-mds-autoscaler
 %{_datadir}/ceph/mgr/mds_autoscaler
+
+%ceph_mgr_module_scripts mgr-mds-autoscaler
+
+%files mgr-mirroring
 %{_datadir}/ceph/mgr/mirroring
+
+%ceph_mgr_module_scripts mgr-mirroring
+
+%files mgr-nfs
 %{_datadir}/ceph/mgr/nfs
-%{_datadir}/ceph/mgr/orchestrator
+
+%ceph_mgr_module_scripts mgr-nfs
+
+%files mgr-nvmeof
+%{_datadir}/ceph/mgr/nvmeof
+
+%ceph_mgr_module_scripts mgr-nvmeof
+
+%files mgr-osd-perf-query
 %{_datadir}/ceph/mgr/osd_perf_query
+
+%ceph_mgr_module_scripts mgr-osd-perf-query
+
+%files mgr-osd-support
 %{_datadir}/ceph/mgr/osd_support
-%{_datadir}/ceph/mgr/pg_autoscaler
-%{_datadir}/ceph/mgr/progress
+
+%ceph_mgr_module_scripts mgr-osd-support
+
+%files mgr-prometheus
 %{_datadir}/ceph/mgr/prometheus
-%{_datadir}/ceph/mgr/rbd_support
+
+%ceph_mgr_module_scripts mgr-prometheus
+
+%files mgr-rgw
 %{_datadir}/ceph/mgr/rgw
+
+%ceph_mgr_module_scripts mgr-rgw
+
+%files mgr-selftest
 %{_datadir}/ceph/mgr/selftest
+
+%ceph_mgr_module_scripts mgr-selftest
+
+%files mgr-smb
 %{_datadir}/ceph/mgr/smb
+
+%ceph_mgr_module_scripts mgr-smb
+
+%files mgr-snap-schedule
 %{_datadir}/ceph/mgr/snap_schedule
+
+%ceph_mgr_module_scripts mgr-snap-schedule
+
+%files mgr-stats
 %{_datadir}/ceph/mgr/stats
-%{_datadir}/ceph/mgr/status
+
+%ceph_mgr_module_scripts mgr-stats
+
+%files mgr-telegraf
 %{_datadir}/ceph/mgr/telegraf
-%{_datadir}/ceph/mgr/telemetry
+
+%ceph_mgr_module_scripts mgr-telegraf
+
+%files mgr-test-orchestrator
 %{_datadir}/ceph/mgr/test_orchestrator
-%{_datadir}/ceph/mgr/volumes
+
+%ceph_mgr_module_scripts mgr-test-orchestrator
 
 %files mgr-rook
 %{_datadir}/ceph/mgr/rook
 
-%post mgr-rook
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
-
-%postun mgr-rook
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
+%ceph_mgr_module_scripts mgr-rook
 
 %files mgr-k8sevents
 %{_datadir}/ceph/mgr/k8sevents
 
-%post mgr-k8sevents
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
-
-%postun mgr-k8sevents
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
+%ceph_mgr_module_scripts mgr-k8sevents
 
 %files mgr-cephadm
 %{_datadir}/ceph/mgr/cephadm
 
-%post mgr-cephadm
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
+%ceph_mgr_module_scripts mgr-cephadm
 
-%postun mgr-cephadm
-if [ $1 -eq 1 ] ; then
-    /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || :
-fi
+%files mgr-cli-api
+%{_datadir}/ceph/mgr/cli_api
+
+%ceph_mgr_module_scripts mgr-cli-api
 
 %files mon
 %{_bindir}/ceph-mon
@@ -2378,9 +2817,9 @@ if [ $1 -ge 1 ] ; then
   fi
 fi
 
-%files -n ceph-exporter
+%files exporter
 %{_bindir}/ceph-exporter
-%{_unitdir}/ceph-exporter.service
+%{_unitdir}/ceph-exporter@.service
 
 %files -n rbd-fuse
 %{_bindir}/rbd-fuse
@@ -2527,19 +2966,15 @@ fi
 
 %files osd
 %{_bindir}/ceph-clsinfo
-%{_bindir}/ceph-bluestore-tool
 %{_bindir}/ceph-erasure-code-tool
-%{_bindir}/ceph-objectstore-tool
-%{_bindir}/ceph-osd
 %{_libexecdir}/ceph/ceph-osd-prestart.sh
 %{_mandir}/man8/ceph-clsinfo.8*
 %{_mandir}/man8/ceph-osd.8*
-%{_mandir}/man8/ceph-bluestore-tool.8*
 %{_unitdir}/ceph-osd@.service
 %{_unitdir}/ceph-osd.target
-%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
@@ -2576,11 +3011,37 @@ if [ $1 -ge 1 ] ; then
   fi
 fi
 
+%files osd-classic
+%{_bindir}/ceph-bluestore-tool
+%{_bindir}/ceph-objectstore-tool
+%{_bindir}/ceph-osd-classic
+%{_mandir}/man8/ceph-bluestore-tool.8*
+%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/osd
+
 %if 0%{with crimson}
-%files crimson-osd
-%{_bindir}/crimson-osd
+%files osd-crimson
+%{_bindir}/ceph-osd-crimson
+%{_bindir}/crimson-objectstore-tool
+
+%posttrans osd-crimson
+%{_sbindir}/update-alternatives --install %{_bindir}/ceph-osd ceph-osd \
+    %{_bindir}/ceph-osd-crimson 50
+
+%preun osd-crimson
+if [ $1 -eq 0 ]; then
+    ${_sbindir}/update-alternatives --remove ceph-osd %{_bindir}/ceph-osd-crimson
+fi
 %endif
 
++%posttrans osd-classic
+%{_sbindir}/update-alternatives --install %{_bindir}/ceph-osd ceph-osd \
+    %{_bindir}/ceph-osd-classic 100
+
+%preun osd-classic
+if [ $1 -eq 0 ]; then
+    ${_sbindir}/update-alternatives --remove ceph-osd %{_bindir}/ceph-osd-classic
+fi
+
 %files volume
 %{_sbindir}/ceph-volume
 %{_sbindir}/ceph-volume-systemd
@@ -2667,10 +3128,12 @@ fi
 %{_includedir}/rados/librados_fwd.hpp
 %{_includedir}/rados/page.h
 %{_includedir}/rados/rados_types.hpp
+%{_includedir}/rados/cls_flags.hpp
+%{_includedir}/rados/cls_traits.hpp
 
 %files -n python%{python3_pkgversion}-rados
 %{python3_sitearch}/rados.cpython*.so
-%{python3_sitearch}/rados-*.egg-info
+%{python3_sitearch}/rados-*.dist-info
 
 %files -n libcephsqlite
 %{_libdir}/libcephsqlite.so
@@ -2736,13 +3199,13 @@ fi
 
 %files -n python%{python3_pkgversion}-rgw
 %{python3_sitearch}/rgw.cpython*.so
-%{python3_sitearch}/rgw-*.egg-info
+%{python3_sitearch}/rgw-*.dist-info
 
 %endif
 
 %files -n python%{python3_pkgversion}-rbd
 %{python3_sitearch}/rbd.cpython*.so
-%{python3_sitearch}/rbd-*.egg-info
+%{python3_sitearch}/rbd-*.dist-info
 
 %files -n libcephfs2
 %{_libdir}/libcephfs.so.*
@@ -2767,13 +3230,16 @@ fi
 %{_includedir}/cephfs/types.h
 %dir %{_includedir}/cephfs/metrics
 %{_includedir}/cephfs/metrics/Types.h
+%{_includedir}/cephfs/dump.h
+%{_includedir}/cephfs/json.h
+%{_includedir}/cephfs/keys_and_values.h
 %{_libdir}/libcephfs.so
 %{_libdir}/libcephfs_proxy.so
 %{_libdir}/pkgconfig/cephfs.pc
 
 %files -n python%{python3_pkgversion}-cephfs
 %{python3_sitearch}/cephfs.cpython*.so
-%{python3_sitearch}/cephfs-*.egg-info
+%{python3_sitearch}/cephfs-*.dist-info
 
 %files -n python%{python3_pkgversion}-ceph-argparse
 %{python3_sitelib}/ceph_argparse.py
@@ -2783,7 +3249,7 @@ fi
 
 %files -n python%{python3_pkgversion}-ceph-common
 %{python3_sitelib}/ceph
-%{python3_sitelib}/ceph-*.egg-info
+%{python3_sitelib}/ceph-*.%{?with_pypkg:dist}%{!?with_pypkg:egg}-info
 
 %if 0%{with cephfs_shell}
 %files -n cephfs-shell
@@ -2800,19 +3266,19 @@ fi
 %endif
 
 %if 0%{with ceph_test_package}
-%files -n ceph-test
+%files test
 %{_bindir}/ceph-client-debug
 %{_bindir}/ceph_bench_log
 %{_bindir}/ceph_multi_stress_watch
 %{_bindir}/ceph_erasure_code_benchmark
 %{_bindir}/ceph_omapbench
 %{_bindir}/ceph_objectstore_bench
+%{_bindir}/ceph_ec_consistency_checker
 %{_bindir}/ceph_perf_objectstore
 %{_bindir}/ceph_perf_local
 %{_bindir}/ceph_perf_msgr_client
 %{_bindir}/ceph_perf_msgr_server
 %{_bindir}/ceph_psim
-%{_bindir}/ceph_radosacl
 %{_bindir}/ceph_rgw_jsonparser
 %{_bindir}/ceph_rgw_multiparser
 %{_bindir}/ceph_scratchtool
@@ -2824,6 +3290,7 @@ fi
 %{_bindir}/ceph-dedup-daemon
 %if 0%{with crimson}
 %{_bindir}/crimson-store-nbd
+%{_bindir}/crimson-store-bench
 %endif
 %{_mandir}/man8/ceph-debugpack.8*
 %dir %{_libdir}/ceph
@@ -2982,7 +3449,15 @@ exit 0
 %{python3_sitelib}/ceph_node_proxy-*
 %endif
 
+%if %{with pypkg}
+%files -n python%{python3_pkgversion}-ceph-smb-ctl
+%{_bindir}/ceph-smb-ctl
+%endif
+
 %changelog
+* Thu Jul 23 2026 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:21.1.0-1
+- ceph-21.1.0 GA
+
 * Tue Jun 23 2026 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:20.2.2-1
 - ceph-20.2.2 GA
 

diff --git a/sources b/sources
index ebb0115..a5ffe0f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (ceph-20.2.2.tar.gz) = 1977f384d2af5fde2a795e2eed71c12f519f1a2036ceb2e383c8534feca509740d744e99e77b73488f8e13193a83c7134e407fb6b21c4ba4c1f9ac9752b16fbc
+SHA512 (ceph-21.1.0.tar.gz) = 23e0c3904cb043d267c53c608ebee4f933aa63d5b09a9038a2d024d13bb3fbd92b470973c53fff5392e21fe023f28b832617dbc1d53aad5d62d1ae9f2a2e007f

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-07-23 18:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-23 18:12 [rpms/ceph] eln: Ceph 21.1.0 RC0 Kaleb S. KEITHLEY

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox