}
};
- 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 {
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 {
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();
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);
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);