]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Revert "mds/link: Create referent inode and store backtrace"
authorVenky Shankar <vshankar@redhat.com>
Tue, 18 Mar 2025 09:01:49 +0000 (09:01 +0000)
committerVenky Shankar <vshankar@redhat.com>
Wed, 28 May 2025 04:35:33 +0000 (10:05 +0530)
This reverts commit fb3bf789f4d6cffa3ec316bcc72c2a23b8812e86.

Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit aa3d420760b17bdd9245672dccb5f9ae335bae86)

src/mds/Locker.cc
src/mds/Server.cc
src/mds/Server.h
src/mds/StrayManager.cc

index 7b67097ae668d33cf9111ae71fb4f96314f26bc8..706d240232ff8c9a18ff1c23fd0ef46d3f7f0187 100644 (file)
@@ -425,7 +425,7 @@ bool Locker::acquire_locks(const MDRequestRef& mdr,
       if (mdr->lock_cache) { // debug
        ceph_assert(mdr->lock_cache->opcode == CEPH_MDS_OP_UNLINK);
        CDentry *dn = mdr->dn[0].back();
-       ceph_assert(dn->get_projected_linkage()->is_remote() || dn->get_projected_linkage()->is_referent_remote());
+       ceph_assert(dn->get_projected_linkage()->is_remote());
       }
 
       if (object->is_ambiguous_auth()) {
@@ -461,7 +461,7 @@ bool Locker::acquire_locks(const MDRequestRef& mdr,
        { // debug
          ceph_assert(mdr->lock_cache->opcode == CEPH_MDS_OP_UNLINK);
          CDentry *dn = mdr->dn[0].back();
-         ceph_assert(dn->get_projected_linkage()->is_remote() || dn->get_projected_linkage()->is_referent_remote());
+         ceph_assert(dn->get_projected_linkage()->is_remote());
        }
       }
 
@@ -4513,7 +4513,7 @@ void Locker::issue_client_lease(CDentry *dn, CInode *in, const MDRequestRef& mdr
       ceph_assert(dnl->get_inode() == in);
       mask = CEPH_LEASE_PRIMARY_LINK;
     } else {
-      if (dnl->is_remote() || dnl->is_referent_remote())
+      if (dnl->is_remote())
         ceph_assert(dnl->get_remote_ino() == in->ino());
       else
         ceph_assert(!in);
index 2e380c79751f6b31ecf8007d3ac1c8618d881c87..103c3dd68396050262c2a2f9988b960c654c2c10 100644 (file)
@@ -3544,7 +3544,7 @@ CDentry* Server::prepare_stray_dentry(const MDRequestRef& mdr, CInode *in)
  * create a new inode.  set c/m/atime.  hit dir pop.
  */
 CInode* Server::prepare_new_inode(const MDRequestRef& mdr, CDir *dir, inodeno_t useino, unsigned mode,
-                                 const file_layout_t *layout, bool referent_inode)
+                                 const file_layout_t *layout)
 {
   CInode *in = new CInode(mdcache);
   auto _inode = in->_get_inode();
@@ -3636,25 +3636,12 @@ CInode* Server::prepare_new_inode(const MDRequestRef& mdr, CDir *dir, inodeno_t
       _inode->mode |= S_ISGID;
     }
   } else {
-    if (!referent_inode) {
-      _inode->gid = mdr->client_request->get_owner_gid();
-      ceph_assert(_inode->gid != (unsigned)-1);
-    }
-  }
-
-  if (!referent_inode) {
-    _inode->uid = mdr->client_request->get_owner_uid();
-    ceph_assert(_inode->uid != (unsigned)-1);
+    _inode->gid = mdr->client_request->get_owner_gid();
+    ceph_assert(_inode->gid != (unsigned)-1);
   }
 
-  /* The referent inode is created on hardlink, so the client request wouldn't
-   * have uid, gid set. So don't use uid and gid from client if it's a referent
-   * inode.
-   */
-  if (referent_inode) {
-    _inode->gid = 0;
-    _inode->uid = 0;
-  }
+  _inode->uid = mdr->client_request->get_owner_uid();
+  ceph_assert(_inode->uid != (unsigned)-1);
 
   _inode->btime = _inode->ctime = _inode->mtime = _inode->atime =
     mdr->get_op_stamp();
@@ -7733,18 +7720,17 @@ void Server::handle_client_link(const MDRequestRef& mdr)
 class C_MDS_link_local_finish : public ServerLogContext {
   CDentry *dn;
   CInode *targeti;
-  CInode *referenti;
   version_t dnpv;
   version_t tipv;
   bool adjust_realm;
 public:
-  C_MDS_link_local_finish(Server *s, const MDRequestRef& r, CDentry *d, CInode *ti, CInode *ri,
+  C_MDS_link_local_finish(Server *s, const MDRequestRef& r, CDentry *d, CInode *ti,
                          version_t dnpv_, version_t tipv_, bool ar) :
-    ServerLogContext(s, r), dn(d), targeti(ti), referenti(ri),
+    ServerLogContext(s, r), dn(d), targeti(ti),
     dnpv(dnpv_), tipv(tipv_), adjust_realm(ar) { }
   void finish(int r) override {
     ceph_assert(r == 0);
-    server->_link_local_finish(mdr, dn, targeti, referenti, dnpv, tipv, adjust_realm);
+    server->_link_local_finish(mdr, dn, targeti, dnpv, tipv, adjust_realm);
   }
 };
 
@@ -7768,24 +7754,6 @@ void Server::_link_local(const MDRequestRef& mdr, CDentry *dn, CInode *targeti,
   pi.inode->change_attr++;
   pi.inode->version = tipv;
 
-  // create referent inode. Don't re-create on retry
-  CInode *newi = nullptr;
-  if (mds->mdsmap->allow_referent_inodes()) {
-    if (!mdr->alloc_ino && !mdr->used_prealloc_ino)
-      newi = prepare_new_inode(mdr, dn->get_dir(), inodeno_t(0), pi.inode->mode, nullptr, true);
-    else
-      newi = mdcache->get_inode(mdr->alloc_ino ? mdr->alloc_ino : mdr->used_prealloc_ino);
-    ceph_assert(newi);
-
-    auto _inode = newi->_get_inode();
-    _inode->version = dnpv;
-    _inode->update_backtrace();
-
-    /* NOTE: layout, rstat accounting and snapshot related inode updates are not
-     * required and hence not done for referent inodes.
-     */
-  }
-
   bool adjust_realm = false;
   if (!target_realm->get_subvolume_ino() && !targeti->is_projected_snaprealm_global()) {
     sr_t *newsnap = targeti->project_snaprealm();
@@ -7799,24 +7767,18 @@ void Server::_link_local(const MDRequestRef& mdr, CDentry *dn, CInode *targeti,
   le->metablob.add_client_req(mdr->reqid, mdr->client_request->get_oldest_client_tid());
   mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, dn->get_dir(), PREDIRTY_DIR, 1);      // new dn
   mdcache->predirty_journal_parents(mdr, &le->metablob, targeti, 0, PREDIRTY_PRIMARY);           // targeti
-  dout(20) << __func__ << " calling metablob add_remote_dentry with referent_ino= " << (newi ? newi->ino() : inodeno_t(0)) << dendl;
-  le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type(), newi ? newi->ino() : inodeno_t(0), newi);  // new remote
+  // TODO: Pass referent inode upon creation. It's adding just remote dentry now
+  le->metablob.add_remote_dentry(dn, true, targeti->ino(), targeti->d_type(), 0, nullptr);  // new remote
   mdcache->journal_dirty_inode(mdr.get(), &le->metablob, targeti);
 
   // do this after predirty_*, to avoid funky extra dnl arg
-  if (newi) {
-    // journal allocated referent inode and push the linkage with referent inode
-    journal_allocated_inos(mdr, &le->metablob);
-    dn->push_projected_linkage(newi, targeti->ino(), newi->ino());
-  } else {
-    dn->push_projected_linkage(targeti->ino(), targeti->d_type());
-  }
+  dn->push_projected_linkage(targeti->ino(), targeti->d_type());
 
   journal_and_reply(mdr, targeti, dn, le,
-                   new C_MDS_link_local_finish(this, mdr, dn, targeti, newi, dnpv, tipv, adjust_realm));
+                   new C_MDS_link_local_finish(this, mdr, dn, targeti, dnpv, tipv, adjust_realm));
 }
 
-void Server::_link_local_finish(const MDRequestRef& mdr, CDentry *dn, CInode *targeti, CInode *referenti,
+void Server::_link_local_finish(const MDRequestRef& mdr, CDentry *dn, CInode *targeti,
                                version_t dnpv, version_t tipv, bool adjust_realm)
 {
   dout(10) << "_link_local_finish " << *dn << " to " << *targeti << dendl;
@@ -7827,12 +7789,6 @@ void Server::_link_local_finish(const MDRequestRef& mdr, CDentry *dn, CInode *ta
     dn->link_remote(dnl, targeti);
   dn->mark_dirty(dnpv, mdr->ls);
 
-  if (referenti) {
-    // dirty referent inode
-    referenti->mark_dirty(mdr->ls);
-    referenti->mark_dirty_parent(mdr->ls, true);
-  }
-
   // target inode
   mdr->apply();
 
index 075be73908ac4321c6371fbd1f4884e065080dc4..87a2ac9bb056458a756c69e59e854983e4cb4b23 100644 (file)
@@ -222,7 +222,7 @@ public:
   bool _check_access(Session *session, CInode *in, unsigned mask, int caller_uid, int caller_gid, int setattr_uid, int setattr_gid);
   CDentry *prepare_stray_dentry(const MDRequestRef& mdr, CInode *in);
   CInode* prepare_new_inode(const MDRequestRef& mdr, CDir *dir, inodeno_t useino, unsigned mode,
-                           const file_layout_t *layout=nullptr, bool referent_inode=false);
+                           const file_layout_t *layout=nullptr);
   void journal_allocated_inos(const MDRequestRef& mdr, EMetaBlob *blob);
   void apply_allocated_inos(const MDRequestRef& mdr, Session *session);
 
@@ -294,7 +294,7 @@ public:
   // link
   void handle_client_link(const MDRequestRef& mdr);
   void _link_local(const MDRequestRef& mdr, CDentry *dn, CInode *targeti, SnapRealm *target_realm);
-  void _link_local_finish(const MDRequestRef& mdr, CDentry *dn, CInode *targeti, CInode *referenti,
+  void _link_local_finish(const MDRequestRef& mdr, CDentry *dn, CInode *targeti,
                          version_t, version_t, bool);
 
   void _link_remote(const MDRequestRef& mdr, bool inc, CDentry *dn, CInode *targeti);
index 4cc64cffd22604dd0ddd3520fe233cf479f1d005..48d4b1e509234f21049c22324b39d2d10c45f64f 100644 (file)
@@ -583,7 +583,7 @@ void StrayManager::eval_remote(CDentry *remote_dn)
   dout(10) << __func__ << " " << *remote_dn << dendl;
 
   CDentry::linkage_t *dnl = remote_dn->get_projected_linkage();
-  ceph_assert(dnl->is_remote() || dnl->is_referent_remote());
+  ceph_assert(dnl->is_remote());
   CInode *in = dnl->get_inode();
 
   if (!in) {
@@ -614,7 +614,7 @@ class C_RetryEvalRemote : public StrayManagerContext {
       dn->get(CDentry::PIN_PTRWAITER);
     }
     void finish(int r) override {
-      if (dn->get_projected_linkage()->is_remote() || dn->get_projected_linkage()->is_referent_remote())
+      if (dn->get_projected_linkage()->is_remote())
        sm->eval_remote(dn);
       dn->put(CDentry::PIN_PTRWAITER);
     }