Create a separate union in the args and clean up the code a bit so that
this doesn't reuse the (unrelated) watch helpers. No change in
protocol.
Signed-off-by: Sage Weil <sage@inktank.com>
__le64 ver;
__u8 flag; /* 0 = unwatch, 1 = watch */
} __attribute__ ((packed)) watch;
+ struct {
+ __le64 unused;
+ __le64 ver;
+ } __attribute__ ((packed)) assert_ver;
struct {
__le64 offset, length;
__le64 src_offset;
case CEPH_OSD_OP_ASSERT_SRC_VERSION:
++ctx->num_read;
{
- uint64_t ver = op.watch.ver;
+ uint64_t ver = op.assert_ver.ver;
if (!ver)
result = -EINVAL;
else if (ver < src_obc->obs.oi.user_version)
case CEPH_OSD_OP_LIST_WATCHERS:
case CEPH_OSD_OP_LIST_SNAPS:
break;
+ case CEPH_OSD_OP_ASSERT_VER:
+ out << " v" << op.op.assert_ver.ver;
+ break;
case CEPH_OSD_OP_TRUNCATE:
out << " " << op.op.extent.offset;
break;
}
void assert_version(uint64_t ver) {
- bufferlist bl;
- add_watch(CEPH_OSD_OP_ASSERT_VER, 0, ver, 0, bl);
+ OSDOp& osd_op = add_op(CEPH_OSD_OP_ASSERT_VER);
+ osd_op.op.assert_ver.ver = ver;
}
void assert_src_version(const object_t& srcoid, snapid_t srcsnapid, uint64_t ver) {
bufferlist bl;