]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore/BlueFS: Make fysnc return the status
authorVarada Kari <varada.kari@sandisk.com>
Wed, 29 Jun 2016 13:12:24 +0000 (18:42 +0530)
committerSage Weil <sage@redhat.com>
Thu, 30 Jun 2016 16:57:12 +0000 (12:57 -0400)
Signed-off-by: Varada Kari <varada.kari@sandisk.com>
src/os/bluestore/BlueFS.cc
src/os/bluestore/BlueFS.h

index 61f9388d8e8e57429b1a8f902b1c233478faaef5..a13ed4416228fafcad5ed8f0455c77f544e10dfa 100644 (file)
@@ -1322,10 +1322,12 @@ int BlueFS::_truncate(FileWriter *h, uint64_t offset)
   return 0;
 }
 
-void BlueFS::_fsync(FileWriter *h, std::unique_lock<std::mutex>& l)
+int BlueFS::_fsync(FileWriter *h, std::unique_lock<std::mutex>& l)
 {
   dout(10) << __func__ << " " << h << " " << h->file->fnode << dendl;
-  _flush(h, true);
+  int r = _flush(h, true);
+  if (r < 0)
+     return r;
   uint64_t old_dirty_seq = h->file->dirty_seq;
   lock.unlock();
   wait_for_aio(h);
@@ -1338,6 +1340,7 @@ void BlueFS::_fsync(FileWriter *h, std::unique_lock<std::mutex>& l)
     assert(h->file->dirty_seq == 0 ||  // cleaned
           h->file->dirty_seq > s);    // or redirtied by someone else
   }
+  return 0;
 }
 
 void BlueFS::flush_bdev()
index ac07e1c3868e25caaed029be69c8ac51b1936ec2..aaeba43b81e2869b940f46e50f98834a97500dda 100644 (file)
@@ -236,7 +236,7 @@ private:
   int _flush_range(FileWriter *h, uint64_t offset, uint64_t length);
   int _flush(FileWriter *h, bool force);
   void wait_for_aio(FileWriter *h);  // safe to call without a lock
-  void _fsync(FileWriter *h, std::unique_lock<std::mutex>& l);
+  int _fsync(FileWriter *h, std::unique_lock<std::mutex>& l);
 
   int _flush_and_sync_log(std::unique_lock<std::mutex>& l,
                          uint64_t want_seq = 0);
@@ -359,9 +359,9 @@ public:
     std::lock_guard<std::mutex> l(lock);
     _flush_range(h, offset, length);
   }
-  void fsync(FileWriter *h) {
+  int fsync(FileWriter *h) {
     std::unique_lock<std::mutex> l(lock);
-    _fsync(h, l);
+    return _fsync(h, l);
   }
   int read(FileReader *h, FileReaderBuffer *buf, uint64_t offset, size_t len,
           bufferlist *outbl, char *out) {