]> git.apps.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>
Tue, 15 Jan 2019 18:01:59 +0000 (10:01 -0800)
These could race with the asynchronous workings of the PQ.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit c7350ac23c73867b52cd9b7bb23b6c618eebe44d)

Conflicts:
src/mds/PurgeQueue.cc

src/mds/PurgeQueue.cc
src/mds/PurgeQueue.h

index df160f39412b9d4f4d815f9fa2eabdbd5adbf32d..9389a831eb334200e25b1cdb2aed6071b1d43bb1 100644 (file)
@@ -272,7 +272,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) {
@@ -318,7 +318,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
@@ -352,7 +352,7 @@ bool PurgeQueue::_consume()
   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
@@ -609,6 +609,8 @@ bool PurgeQueue::drain(
     size_t *in_flight_count
     )
 {
+  Mutex::Locker l(lock);
+
   assert(progress != nullptr);
   assert(progress_total != nullptr);
   assert(in_flight_count != nullptr);
index 6a13a57ee30360f14d913d0abc8166718d95f99d..6f1317c9aca845a53dc208b81d4618da4d3d8487 100644 (file)
@@ -103,7 +103,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.