]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Filer: Add error handler in _do_purge_range() 35148/head
authorVarsha Rao <varao@redhat.com>
Thu, 16 Apr 2020 14:58:54 +0000 (20:28 +0530)
committerVicente Cheng <freeze.bilsted@gmail.com>
Wed, 20 May 2020 08:25:02 +0000 (08:25 +0000)
Signed-off-by: Varsha Rao <varao@redhat.com>
(cherry picked from commit 39b25efb26963180a7e0403174868f5a9940ff55)

src/osdc/Filer.cc
src/osdc/Filer.h

index 93abbb7cdb1c5e3fcb8bf0bd00f922e08372937f..4a82ea6c2ca129a4133fddf166b085fc2970644e 100644 (file)
@@ -302,6 +302,7 @@ struct PurgeRange {
   int flags;
   Context *oncommit;
   int uncommitted;
+  int err = 0;
   PurgeRange(inodeno_t i, const file_layout_t& l, const SnapContext& sc,
             uint64_t fo, uint64_t no, ceph::real_time t, int fl,
             Context *fin)
@@ -331,7 +332,7 @@ int Filer::purge_range(inodeno_t ino,
   PurgeRange *pr = new PurgeRange(ino, *layout, snapc, first_obj,
                                  num_obj, mtime, flags, oncommit);
 
-  _do_purge_range(pr, 0);
+  _do_purge_range(pr, 0, 0);
   return 0;
 }
 
@@ -340,20 +341,22 @@ struct C_PurgeRange : public Context {
   PurgeRange *pr;
   C_PurgeRange(Filer *f, PurgeRange *p) : filer(f), pr(p) {}
   void finish(int r) override {
-    filer->_do_purge_range(pr, 1);
+    filer->_do_purge_range(pr, 1, r);
   }
 };
 
-void Filer::_do_purge_range(PurgeRange *pr, int fin)
+void Filer::_do_purge_range(PurgeRange *pr, int fin, int err)
 {
   PurgeRange::unique_lock prl(pr->lock);
+  if (err && err != -ENOENT)
+    pr->err = err;
   pr->uncommitted -= fin;
   ldout(cct, 10) << "_do_purge_range " << pr->ino << " objects " << pr->first
                 << "~" << pr->num << " uncommitted " << pr->uncommitted
                 << dendl;
 
   if (pr->num == 0 && pr->uncommitted == 0) {
-    pr->oncommit->complete(0);
+    pr->oncommit->complete(pr->err);
     prl.unlock();
     delete pr;
     return;
index 05525904ec5721d4f4ad5eea1a3123b132a6f655..cedb710c234584c3167a2f1b762b4e3f4031cfba 100644 (file)
@@ -253,7 +253,7 @@ class Filer {
                  uint64_t first_obj, uint64_t num_obj,
                  ceph::real_time mtime,
                  int flags, Context *oncommit);
-  void _do_purge_range(struct PurgeRange *pr, int fin);
+  void _do_purge_range(struct PurgeRange *pr, int fin, int err);
 
   /*
    * probe