]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common,mds: transmit SNAPDIR_VISIBILITY flag via SnapRealmInfoNew
authorDhairya Parmar <dparmar@redhat.com>
Wed, 6 Aug 2025 21:32:05 +0000 (03:02 +0530)
committerDhairya Parmar <dparmar@redhat.com>
Thu, 25 Sep 2025 16:41:08 +0000 (22:11 +0530)
at the time of building snap trace

Fixes: https://tracker.ceph.com/issues/71740
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
src/common/snap_types.cc
src/common/snap_types.h
src/mds/SnapRealm.cc

index ad0313bde706fb7530c3e7f525b4af459a88c05e..05b19846af62e4838659a75d68d60356100419da 100644 (file)
@@ -65,6 +65,7 @@ void SnapRealmInfoNew::encode(ceph::buffer::list& bl) const
   encode(info, bl);
   encode(last_modified, bl);
   encode(change_attr, bl);
+  encode(flags, bl);
   ENCODE_FINISH(bl);
 }
 
@@ -75,6 +76,7 @@ void SnapRealmInfoNew::decode(ceph::buffer::list::const_iterator& bl)
   decode(info, bl);
   decode(last_modified, bl);
   decode(change_attr, bl);
+  decode(flags, bl);
   DECODE_FINISH(bl);
 }
 
@@ -83,16 +85,17 @@ void SnapRealmInfoNew::dump(ceph::Formatter *f) const
   info.dump(f);
   f->dump_stream("last_modified") << last_modified;
   f->dump_unsigned("change_attr", change_attr);
+  f->dump_bool("is_snapdir_visible", flags & SNAPDIR_VISIBILITY);
 }
 
 std::list<SnapRealmInfoNew> SnapRealmInfoNew::generate_test_instances()
 {
   std::list<SnapRealmInfoNew> o;
   o.emplace_back();
-  o.push_back(SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 0), utime_t(), 0));
-  o.push_back(SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 0), utime_t(), 1));
+  o.push_back(SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 0), utime_t(), 0, 1));
+  o.push_back(SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 0), utime_t(), 1, 1));
   o.back().info.my_snaps.push_back(10);
-  o.push_back(SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 5), utime_t(), 2));
+  o.push_back(SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 5), utime_t(), 2, 1));
   o.back().info.my_snaps.push_back(10);
   o.back().info.prior_parent_snaps.push_back(3);
   o.back().info.prior_parent_snaps.push_back(5);
index 211958a9229351d7152115967f7fe0abf195d923..b194f7c43b01866e07e0b6aec702ff00a9f5e8b7 100644 (file)
@@ -51,15 +51,20 @@ struct SnapRealmInfoNew {
   SnapRealmInfo info;
   utime_t last_modified;
   uint64_t change_attr;
+  uint32_t flags;
+  enum {
+    SNAPDIR_VISIBILITY = 4,
+  };
 
   SnapRealmInfoNew() {
   }
 
-  SnapRealmInfoNew(const SnapRealmInfo &info_, utime_t last_modified_, uint64_t change_attr_) {
+  SnapRealmInfoNew(const SnapRealmInfo &info_, utime_t last_modified_, uint64_t change_attr_, __u32 flags_) {
     // FIPS zeroization audit 20191115: this memset is not security related.
     info = info_;
     last_modified = last_modified_;
     change_attr = change_attr_;
+    flags = flags_;
   }
 
   inodeno_t ino() const { return inodeno_t(info.h.ino); }
index 3e427c157af19edf19ed290c1f53effbb3e13b55..e8667fc83c2b75acd9bc0c4154dc1b25ac9bcf0c 100644 (file)
@@ -446,7 +446,8 @@ void SnapRealm::build_snap_trace() const
 
     dout(10) << "build_snap_trace my_snaps " << info.my_snaps << dendl;
 
-    SnapRealmInfoNew ninfo(info, srnode.last_modified, srnode.change_attr);
+    SnapRealmInfoNew ninfo(info, srnode.last_modified,
+                           srnode.change_attr, srnode.flags);
     encode(info, cached_snap_trace);
     encode(ninfo, cached_snap_trace_new);
     return;
@@ -481,7 +482,8 @@ void SnapRealm::build_snap_trace() const
     info.my_snaps.push_back(p->first);
   dout(10) << "build_snap_trace my_snaps " << info.my_snaps << dendl;
 
-  SnapRealmInfoNew ninfo(info, srnode.last_modified, srnode.change_attr);
+  SnapRealmInfoNew ninfo(info, srnode.last_modified,
+                         srnode.change_attr, srnode.flags);
 
   encode(info, cached_snap_trace);
   encode(ninfo, cached_snap_trace_new);