]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: allow specifying rdlock position
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 8 Feb 2024 17:30:38 +0000 (12:30 -0500)
committerPatrick Donnelly <pdonnell@redhat.com>
Wed, 20 Mar 2024 14:56:51 +0000 (10:56 -0400)
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/mds/Mutation.h

index bc83f219151484dd4f8c7489b18f1373a96bde23..18266c447c3136fcb723bbd210334f3c949e7378 100644 (file)
@@ -86,30 +86,33 @@ public:
       reserve(32);
     }
 
-    void add_rdlock(SimpleLock *lock) {
-      emplace_back(lock, LockOp::RDLOCK);
+    void add_rdlock(SimpleLock *lock, int idx=-1) {
+      add_lock(LockOp(lock, LockOp::RDLOCK), idx);
     }
     void erase_rdlock(SimpleLock *lock);
     void add_xlock(SimpleLock *lock, int idx=-1) {
-      if (idx >= 0)
-       emplace(cbegin() + idx, lock, LockOp::XLOCK);
-      else
-       emplace_back(lock, LockOp::XLOCK);
+      add_lock(LockOp(lock, LockOp::XLOCK), idx);
     }
     void add_wrlock(SimpleLock *lock, int idx=-1) {
-      if (idx >= 0)
-       emplace(cbegin() + idx, lock, LockOp::WRLOCK);
-      else
-       emplace_back(lock, LockOp::WRLOCK);
+      add_lock(LockOp(lock, LockOp::WRLOCK), idx);
     }
     void add_remote_wrlock(SimpleLock *lock, mds_rank_t rank) {
       ceph_assert(rank != MDS_RANK_NONE);
-      emplace_back(lock, LockOp::REMOTE_WRLOCK, rank);
+      add_lock(LockOp(lock, LockOp::REMOTE_WRLOCK, rank), -1);
     }
     void lock_scatter_gather(SimpleLock *lock) {
-      emplace_back(lock, LockOp::WRLOCK | LockOp::STATE_PIN);
+      add_lock(LockOp(lock, LockOp::WRLOCK | LockOp::STATE_PIN), -1);
     }
     void sort_and_merge();
+
+  protected:
+    void add_lock(LockOp op, int idx) {
+      if (idx >= 0) {
+       emplace(cbegin() + idx, std::move(op));
+      } else {
+       emplace_back(std::move(op));
+      }
+    }
   };
 
   using lock_set = std::set<LockOp>;