From: Patrick Donnelly Date: Tue, 18 Jul 2023 00:52:13 +0000 (-0400) Subject: mds: acquire inode snaplock in open X-Git-Tag: v19.0.0~650^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c04ab6f0868a7385e695c85486cf3e7bbdfa9ab5;p=ceph.git mds: acquire inode snaplock in open It doesn't make sense that open("file", O_CREAT|...) will acquire a readlock on the file's snaplock when the file already exists, but: open("file", ...) will not. Fixes: https://tracker.ceph.com/issues/62058 Fixes: c1d7f93d7bd06d773b8035359548c0c9216398e3 Signed-off-by: Patrick Donnelly --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 94397d9f067e..d383a3fb307d 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -4438,6 +4438,7 @@ void Server::handle_client_open(MDRequestRef& mdr) } MutationImpl::LockOpVec lov; + lov.add_rdlock(&cur->snaplock); unsigned mask = req->head.args.open.mask; if (mask) { @@ -4609,11 +4610,6 @@ void Server::handle_client_openc(MDRequestRef& mdr) // it existed. ceph_assert(mdr.get()->is_rdlocked(&dn->lock)); - MutationImpl::LockOpVec lov; - lov.add_rdlock(&dnl->get_inode()->snaplock); - if (!mds->locker->acquire_locks(mdr, lov)) - return; - handle_client_open(mdr); return; }