return prepare_pool_op_auid(m);
}
- bufferlist *blp = NULL;
int ret = 0;
bool changed = false;
else
pp = *osdmap.get_pg_pool(m->pool);
+ bufferlist reply_data;
+
// pool snaps vs unmanaged snaps are mutually exclusive
switch (m->op) {
case POOL_OP_CREATE_SNAP:
case POOL_OP_CREATE_UNMANAGED_SNAP:
{
- blp = new bufferlist();
uint64_t snapid;
pp.add_unmanaged_snap(snapid);
- ::encode(snapid, *blp);
+ ::encode(snapid, reply_data);
changed = true;
}
break;
}
out:
- paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, ret, pending_inc.epoch, blp));
+ paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, ret, pending_inc.epoch, &reply_data));
propose_pending();
return false;
}
MPoolOp *m;
int replyCode;
int epoch;
- bufferlist *reply_data;
- C_PoolOp(OSDMonitor * osd, MPoolOp *m_, int rc, int e, bufferlist *rd=NULL) :
- osdmon(osd), m(m_), replyCode(rc), epoch(e), reply_data(rd) {}
+ bufferlist reply_data;
+ C_PoolOp(OSDMonitor * osd, MPoolOp *m_, int rc, int e, bufferlist *rd=NULL) :
+ osdmon(osd), m(m_), replyCode(rc), epoch(e) {
+ if (rd)
+ reply_data = *rd;
+ }
void finish(int r) {
if (r == -ECANCELED) {
if (m)
m->put();
return;
}
- osdmon->_pool_op_reply(m, replyCode, epoch, reply_data);
+ osdmon->_pool_op_reply(m, replyCode, epoch, &reply_data);
}
};