]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add missing locks for PurgeQueue methods
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 18 Dec 2018 23:08:11 +0000 (15:08 -0800)
committerPatrick Donnelly <pdonnell@redhat.com>
Wed, 2 Jan 2019 22:12:22 +0000 (14:12 -0800)
These could race with the asynchronous workings of the PQ.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/mds/PurgeQueue.cc
src/mds/PurgeQueue.h

index d30294881d718875ef0bd6651b58822442a7c308..1c4577a3e543e5337fa13bfa32c6b537eac7f56b 100644 (file)
@@ -287,7 +287,7 @@ void PurgeQueue::push(const PurgeItem &pi, Context *completion)
   if (!could_consume) {
     // Usually, it is not necessary to explicitly flush here, because the reader
     // will get flushes generated inside Journaler::is_readable.  However,
-    // if we remain in a can_consume()==false state for a long period then
+    // if we remain in a _can_consume()==false state for a long period then
     // we should flush in order to allow MDCache to drop its strays rather
     // than having them wait for purgequeue to progress.
     if (!delayed_flush) {
@@ -333,7 +333,7 @@ uint32_t PurgeQueue::_calculate_ops(const PurgeItem &item) const
   return ops_required;
 }
 
-bool PurgeQueue::can_consume()
+bool PurgeQueue::_can_consume()
 {
   dout(20) << ops_in_flight << "/" << max_purge_ops << " ops, "
            << in_flight.size() << "/" << g_conf()->mds_max_purge_files
@@ -367,7 +367,7 @@ bool PurgeQueue::_consume()
   ceph_assert(lock.is_locked_by_me());
 
   bool could_consume = false;
-  while(can_consume()) {
+  while(_can_consume()) {
 
     if (delayed_flush) {
       // We are now going to read from the journal, so any proactive
@@ -637,6 +637,8 @@ bool PurgeQueue::drain(
     size_t *in_flight_count
     )
 {
+  std::lock_guard l(lock);
+
   ceph_assert(progress != nullptr);
   ceph_assert(progress_total != nullptr);
   ceph_assert(in_flight_count != nullptr);
index 037bda255c988d4d368bc16e1e650ce1004c06fc..1c18482d401b7c73c75af7556f063834c0f25246 100644 (file)
@@ -134,7 +134,7 @@ protected:
 
   uint32_t _calculate_ops(const PurgeItem &item) const;
 
-  bool can_consume();
+  bool _can_consume();
 
   // How many bytes were remaining when drain() was first called,
   // used for indicating progress.