]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: make the lost+found dir accessible from clients
authorXiubo Li <xiubli@redhat.com>
Mon, 19 Apr 2021 02:34:02 +0000 (10:34 +0800)
committerPatrick Donnelly <pdonnell@redhat.com>
Mon, 28 Jun 2021 19:12:32 +0000 (12:12 -0700)
Inode number 0x4 is reserved for the lost+found dir, and the apps
or recovery apps need to access it.

At the same time the 0x3 is reserved for the global snaprealm, which
will also be lookup by the clients when looking up the snaprealm inodes.

Here will make all the inode less than 100 accessible by clients.

Fixes: https://tracker.ceph.com/issues/50216
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit 841071b3602aa2b8bcca57b95cdf671d48036a34)

src/client/Client.cc
src/mds/Server.cc
src/mds/mdstypes.h

index 819518cfb1a13e3c7f068f55b1047dbb366e6d16..d56ad6076e73af5365c886f1b014ba53c822f2f8 100644 (file)
@@ -161,8 +161,8 @@ void client_flush_set_callback(void *p, ObjectCacher::ObjectSet *oset)
 }
 
 bool Client::is_reserved_vino(vinodeno_t &vino) {
-  if (vino.ino < MDS_INO_SYSTEM_BASE && vino.ino != CEPH_INO_ROOT) {
-    ldout(cct, -1) << __func__ << "attempt to access reserved inode number " << vino << dendl;
+  if (MDS_IS_PRIVATE_INO(vino.ino)) {
+    ldout(cct, -1) << __func__ << " attempt to access reserved inode number " << vino << dendl;
     return true;
   }
   return false;
index 782c34e7e09db13c80f7488f4d12e8751107901c..1d5a47e2060f8e98fe4c5784a85a6170c774228e 100644 (file)
@@ -3916,7 +3916,7 @@ void Server::handle_client_lookup_ino(MDRequestRef& mdr,
    *
    * [1] https://tracker.ceph.com/issues/49922
    */
-  if (_ino < MDS_INO_SYSTEM_BASE && _ino != CEPH_INO_ROOT) {
+  if (MDS_IS_PRIVATE_INO(_ino)) {
     respond_to_request(mdr, -CEPHFS_ESTALE);
     return;
   }
index 5e9fb7d04fb02deb166a95c6c5c2320bd4c7ba9f..bfb27910846b2ed6c7d87d4e4f833dc206b6af9f 100644 (file)
@@ -65,6 +65,8 @@
 #define MDS_INO_STRAY_OWNER(i) (signed (((unsigned (i)) - MDS_INO_STRAY_OFFSET) / NUM_STRAY))
 #define MDS_INO_STRAY_INDEX(i) (((unsigned (i)) - MDS_INO_STRAY_OFFSET) % NUM_STRAY)
 
+#define MDS_IS_PRIVATE_INO(i) ((i) < MDS_INO_SYSTEM_BASE && (i) >= MDS_INO_MDSDIR_OFFSET)
+
 typedef int32_t mds_rank_t;
 constexpr mds_rank_t MDS_RANK_NONE             = -1;
 constexpr mds_rank_t MDS_RANK_EPHEMERAL_DIST   = -2;