diff options
author | Sage Weil <sage@inktank.com> | 2013-09-16 22:53:47 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-09-17 06:27:35 -0700 |
commit | 21900f55ff19edc4e1244729344ed8de9e98a8ea (patch) | |
tree | 380ec4711266b13bcf2670274f552a3616fadc3f | |
parent | 0b68021748f623e28bb40510b948d7ba58c2b125 (diff) | |
download | ceph-21900f55ff19edc4e1244729344ed8de9e98a8ea.tar.gz |
mds: share inline data in InodeStat
-rw-r--r-- | src/mds/CInode.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 46f8d33cfd8..759017c646a 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -2825,6 +2825,16 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session, e.files = i->dirstat.nfiles; e.subdirs = i->dirstat.nsubdirs; + // inline data + uint64_t inline_version = 0; + bufferlist inline_data; + if (!cap || (cap->client_inline_version < i->inline_version)) { + inline_version = i->inline_version; + inline_data = i->inline_data; + if (cap) + cap->client_inline_version = i->inline_version; + } + // nest (do same as file... :/) i->rstat.rctime.encode_timeval(&e.rctime); e.rbytes = i->rstat.rbytes; @@ -2863,6 +2873,7 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session, bytes += (sizeof(__u32) + sizeof(__u32)) * dirfragtree._splits.size(); bytes += sizeof(__u32) + symlink.length(); bytes += sizeof(__u32) + xbl.length(); + bytes += sizeof(__u64) + sizeof(__u32) + inline_data.length(); if (bytes > max_bytes) return -ENOSPC; } @@ -2958,6 +2969,10 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session, ::encode(i->dir_layout, bl); } ::encode(xbl, bl); + if (session->connection->has_feature(CEPH_FEATURE_MDS_INLINE_DATA)) { + ::encode(inline_version, bl); + ::encode(inline_data, bl); + } return valid; } |