From: Casey Bodley Date: Thu, 11 Dec 2025 19:17:53 +0000 (-0500) Subject: osdc: linger_register() returns intrusive_ptr X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4064da7ce716b42ce4924787024fd7ce01182762;p=ceph.git osdc: linger_register() returns intrusive_ptr Signed-off-by: Casey Bodley --- diff --git a/src/librados/IoCtxImpl.cc b/src/librados/IoCtxImpl.cc index 4496e60e3fb2..9c2d6ce2a9bb 100644 --- a/src/librados/IoCtxImpl.cc +++ b/src/librados/IoCtxImpl.cc @@ -1662,8 +1662,8 @@ int librados::IoCtxImpl::watch(const object_t& oid, uint64_t *handle, version_t objver; C_SaferCond onfinish; - Objecter::LingerOp *linger_op = objecter->linger_register(oid, oloc, - extra_op_flags); + boost::intrusive_ptr linger_op = objecter->linger_register(oid, oloc, + extra_op_flags); *handle = linger_op->get_cookie(); if (internal) { linger_op->handle = InternalWatchInfo(this, oid, ctx, ctx2); @@ -1673,7 +1673,7 @@ int librados::IoCtxImpl::watch(const object_t& oid, uint64_t *handle, prepare_assert_ops(&wr); wr.watch(*handle, CEPH_OSD_WATCH_OP_WATCH, timeout); bufferlist bl; - objecter->linger_watch(linger_op, wr, + objecter->linger_watch(linger_op.get(), wr, snapc, ceph::real_clock::now(), bl, &onfinish, &objver); @@ -1683,7 +1683,7 @@ int librados::IoCtxImpl::watch(const object_t& oid, uint64_t *handle, set_sync_op_version(objver); if (r < 0) { - objecter->linger_cancel(linger_op); + objecter->linger_cancel(linger_op.get()); *handle = 0; } @@ -1707,8 +1707,8 @@ int librados::IoCtxImpl::aio_watch(const object_t& oid, uint32_t timeout, bool internal) { - Objecter::LingerOp *linger_op = objecter->linger_register(oid, oloc, - extra_op_flags); + boost::intrusive_ptr linger_op = objecter->linger_register(oid, oloc, + extra_op_flags); c->io = this; Context *oncomplete = new C_aio_linger_Complete(c, linger_op, false); @@ -1723,7 +1723,7 @@ int librados::IoCtxImpl::aio_watch(const object_t& oid, prepare_assert_ops(&wr); wr.watch(*handle, CEPH_OSD_WATCH_OP_WATCH, timeout); bufferlist bl; - objecter->linger_watch(linger_op, wr, + objecter->linger_watch(linger_op.get(), wr, snapc, ceph::real_clock::now(), bl, oncomplete, &c->objver); @@ -1809,8 +1809,8 @@ int librados::IoCtxImpl::notify(const object_t& oid, bufferlist& bl, bufferlist *preply_bl, char **preply_buf, size_t *preply_buf_len) { - Objecter::LingerOp *linger_op = objecter->linger_register(oid, oloc, - extra_op_flags); + boost::intrusive_ptr linger_op = objecter->linger_register(oid, oloc, + extra_op_flags); C_SaferCond notify_finish_cond; auto e = boost::asio::prefer( @@ -1820,7 +1820,7 @@ int librados::IoCtxImpl::notify(const object_t& oid, bufferlist& bl, boost::asio::bind_executor( std::move(e), CB_notify_Finish(client->cct, ¬ify_finish_cond, - objecter, linger_op, preply_bl, + objecter, linger_op.get(), preply_bl, preply_buf, preply_buf_len)); uint32_t timeout = notify_timeout; if (timeout_ms) @@ -1835,7 +1835,7 @@ int librados::IoCtxImpl::notify(const object_t& oid, bufferlist& bl, // Issue RADOS op C_SaferCond onack; version_t objver; - objecter->linger_notify(linger_op, + objecter->linger_notify(linger_op.get(), rd, snap_seq, inbl, NULL, &onack, &objver); @@ -1855,7 +1855,7 @@ int librados::IoCtxImpl::notify(const object_t& oid, bufferlist& bl, notify_finish_cond.wait(); } - objecter->linger_cancel(linger_op); + objecter->linger_cancel(linger_op.get()); set_sync_op_version(objver); return r; @@ -1866,8 +1866,8 @@ int librados::IoCtxImpl::aio_notify(const object_t& oid, AioCompletionImpl *c, bufferlist *preply_bl, char **preply_buf, size_t *preply_buf_len) { - Objecter::LingerOp *linger_op = objecter->linger_register(oid, oloc, - extra_op_flags); + boost::intrusive_ptr linger_op = objecter->linger_register(oid, oloc, + extra_op_flags); c->io = this; @@ -1879,7 +1879,7 @@ int librados::IoCtxImpl::aio_notify(const object_t& oid, AioCompletionImpl *c, boost::asio::bind_executor( std::move(e), CB_notify_Finish(client->cct, oncomplete, - objecter, linger_op, + objecter, linger_op.get(), preply_bl, preply_buf, preply_buf_len)); Context *onack = new C_aio_notify_Ack(client->cct, oncomplete); @@ -1895,7 +1895,7 @@ int librados::IoCtxImpl::aio_notify(const object_t& oid, AioCompletionImpl *c, rd.notify(linger_op->get_cookie(), 1, timeout, bl, &inbl); // Issue RADOS op - objecter->linger_notify(linger_op, + objecter->linger_notify(linger_op.get(), rd, snap_seq, inbl, NULL, onack, &c->objver); return 0; diff --git a/src/neorados/RADOS.cc b/src/neorados/RADOS.cc index 7c3ca744ad73..335c47043dc0 100644 --- a/src/neorados/RADOS.cc +++ b/src/neorados/RADOS.cc @@ -1744,7 +1744,7 @@ void RADOS::notify_(Object o, IOContext _ioc, bufferlist bl, bl, &inbl); impl->objecter->linger_notify( - linger_op, rd, ioc->snap_seq, inbl, + linger_op.get(), rd, ioc->snap_seq, inbl, asio::bind_executor( e, [cb](bs::error_code ec, ceph::bufferlist bl) mutable { diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 9fed91df23d9..b90a7ecf50ee 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -833,9 +833,10 @@ auto Objecter::_linger_by_cookie(uint64_t cookie) return info; } -Objecter::LingerOp *Objecter::linger_register(const object_t& oid, - const object_locator_t& oloc, - int flags) +auto Objecter::linger_register(const object_t& oid, + const object_locator_t& oloc, + int flags) + -> boost::intrusive_ptr { unique_lock l(rwlock); // Acquire linger ID diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 400596acb063..b98987d7e0ea 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -3243,8 +3243,9 @@ public: } // caller owns a ref - LingerOp *linger_register(const object_t& oid, const object_locator_t& oloc, - int flags); + auto linger_register(const object_t& oid, const object_locator_t& oloc, + int flags) + -> boost::intrusive_ptr; ceph_tid_t linger_watch(LingerOp *info, ObjectOperation& op, const SnapContext& snapc, ceph::real_time mtime,