From a5c067427d7a17507a2085652b05f7d00cd5d380 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Mon, 20 Apr 2015 11:25:49 +0800 Subject: [PATCH] client: inlcude inline data in FLUSHSNAP cap message Signed-off-by: Yan, Zheng --- src/client/Client.cc | 14 +++++++++++++- src/client/Inode.h | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 833ad0acadb4..618adbe342fa 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3040,7 +3040,7 @@ void Client::queue_cap_snap(Inode *in, snapid_t seq) in->cap_snaps[seq] = capsnap; capsnap->context = in->snaprealm->get_snap_context(); capsnap->issued = in->caps_issued(); - capsnap->dirty = in->caps_dirty(); // a bit conservative? + capsnap->dirty = in->caps_dirty(); capsnap->dirty_data = (used & CEPH_CAP_FILE_BUFFER); @@ -3070,6 +3070,13 @@ void Client::finish_cap_snap(Inode *in, CapSnap *capsnap, int used) capsnap->ctime = in->ctime; capsnap->time_warp_seq = in->time_warp_seq; + capsnap->dirty |= in->caps_dirty(); + + if (capsnap->dirty & CEPH_CAP_FILE_WR) { + capsnap->inline_data = in->inline_data; + capsnap->inline_version = in->inline_version; + } + if (used & CEPH_CAP_FILE_BUFFER) { ldout(cct, 10) << "finish_cap_snap " << *in << " cap_snap " << capsnap << " used " << used << " WRBUFFER, delaying" << dendl; @@ -3146,6 +3153,11 @@ void Client::flush_snaps(Inode *in, bool all_again, CapSnap *again) capsnap->atime.encode_timeval(&m->head.atime); m->head.time_warp_seq = capsnap->time_warp_seq; + if (capsnap->dirty & CEPH_CAP_FILE_WR) { + m->inline_version = in->inline_version; + m->inline_data = in->inline_data; + } + session->con->send_message(m); } } diff --git a/src/client/Inode.h b/src/client/Inode.h index 4a274026150f..4b2e32872dca 100644 --- a/src/client/Inode.h +++ b/src/client/Inode.h @@ -54,6 +54,9 @@ struct CapSnap { map xattrs; version_t xattr_version; + bufferlist inline_data; + version_t inline_version; + bool writing, dirty_data; uint64_t flush_tid; xlist::item flushing_item; @@ -61,7 +64,7 @@ struct CapSnap { CapSnap(Inode *i) : in(i), issued(0), dirty(0), size(0), time_warp_seq(0), mode(0), uid(0), gid(0), xattr_version(0), - writing(false), dirty_data(false), flush_tid(0), + inline_version(0), writing(false), dirty_data(false), flush_tid(0), flushing_item(this) {} -- 2.47.3