in->gid = st->gid;
in->btime = st->btime;
in->snap_btime = st->snap_btime;
+ in->snap_metadata = st->snap_metadata;
}
if ((new_version || (new_issued & CEPH_CAP_LINK_SHARED)) &&
version_t version; // auth only
version_t xattr_version;
utime_t snap_btime; // snapshot creation (birth) time
+ std::map<std::string, std::string> snap_metadata;
// inline data
version_t inline_version;
}
utime_t snap_btime;
+ std::map<std::string, std::string> snap_metadata;
SnapRealm *realm = find_snaprealm();
if (snapid != CEPH_NOSNAP && realm) {
// add snapshot timestamp vxattr
ceph_assert(infomap.size() == 1);
const SnapInfo *si = infomap.begin()->second;
snap_btime = si->stamp;
+ snap_metadata = si->metadata;
}
}
* note: encoding matches MClientReply::InodeStat
*/
if (session->info.has_feature(CEPHFS_FEATURE_REPLY_ENCODING)) {
- ENCODE_START(4, 1, bl);
+ ENCODE_START(5, 1, bl);
encode(oi->ino, bl);
encode(snapid, bl);
encode(oi->rdev, bl);
encode(file_i->export_pin, bl);
encode(snap_btime, bl);
encode(file_i->rstat.rsnaps, bl);
+ encode(snap_metadata, bl);
ENCODE_FINISH(bl);
}
else {
quota_info_t quota;
mds_rank_t dir_pin;
+ std::map<std::string,std::string> snap_metadata;
public:
InodeStat() {}
void decode(ceph::buffer::list::const_iterator &p, const uint64_t features) {
using ceph::decode;
if (features == (uint64_t)-1) {
- DECODE_START(4, p);
+ DECODE_START(5, p);
decode(vino.ino, p);
decode(vino.snapid, p);
decode(rdev, p);
if (struct_v >= 4) {
decode(rstat.rsnaps, p);
} // else remains zero
+ if (struct_v >= 5) {
+ decode(snap_metadata, p);
+ }
DECODE_FINISH(p);
}
else {