]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Revert "os/BlueStore: NCB fix for leaked space when bdev_async_discard is enabled"
authorskanta <skanta@redhat.com>
Tue, 5 Nov 2024 10:50:14 +0000 (16:20 +0530)
committerskanta <skanta@redhat.com>
Tue, 5 Nov 2024 10:50:14 +0000 (16:20 +0530)
This reverts commit cf861523cf42f034ce4f0b128cc48e100d1bf486.
The commit was merged prematurely without testing.

Signed-off-by: Srinivasa Bharath Kanta <skanta@redhat.com>
src/blk/BlockDevice.h
src/blk/kernel/KernelDevice.cc
src/blk/kernel/KernelDevice.h
src/os/bluestore/BlueStore.cc

index 3c93cbdeeb189d28cdbfe4b7851c4acda19d661d..115f7e6c1b5387d1e9f24ba39a54af18ba708a2f 100644 (file)
@@ -292,7 +292,7 @@ public:
     int write_hint = WRITE_LIFE_NOT_SET) = 0;
   virtual int flush() = 0;
   virtual bool try_discard(interval_set<uint64_t> &to_release, bool async=true) { return false; }
-  virtual int discard_drain(uint32_t timeout_msec = 0) { return 0; }
+  virtual void discard_drain() { return; }
 
   // for managing buffered readers/writers
   virtual int invalidate_cache(uint64_t off, uint64_t len) = 0;
index 07927f237cce10a8b528255be40e3379bb501bc8..f6edaf98e8304b673481137bd03a434cbbc6f945 100644 (file)
@@ -587,35 +587,13 @@ bool KernelDevice::_discard_started()
   return !discard_threads.empty();
 }
 
-int KernelDevice::discard_drain(uint32_t timeout_msec = 0)
+void KernelDevice::discard_drain()
 {
   dout(10) << __func__ << dendl;
-  bool check_timeout = false;
-  utime_t end_time;
-  if (timeout_msec) {
-    check_timeout = true;
-    uint32_t timeout_sec = 0;
-    if (timeout_msec >= 1000) {
-      timeout_sec = (timeout_msec / 1000);
-      timeout_msec = (timeout_msec % 1000);
-    }
-    end_time = ceph_clock_now();
-    // add the timeout after converting from msec to nsec
-    end_time.tv.tv_nsec += (timeout_msec * (1000*1000));
-    if (end_time.tv.tv_nsec > (1000*1000*1000)) {
-      end_time.tv.tv_nsec -= (1000*1000*1000);
-      end_time.tv.tv_sec += 1;
-    }
-    end_time.tv.tv_sec += timeout_sec;
-  }
   std::unique_lock l(discard_lock);
   while (!discard_queued.empty() || discard_running) {
     discard_cond.wait(l);
-    if (check_timeout && ceph_clock_now() > end_time) {
-      return -1;
-    }
   }
-  return 0;
 }
 
 static bool is_expected_ioerr(const int r)
index b7b0a7dc38bc16077fe0e4277ac45cc3d8eb405d..914f05e64c43ddc647234c30f336bf8f5d93c6c8 100644 (file)
@@ -123,7 +123,7 @@ public:
   ~KernelDevice();
 
   void aio_submit(IOContext *ioc) override;
-  int discard_drain(uint32_t timeout_msec) override;
+  void discard_drain() override;
 
   int collect_metadata(const std::string& prefix, std::map<std::string,std::string> *pm) const override;
   int get_devname(std::string *s) const override {
index bf92ccf6558a1c327f8fa20920831845807deeec..f7b2ffaaf0fe112fae68ddb29ff28b74a8ebbf3b 100644 (file)
@@ -8038,17 +8038,9 @@ void BlueStore::_close_db()
   db = nullptr;
 
   if (do_destage && fm && fm->is_null_manager()) {
-    // force all backgrounds discards to be committed before storing allocator
-    // set timeout to 500msec
-    int ret = bdev->discard_drain(500);
-    if (ret == 0) {
-      ret = store_allocator(alloc);
-      if (unlikely(ret != 0)) {
-       derr << __func__ << "::NCB::store_allocator() failed (we will need to rebuild it on startup)" << dendl;
-      }
-    }
-    else {
-      derr << __func__ << "::NCB::discard_drain() exceeded timeout (abort!)" << dendl;
+    int ret = store_allocator(alloc);
+    if (ret != 0) {
+      derr << __func__ << "::NCB::store_allocator() failed (continue with bitmapFreelistManager)" << dendl;
     }
   }