diff options
author | Josh Durgin <josh.durgin@inktank.com> | 2013-07-23 16:08:03 -0700 |
---|---|---|
committer | Josh Durgin <josh.durgin@inktank.com> | 2013-07-25 18:44:09 -0700 |
commit | a4b9707e5b5d38b1e8929f52c5f71d5f9e519ceb (patch) | |
tree | a2555f0c8db527a81be556c622b1dea85a778fc8 | |
parent | bfaf85982282241b6d938e315eaeeb6e01d207d2 (diff) | |
download | ceph-a4b9707e5b5d38b1e8929f52c5f71d5f9e519ceb.tar.gz |
LibrbdWriteback: don't take snap_lock inside of cache_lock
For reads, we've got the snapid as an argument already so we don't
need to examine the ImageCtx. Writes can never get to this point when
they're to a snapshot (since they'll get -EROFS), so we don't need to
examine the snap id for writes at all.
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r-- | src/librbd/LibrbdWriteback.cc | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/src/librbd/LibrbdWriteback.cc b/src/librbd/LibrbdWriteback.cc index a7ab0488dc6..737f1f33cd7 100644 --- a/src/librbd/LibrbdWriteback.cc +++ b/src/librbd/LibrbdWriteback.cc @@ -111,13 +111,10 @@ namespace librbd { bool LibrbdWriteback::may_copy_on_write(const object_t& oid, uint64_t read_off, uint64_t read_len, snapid_t snapid) { - m_ictx->snap_lock.get_read(); - librados::snap_t snap_id = m_ictx->snap_id; m_ictx->parent_lock.get_read(); uint64_t overlap = 0; - m_ictx->get_parent_overlap(snap_id, &overlap); + m_ictx->get_parent_overlap(snapid, &overlap); m_ictx->parent_lock.put_read(); - m_ictx->snap_lock.put_read(); uint64_t object_no = oid_to_object_no(oid.name, m_ictx->object_prefix); @@ -140,13 +137,10 @@ namespace librbd { uint64_t trunc_size, __u32 trunc_seq, Context *oncommit) { - m_ictx->snap_lock.get_read(); - librados::snap_t snap_id = m_ictx->snap_id; m_ictx->parent_lock.get_read(); uint64_t overlap = 0; - m_ictx->get_parent_overlap(snap_id, &overlap); + m_ictx->get_parent_overlap(LIBRADOS_SNAP_HEAD, &overlap); m_ictx->parent_lock.put_read(); - m_ictx->snap_lock.put_read(); uint64_t object_no = oid_to_object_no(oid.name, m_ictx->object_prefix); @@ -162,7 +156,7 @@ namespace librbd { C_OrderedWrite *req_comp = new C_OrderedWrite(m_ictx->cct, result, this); AioWrite *req = new AioWrite(m_ictx, oid.name, object_no, off, objectx, object_overlap, - bl, snapc, snap_id, + bl, snapc, LIBRADOS_SNAP_HEAD, req_comp); req->send(); return ++m_tid; |