]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: move flush on new snap outside of snap_lock
authorJosh Durgin <josh.durgin@inktank.com>
Mon, 30 Jul 2012 17:59:29 +0000 (10:59 -0700)
committerJosh Durgin <josh.durgin@inktank.com>
Sat, 4 Aug 2012 01:48:53 +0000 (18:48 -0700)
snap_lock needs to be taken during writeback.
This is still protected by md_lock. The altered snapc doesn't
affect in-flight ops, so it's safe to update it before flushing.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
src/librbd/internal.cc

index b664872bc070bcb4cbd3b99fc5a691e3d7bb8023..2dad6fdb8bb453638591750fcf1b0bdc6708f117 100644 (file)
@@ -1283,10 +1283,6 @@ namespace librbd {
          return r;
       } // release parent_lock
 
-      if (new_snap) {
-       _flush(ictx);
-      }
-
       if (!new_snapc.is_valid()) {
        lderr(cct) << "image snap context is invalid!" << dendl;
        return -EIO;
@@ -1304,6 +1300,10 @@ namespace librbd {
       ictx->data_ctx.selfmanaged_snap_set_write_ctx(ictx->snapc.seq, ictx->snaps);
     } // release snap_lock
 
+    if (new_snap) {
+      _flush(ictx);
+    }
+
     ictx->refresh_lock.Lock();
     ictx->last_refresh = refresh_seq;
     ictx->refresh_lock.Unlock();