in->snap_caps |= st->cap.caps;
}
+ in->fscrypt = st->fscrypt;
return in;
}
version_t inline_version;
bufferlist inline_data;
+ bool fscrypt = false; // fscrypt enabled ?
+
bool is_root() const { return ino == MDS_INO_ROOT; }
bool is_symlink() const { return (mode & S_IFMT) == S_IFLNK; }
bool is_dir() const { return (mode & S_IFMT) == S_IFDIR; }
* note: encoding matches MClientReply::InodeStat
*/
if (session->info.has_feature(CEPHFS_FEATURE_REPLY_ENCODING)) {
- ENCODE_START(5, 1, bl);
+ ENCODE_START(6, 1, bl);
encode(oi->ino, bl);
encode(snapid, bl);
encode(oi->rdev, bl);
encode(snap_btime, bl);
encode(file_i->rstat.rsnaps, bl);
encode(snap_metadata, bl);
+ encode(file_i->fscrypt, bl);
ENCODE_FINISH(bl);
}
else {
pi.inode->ctime = mdr->get_op_stamp();
if (mdr->get_op_stamp() > pi.inode->rstat.rctime)
pi.inode->rstat.rctime = mdr->get_op_stamp();
+ if (name == "encryption.ctx"sv)
+ pi.inode->fscrypt = true;
pi.inode->change_attr++;
pi.inode->xattr_version++;
std::basic_string<char,std::char_traits<char>,Allocator<char>> stray_prior_path; //stores path before unlink
+ bool fscrypt = false; // fscrypt enabled ?
+
private:
bool older_is_consistent(const inode_t &other) const;
};
template<template<typename> class Allocator>
void inode_t<Allocator>::encode(ceph::buffer::list &bl, uint64_t features) const
{
- ENCODE_START(16, 6, bl);
+ ENCODE_START(17, 6, bl);
encode(ino, bl);
encode(rdev, bl);
encode(export_ephemeral_random_pin, bl);
encode(export_ephemeral_distributed_pin, bl);
+ encode(fscrypt, bl);
+
ENCODE_FINISH(bl);
}
template<template<typename> class Allocator>
void inode_t<Allocator>::decode(ceph::buffer::list::const_iterator &p)
{
- DECODE_START_LEGACY_COMPAT_LEN(16, 6, 6, p);
+ DECODE_START_LEGACY_COMPAT_LEN(17, 6, 6, p);
decode(ino, p);
decode(rdev, p);
export_ephemeral_distributed_pin = false;
}
+ if (struct_v >= 17) {
+ decode(fscrypt, p);
+ } else {
+ fscrypt = 0;
+ }
+
DECODE_FINISH(p);
}
mds_rank_t dir_pin;
std::map<std::string,std::string> snap_metadata;
+ bool fscrypt = false; // fscrypt enabled ?
+
public:
InodeStat() {}
InodeStat(ceph::buffer::list::const_iterator& p, const uint64_t features) {
void decode(ceph::buffer::list::const_iterator &p, const uint64_t features) {
using ceph::decode;
if (features == (uint64_t)-1) {
- DECODE_START(5, p);
+ DECODE_START(6, p);
decode(vino.ino, p);
decode(vino.snapid, p);
decode(rdev, p);
if (struct_v >= 5) {
decode(snap_metadata, p);
}
+ if (struct_v >= 6) {
+ decode(fscrypt, p);
+ }
DECODE_FINISH(p);
}
else {