{
return snprintf(val, size, "%llu", (unsigned long long)in->rstat.rsubdirs);
}
+size_t Client::_vxattrcb_dir_rsnaps(Inode *in, char *val, size_t size)
+{
+ return snprintf(val, size, "%llu", (unsigned long long)in->rstat.rsnaps);
+}
size_t Client::_vxattrcb_dir_rbytes(Inode *in, char *val, size_t size)
{
return snprintf(val, size, "%llu", (unsigned long long)in->rstat.rbytes);
XATTR_NAME_CEPH2(dir, rentries, VXATTR_RSTAT),
XATTR_NAME_CEPH2(dir, rfiles, VXATTR_RSTAT),
XATTR_NAME_CEPH2(dir, rsubdirs, VXATTR_RSTAT),
+ XATTR_NAME_CEPH2(dir, rsnaps, VXATTR_RSTAT),
XATTR_NAME_CEPH2(dir, rbytes, VXATTR_RSTAT),
XATTR_NAME_CEPH2(dir, rctime, VXATTR_RSTAT),
{
size_t _vxattrcb_dir_rentries(Inode *in, char *val, size_t size);
size_t _vxattrcb_dir_rfiles(Inode *in, char *val, size_t size);
size_t _vxattrcb_dir_rsubdirs(Inode *in, char *val, size_t size);
+ size_t _vxattrcb_dir_rsnaps(Inode *in, char *val, size_t size);
size_t _vxattrcb_dir_rbytes(Inode *in, char *val, size_t size);
size_t _vxattrcb_dir_rctime(Inode *in, char *val, size_t size);
* note: encoding matches MClientReply::InodeStat
*/
if (session->info.has_feature(CEPHFS_FEATURE_REPLY_ENCODING)) {
- ENCODE_START(3, 1, bl);
+ ENCODE_START(4, 1, bl);
encode(oi->ino, bl);
encode(snapid, bl);
encode(oi->rdev, bl);
encode(any_i->change_attr, bl);
encode(file_i->export_pin, bl);
encode(snap_btime, bl);
+ encode(file_i->rstat.rsnaps, bl);
ENCODE_FINISH(bl);
}
else {
void decode(ceph::buffer::list::const_iterator &p, const uint64_t features) {
using ceph::decode;
if (features == (uint64_t)-1) {
- DECODE_START(3, p);
+ DECODE_START(4, p);
decode(vino.ino, p);
decode(vino.snapid, p);
decode(rdev, p);
if (struct_v >= 3) {
decode(snap_btime, p);
} // else remains zero
+ if (struct_v >= 4) {
+ decode(rstat.rsnaps, p);
+ } // else remains zero
DECODE_FINISH(p);
}
else {