From: Yanhu Cao Date: Fri, 28 Aug 2020 01:49:20 +0000 (+0800) Subject: client: support getting ceph.dir.rsnaps vxattr X-Git-Tag: wip-pdonnell-testing-20200918.022351~197^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1b7d06a9c9413716a0a23f1ac669e44c742a1643;p=ceph-ci.git client: support getting ceph.dir.rsnaps vxattr Fixes: https://tracker.ceph.com/issues/47168 Signed-off-by: Yanhu Cao --- diff --git a/src/client/Client.cc b/src/client/Client.cc index d4286a41398..1ff5cd731e3 100755 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -12163,6 +12163,10 @@ size_t Client::_vxattrcb_dir_rsubdirs(Inode *in, char *val, size_t size) { 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); @@ -12248,6 +12252,7 @@ const Client::VXattr Client::_dir_vxattrs[] = { 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), { diff --git a/src/client/Client.h b/src/client/Client.h index 43af41c4e68..b3224149031 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -1282,6 +1282,7 @@ private: 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); diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 69cd3bdab01..55464e25649 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -3994,7 +3994,7 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session, * 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); @@ -4037,6 +4037,7 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session, 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 { diff --git a/src/messages/MClientReply.h b/src/messages/MClientReply.h index fc7911e5e3e..49304f9ce15 100644 --- a/src/messages/MClientReply.h +++ b/src/messages/MClientReply.h @@ -145,7 +145,7 @@ struct InodeStat { 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); @@ -193,6 +193,9 @@ struct InodeStat { 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 {