]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #61450 from anoopcs9/wip-69555-reef
authorDhairya Parmar <87528150+dparmar18@users.noreply.github.com>
Wed, 18 Jun 2025 14:29:20 +0000 (19:59 +0530)
committerGitHub <noreply@github.com>
Wed, 18 Jun 2025 14:29:20 +0000 (19:59 +0530)
reef: mds: Fix invalid access of mdr->dn[0].back()

1  2 
src/mds/Server.cc

index 563f339dafce07b0449c5acdfed7f65c134273c1,28758c65240493fd05a8ea656b8af6c71101da3b..7872a74a563703c83c99d30f8ac00c41f8ff63a1
@@@ -4093,20 -4071,9 +4093,20 @@@ void Server::handle_client_getattr(MDRe
      if (r > 0)
        return; // delayed
  
 +    // Do not batch if any xlock is held
 +    if (!r) {
 +      CInode *in = mdr->in[0];
 +      if (((mask & CEPH_CAP_LINK_SHARED) && (in->linklock.is_xlocked_by_client(client))) ||
 +          ((mask & CEPH_CAP_AUTH_SHARED) && (in->authlock.is_xlocked_by_client(client))) ||
 +          ((mask & CEPH_CAP_XATTR_SHARED) && (in->xattrlock.is_xlocked_by_client(client))) ||
 +          ((mask & CEPH_CAP_FILE_SHARED) && (in->filelock.is_xlocked_by_client(client)))) {
 +      r = -1;
 +      }
 +    }
 +
      if (r < 0) {
        // fall-thru. let rdlock_path_pin_ref() check again.
-     } else if (is_lookup) {
+     } else if (is_lookup && mdr->dn[0].size()) {
        CDentry* dn = mdr->dn[0].back();
        mdr->pin(dn);
        auto em = dn->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple());