]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: allow unlink operation under lost+found directory
authorVenky Shankar <vshankar@redhat.com>
Wed, 19 Apr 2023 07:09:04 +0000 (03:09 -0400)
committerVenky Shankar <vshankar@redhat.com>
Sat, 6 May 2023 15:03:08 +0000 (11:03 -0400)
Deleting entries in lost+found directory is suggested once users
are done with those entries (possibly, by copying them), however,
unlinking is disallowed by the gating the operation via -EROFS.

Remove this constraint.

Fixes: http://tracker.ceph.com/issues/59569
Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/mds/CInode.h
src/mds/Server.cc

index 3f18ab0fe864b199c0dc1f5f973bd77b3feec8d8..2f7d6d242b896ee7efbf7174843372696a539b04 100644 (file)
@@ -657,6 +657,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
   bool is_mdsdir() const { return MDS_INO_IS_MDSDIR(ino()); }
   bool is_base() const { return MDS_INO_IS_BASE(ino()); }
   bool is_system() const { return ino() < MDS_INO_SYSTEM_BASE; }
+  bool is_lost_and_found() const { return ino() == CEPH_INO_LOST_AND_FOUND; }
   bool is_normal() const { return !(is_base() || is_system() || is_stray()); }
   bool is_file() const    { return get_inode()->is_file(); }
   bool is_symlink() const { return get_inode()->is_symlink(); }
index b0f4db31538940dec95a549f089a79cd5bcd6524..4fb66f91ad126aa6f1a40afa86a0e40694c18e89 100644 (file)
@@ -3693,7 +3693,9 @@ CDentry* Server::rdlock_path_xlock_dentry(MDRequestRef& mdr,
   CInode *diri = dir->get_inode();
 
   if (!mdr->reqid.name.is_mds()) {
-    if (diri->is_system() && !diri->is_root()) {
+    if (diri->is_system() && !diri->is_root() &&
+       (!diri->is_lost_and_found() ||
+        mdr->client_request->get_op() != CEPH_MDS_OP_UNLINK)) {
       respond_to_request(mdr, -CEPHFS_EROFS);
       return nullptr;
     }