]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: encode flags for all inode types 57179/head
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 16 Apr 2024 01:12:51 +0000 (21:12 -0400)
committerPatrick Donnelly <pdonnell@redhat.com>
Tue, 30 Apr 2024 17:38:25 +0000 (13:38 -0400)
Inode flag F_QUIESCE_BLOCK would not be encoded for regular files.
Unfortunately we're encoding the value twice for directories but it's a
small overhead.

Fixes: https://tracker.ceph.com/issues/65518
Fixes: fb05dd1806fc0edf2e4c0908aae114d57099a6d6
Fixes: e2529fc74808b102b1ca85a3ee6644160da32e60
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 394d313c53ad2c799ef8f16c6e43930f56c52393)

src/mds/CInode.cc

index d6ca9b31610ee5157561bd5fd512a0ff9cf44497..11ca3063a1028b5f6dc5799d4cb5f4104958f1e8 100644 (file)
@@ -2143,7 +2143,7 @@ void CInode::decode_lock_iflock(bufferlist::const_iterator& p)
 
 void CInode::encode_lock_ipolicy(bufferlist& bl)
 {
-  ENCODE_START(2, 1, bl);
+  ENCODE_START(3, 1, bl);
   if (is_dir()) {
     encode(get_inode()->version, bl);
     encode(get_inode()->ctime, bl);
@@ -2152,6 +2152,8 @@ void CInode::encode_lock_ipolicy(bufferlist& bl)
     encode(get_inode()->export_pin, bl);
     encode(get_inode()->flags, bl);
     encode(get_inode()->export_ephemeral_random_pin, bl);
+  } else {
+    encode(get_inode()->flags, bl);
   }
   ENCODE_FINISH(bl);
 }
@@ -2160,7 +2162,7 @@ void CInode::decode_lock_ipolicy(bufferlist::const_iterator& p)
 {
   ceph_assert(!is_auth());
   auto _inode = allocate_inode(*get_inode());
-  DECODE_START(1, p);
+  DECODE_START(3, p);
   if (is_dir()) {
     decode(_inode->version, p);
     utime_t tm;
@@ -2174,6 +2176,10 @@ void CInode::decode_lock_ipolicy(bufferlist::const_iterator& p)
       decode(_inode->flags, p);
       decode(_inode->export_ephemeral_random_pin, p);
     }
+  } else {
+    if (struct_v >= 3) {
+      decode(_inode->flags, p);
+    }
   }
   DECODE_FINISH(p);