From: Dhairya Parmar <87528150+dparmar18@users.noreply.github.com> Date: Wed, 18 Jun 2025 14:29:20 +0000 (+0530) Subject: Merge pull request #61450 from anoopcs9/wip-69555-reef X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=3796d9482878fe55f4a2a1b070fe3224d42e3b7f;p=ceph.git Merge pull request #61450 from anoopcs9/wip-69555-reef reef: mds: Fix invalid access of mdr->dn[0].back() --- 3796d9482878fe55f4a2a1b070fe3224d42e3b7f diff --cc src/mds/Server.cc index 563f339dafce0,28758c6524049..7872a74a56370 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@@ -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());