summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Durgin <josh.durgin@inktank.com>2013-07-23 16:08:03 -0700
committerJosh Durgin <josh.durgin@inktank.com>2013-07-25 18:44:09 -0700
commita4b9707e5b5d38b1e8929f52c5f71d5f9e519ceb (patch)
treea2555f0c8db527a81be556c622b1dea85a778fc8
parentbfaf85982282241b6d938e315eaeeb6e01d207d2 (diff)
downloadceph-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.cc12
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;