summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Durgin <josh.durgin@inktank.com>2013-07-24 18:15:05 -0700
committerJosh Durgin <josh.durgin@inktank.com>2013-07-25 18:44:10 -0700
commitddf825206afde96c1b4c5e2d3a95b38a2d13c0f5 (patch)
treeae1e7e390a23c28df901a79846b5b76628f0f023
parent02ec1a7502fe0aa612be6c088c4a0efda022da98 (diff)
downloadceph-ddf825206afde96c1b4c5e2d3a95b38a2d13c0f5.tar.gz
librbd: remove unnecessary AioRequest parameterswip-5488-2
Writes don't need the snap_id at all, so make that only applicable to reads. Writes will read the current overlap value when they need it, so don't pass this in or store it in a member variable either. Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--src/librbd/AioRequest.cc15
-rw-r--r--src/librbd/AioRequest.h43
-rw-r--r--src/librbd/LibrbdWriteback.cc6
-rw-r--r--src/librbd/internal.cc19
4 files changed, 35 insertions, 48 deletions
diff --git a/src/librbd/AioRequest.cc b/src/librbd/AioRequest.cc
index 11e111f7514..b5e38b5ab0d 100644
--- a/src/librbd/AioRequest.cc
+++ b/src/librbd/AioRequest.cc
@@ -21,15 +21,14 @@ namespace librbd {
AioRequest::AioRequest() :
m_ictx(NULL), m_ioctx(NULL),
m_object_no(0), m_object_off(0), m_object_len(0),
- m_snap_id(CEPH_NOSNAP), m_completion(NULL), m_parent_completion(NULL),
+ m_completion(NULL), m_parent_completion(NULL),
m_hide_enoent(false) {}
AioRequest::AioRequest(ImageCtx *ictx, const std::string &oid,
uint64_t objectno, uint64_t off, uint64_t len,
- librados::snap_t snap_id,
Context *completion,
bool hide_enoent) :
m_ictx(ictx), m_ioctx(&ictx->data_ctx), m_oid(oid), m_object_no(objectno),
- m_object_off(off), m_object_len(len), m_snap_id(snap_id),
+ m_object_off(off), m_object_len(len),
m_completion(completion), m_parent_completion(NULL),
m_hide_enoent(hide_enoent) {}
@@ -108,21 +107,18 @@ namespace librbd {
/** read **/
AbstractWrite::AbstractWrite()
- : m_state(LIBRBD_AIO_WRITE_FLAT),
- m_parent_overlap(0) {}
+ : m_state(LIBRBD_AIO_WRITE_FLAT) {}
AbstractWrite::AbstractWrite(ImageCtx *ictx, const std::string &oid,
uint64_t object_no, uint64_t object_off, uint64_t len,
vector<pair<uint64_t,uint64_t> >& objectx,
- uint64_t object_overlap,
- const ::SnapContext &snapc, librados::snap_t snap_id,
+ const ::SnapContext &snapc,
Context *completion,
bool hide_enoent)
- : AioRequest(ictx, oid, object_no, object_off, len, snap_id, completion,
+ : AioRequest(ictx, oid, object_no, object_off, len, completion,
hide_enoent),
m_state(LIBRBD_AIO_WRITE_FLAT), m_snap_seq(snapc.seq.val)
{
m_object_image_extents = objectx;
- m_parent_overlap = object_overlap;
// TODO: find a way to make this less stupid
for (std::vector<snapid_t>::const_iterator it = snapc.snaps.begin();
@@ -172,7 +168,6 @@ namespace librbd {
break;
}
- // If parent still exists, overlap might also have changed.
uint64_t newlen = m_ictx->prune_parent_extents(
m_object_image_extents, m_ictx->parent_md.overlap);
diff --git a/src/librbd/AioRequest.h b/src/librbd/AioRequest.h
index ac74a99dad3..f8a79e8f864 100644
--- a/src/librbd/AioRequest.h
+++ b/src/librbd/AioRequest.h
@@ -28,8 +28,7 @@ namespace librbd {
AioRequest();
AioRequest(ImageCtx *ictx, const std::string &oid,
uint64_t objectno, uint64_t off, uint64_t len,
- librados::snap_t snap_id, Context *completion,
- bool hide_enoent);
+ Context *completion, bool hide_enoent);
virtual ~AioRequest();
void complete(int r)
@@ -52,7 +51,6 @@ namespace librbd {
librados::IoCtx *m_ioctx;
std::string m_oid;
uint64_t m_object_no, m_object_off, m_object_len;
- librados::snap_t m_snap_id;
Context *m_completion;
AioCompletion *m_parent_completion;
ceph::bufferlist m_read_data;
@@ -66,9 +64,10 @@ namespace librbd {
vector<pair<uint64_t,uint64_t> >& be,
librados::snap_t snap_id, bool sparse,
Context *completion)
- : AioRequest(ictx, oid, objectno, offset, len, snap_id, completion,
+ : AioRequest(ictx, oid, objectno, offset, len, completion,
false),
m_buffer_extents(be),
+ m_snap_id(snap_id),
m_tried_parent(false), m_sparse(sparse) {
}
virtual ~AioRead() {}
@@ -84,6 +83,7 @@ namespace librbd {
private:
vector<pair<uint64_t,uint64_t> > m_buffer_extents;
+ librados::snap_t m_snap_id;
bool m_tried_parent;
bool m_sparse;
};
@@ -93,9 +93,8 @@ namespace librbd {
AbstractWrite();
AbstractWrite(ImageCtx *ictx, const std::string &oid,
uint64_t object_no, uint64_t object_off, uint64_t len,
- vector<pair<uint64_t,uint64_t> >& objectx, uint64_t object_overlap,
+ vector<pair<uint64_t,uint64_t> >& objectx,
const ::SnapContext &snapc,
- librados::snap_t snap_id,
Context *completion,
bool hide_enoent);
virtual ~AbstractWrite() {}
@@ -135,7 +134,6 @@ namespace librbd {
write_state_d m_state;
vector<pair<uint64_t,uint64_t> > m_object_image_extents;
- uint64_t m_parent_overlap;
librados::ObjectWriteOperation m_write;
librados::ObjectWriteOperation m_copyup;
uint64_t m_snap_seq;
@@ -149,14 +147,13 @@ namespace librbd {
public:
AioWrite(ImageCtx *ictx, const std::string &oid,
uint64_t object_no, uint64_t object_off,
- vector<pair<uint64_t,uint64_t> >& objectx, uint64_t object_overlap,
+ vector<pair<uint64_t,uint64_t> >& objectx,
const ceph::bufferlist &data, const ::SnapContext &snapc,
- librados::snap_t snap_id,
Context *completion)
: AbstractWrite(ictx, oid,
object_no, object_off, data.length(),
- objectx, object_overlap,
- snapc, snap_id,
+ objectx,
+ snapc,
completion, false),
m_write_data(data) {
guard_write();
@@ -177,13 +174,13 @@ namespace librbd {
public:
AioRemove(ImageCtx *ictx, const std::string &oid,
uint64_t object_no,
- vector<pair<uint64_t,uint64_t> >& objectx, uint64_t object_overlap,
- const ::SnapContext &snapc, librados::snap_t snap_id,
+ vector<pair<uint64_t,uint64_t> >& objectx,
+ const ::SnapContext &snapc,
Context *completion)
: AbstractWrite(ictx, oid,
object_no, 0, 0,
- objectx, object_overlap,
- snapc, snap_id, completion,
+ objectx,
+ snapc, completion,
true) {
if (has_parent())
m_write.truncate(0);
@@ -203,13 +200,13 @@ namespace librbd {
public:
AioTruncate(ImageCtx *ictx, const std::string &oid,
uint64_t object_no, uint64_t object_off,
- vector<pair<uint64_t,uint64_t> >& objectx, uint64_t object_overlap,
- const ::SnapContext &snapc, librados::snap_t snap_id,
+ vector<pair<uint64_t,uint64_t> >& objectx,
+ const ::SnapContext &snapc,
Context *completion)
: AbstractWrite(ictx, oid,
object_no, object_off, 0,
- objectx, object_overlap,
- snapc, snap_id, completion,
+ objectx,
+ snapc, completion,
true) {
guard_write();
m_write.truncate(object_off);
@@ -226,13 +223,13 @@ namespace librbd {
public:
AioZero(ImageCtx *ictx, const std::string &oid,
uint64_t object_no, uint64_t object_off, uint64_t object_len,
- vector<pair<uint64_t,uint64_t> >& objectx, uint64_t object_overlap,
- const ::SnapContext &snapc, librados::snap_t snap_id,
+ vector<pair<uint64_t,uint64_t> >& objectx,
+ const ::SnapContext &snapc,
Context *completion)
: AbstractWrite(ictx, oid,
object_no, object_off, object_len,
- objectx, object_overlap,
- snapc, snap_id, completion,
+ objectx,
+ snapc, completion,
true) {
guard_write();
m_write.zero(object_off, object_len);
diff --git a/src/librbd/LibrbdWriteback.cc b/src/librbd/LibrbdWriteback.cc
index b8f4b536e9d..5c2be446c89 100644
--- a/src/librbd/LibrbdWriteback.cc
+++ b/src/librbd/LibrbdWriteback.cc
@@ -147,10 +147,8 @@ namespace librbd {
m_writes[oid.name].push(result);
ldout(m_ictx->cct, 20) << "write will wait for result " << result << dendl;
C_OrderedWrite *req_comp = new C_OrderedWrite(m_ictx->cct, result, this);
- AioWrite *req = new AioWrite(m_ictx, oid.name,
- object_no, off, objectx, object_overlap,
- bl, snapc, LIBRADOS_SNAP_HEAD,
- req_comp);
+ AioWrite *req = new AioWrite(m_ictx, oid.name, object_no, off, objectx,
+ bl, snapc, req_comp);
req->send();
return ++m_tid;
}
diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc
index bf8a0afc062..11cc7904301 100644
--- a/src/librbd/internal.cc
+++ b/src/librbd/internal.cc
@@ -2171,8 +2171,7 @@ reprotect_and_return_err:
bufferlist bl;
string oid = ictx->get_object_name(ono);
Context *comp = new C_SimpleThrottle(&throttle);
- AioWrite *req = new AioWrite(ictx, oid, ono, 0, objectx, object_overlap,
- bl, snapc, CEPH_NOSNAP, comp);
+ AioWrite *req = new AioWrite(ictx, oid, ono, 0, objectx, bl, snapc, comp);
r = req->send();
if (r < 0) {
lderr(cct) << "failed to flatten object " << oid << dendl;
@@ -2917,11 +2916,10 @@ reprotect_and_return_err:
Striper::extent_to_file(ictx->cct, &ictx->layout,
p->objectno, 0, ictx->layout.fl_object_size,
objectx);
- uint64_t object_overlap = ictx->prune_parent_extents(objectx, overlap);
+ ictx->prune_parent_extents(objectx, overlap);
AioWrite *req = new AioWrite(ictx, p->oid.name, p->objectno, p->offset,
- objectx, object_overlap,
- bl, snapc, snap_id, req_comp);
+ objectx, bl, snapc, req_comp);
c->add_request();
r = req->send();
if (r < 0)
@@ -2993,15 +2991,14 @@ reprotect_and_return_err:
}
if (p->offset == 0 && p->length == ictx->layout.fl_object_size) {
- req = new AioRemove(ictx, p->oid.name, p->objectno, objectx, object_overlap,
- snapc, snap_id, req_comp);
+ req = new AioRemove(ictx, p->oid.name, p->objectno, objectx, snapc,
+ req_comp);
} else if (p->offset + p->length == ictx->layout.fl_object_size) {
- req = new AioTruncate(ictx, p->oid.name, p->objectno, p->offset, objectx, object_overlap,
- snapc, snap_id, req_comp);
+ req = new AioTruncate(ictx, p->oid.name, p->objectno, p->offset, objectx,
+ snapc, req_comp);
} else {
req = new AioZero(ictx, p->oid.name, p->objectno, p->offset, p->length,
- objectx, object_overlap,
- snapc, snap_id, req_comp);
+ objectx, snapc, req_comp);
}
r = req->send();