]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: rename C_AioWrite to C_AioRequest
authorJason Dillaman <dillaman@redhat.com>
Mon, 6 Jul 2015 23:40:07 +0000 (19:40 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 13 Nov 2015 01:17:52 +0000 (20:17 -0500)
This context is used for more than just write requests. It is always
tied to an AioCompletion, so moved request reference counting
management within class.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/AioCompletion.cc
src/librbd/AioCompletion.h
src/librbd/internal.cc

index ec7f6846ffb4c476612184f984c65120a2e34e32..c3cda28a5ef0a37550b1415375f3fd953c78fab5 100644 (file)
@@ -170,7 +170,7 @@ namespace librbd {
       m_completion->lock.Unlock();
       r = m_req->m_object_len;
     }
-    m_completion->complete_request(m_cct, r);
+    C_AioRequest::finish(r);
   }
 
   void C_CacheRead::complete(int r) {
index fddf5fba750d24a6fe4dd552daaa3980efbdce18..a75599e6cf7827e2568c3d8f45c9b68e415d3cb8 100644 (file)
@@ -156,33 +156,33 @@ namespace librbd {
     }
   };
 
-  class C_AioRead : public Context {
+  class C_AioRequest : public Context {
   public:
-    C_AioRead(CephContext *cct, AioCompletion *completion)
-      : m_cct(cct), m_completion(completion), m_req(NULL)
-    { }
-    virtual ~C_AioRead() {}
-    virtual void finish(int r);
-    void set_req(AioRead *req) {
-      m_req = req;
+    C_AioRequest(CephContext *cct, AioCompletion *completion)
+      : m_cct(cct), m_completion(completion) {
+      m_completion->add_request();
     }
-  private:
+    virtual ~C_AioRequest() {}
+    virtual void finish(int r) {
+      m_completion->complete_request(m_cct, r);
+    }
+  protected:
     CephContext *m_cct;
     AioCompletion *m_completion;
-    AioRead *m_req;
   };
 
-  class C_AioWrite : public Context {
+  class C_AioRead : public C_AioRequest {
   public:
-    C_AioWrite(CephContext *cct, AioCompletion *completion)
-      : m_cct(cct), m_completion(completion) {}
-    virtual ~C_AioWrite() {}
-    virtual void finish(int r) {
-      m_completion->complete_request(m_cct, r);
+    C_AioRead(CephContext *cct, AioCompletion *completion)
+      : C_AioRequest(cct, completion), m_req(NULL) {
+    }
+    virtual ~C_AioRead() {}
+    virtual void finish(int r);
+    void set_req(AioRead *req) {
+      m_req = req;
     }
   private:
-    CephContext *m_cct;
-    AioCompletion *m_completion;
+    AioRead *m_req;
   };
 
   class C_CacheRead : public Context {
index 82bd61b942e6615685fa1b883fd2fbe082d4eac6..e027f75772361b77237b78194bd2326365edd201 100644 (file)
@@ -3676,13 +3676,11 @@ reprotect_and_return_err:
     RWLock::RLocker owner_locker(ictx->owner_lock);
     ictx->user_flushed();
 
-    C_AioWrite *flush_ctx = new C_AioWrite(cct, c);
-    c->add_request();
+    C_AioRequest *flush_ctx = new C_AioRequest(cct, c);
     ictx->flush_async_operations(flush_ctx);
 
     c->start_op(ictx, AIO_TYPE_FLUSH);
-    C_AioWrite *req_comp = new C_AioWrite(cct, c);
-    c->add_request();
+    C_AioRequest *req_comp = new C_AioRequest(cct, c);
     if (ictx->object_cacher) {
       ictx->flush_cache_aio(req_comp);
     } else {
@@ -3817,14 +3815,12 @@ reprotect_and_return_err:
        bl.append(buf + q->first, q->second);
       }
 
-      C_AioWrite *req_comp = new C_AioWrite(cct, c);
+      C_AioRequest *req_comp = new C_AioRequest(cct, c);
       if (ictx->object_cacher) {
-       c->add_request();
        ictx->write_to_cache(p->oid, bl, p->length, p->offset, req_comp, op_flags);
       } else {
        AioWrite *req = new AioWrite(ictx, p->oid.name, p->objectno, p->offset,
                                     bl, snapc, req_comp);
-       c->add_request();
 
        req->set_op_flags(op_flags);
        req->send();
@@ -3948,9 +3944,8 @@ reprotect_and_return_err:
     for (vector<ObjectExtent>::iterator p = extents.begin(); p != extents.end(); ++p) {
       ldout(cct, 20) << " oid " << p->oid << " " << p->offset << "~" << p->length
                     << " from " << p->buffer_extents << dendl;
-      C_AioWrite *req_comp = new C_AioWrite(cct, c);
+      C_AioRequest *req_comp = new C_AioRequest(cct, c);
       AbstractWrite *req;
-      c->add_request();
 
       if (p->length == ictx->layout.fl_object_size) {
        req = new AioRemove(ictx, p->oid.name, p->objectno, snapc, req_comp);
@@ -4123,7 +4118,6 @@ reprotect_and_return_err:
                                    q->length, q->buffer_extents, snap_id, true,
                                    req_comp, op_flags);
        req_comp->set_req(req);
-       c->add_request();
 
        if (ictx->object_cacher) {
          C_CacheRead *cache_comp = new C_CacheRead(ictx, req);