}
}
+ utime_t snap_btime;
SnapRealm *realm = find_snaprealm();
+ if (snapid != CEPH_NOSNAP && realm) {
+ // add snapshot timestamp vxattr
+ map<snapid_t,const SnapInfo*> infomap;
+ realm->get_snap_info(infomap,
+ snapid, // min
+ snapid); // max
+ if (!infomap.empty()) {
+ ceph_assert(infomap.size() == 1);
+ const SnapInfo *si = infomap.begin()->second;
+ snap_btime = si->stamp;
+ }
+ }
+
bool no_caps = !valid ||
session->is_stale() ||
* note: encoding matches MClientReply::InodeStat
*/
if (session->info.has_feature(CEPHFS_FEATURE_REPLY_ENCODING)) {
- ENCODE_START(2, 1, bl);
+ ENCODE_START(3, 1, bl);
encode(oi->ino, bl);
encode(snapid, bl);
encode(oi->rdev, bl);
encode(any_i->btime, bl);
encode(any_i->change_attr, bl);
encode(file_i->export_pin, bl);
+ encode(snap_btime, bl);
ENCODE_FINISH(bl);
}
else {
version_t xattr_version = 0;
ceph_mds_reply_cap cap;
file_layout_t layout;
- utime_t ctime, btime, mtime, atime;
+ utime_t ctime, btime, mtime, atime, snap_btime;
uint32_t time_warp_seq = 0;
uint64_t size = 0, max_size = 0;
uint64_t change_attr = 0;
} else {
dir_pin = -ENODATA;
}
+ if (struct_v >= 3) {
+ decode(snap_btime, p);
+ } // else remains zero
DECODE_FINISH(p);
}
else {