void Client::update_inode_file_bits(Inode *in,
- __u64 truncate_seq, __u64 size,
+ __u64 truncate_seq, __u64 truncate_size,
+ __u64 size,
__u64 time_warp_seq, utime_t ctime,
utime_t mtime,
utime_t atime,
dout(10) << "size " << in->inode.size << " -> " << size << dendl;
in->inode.size = size;
in->reported_size = size;
+ in->inode.truncate_size = truncate_size;
}
// be careful with size, mtime, atime
in->inode.ctime = st->ctime;
in->inode.max_size = st->max_size; // right?
- update_inode_file_bits(in, st->truncate_seq, st->size,
+ update_inode_file_bits(in, st->truncate_seq, st->truncate_size, st->size,
st->time_warp_seq, st->ctime, st->mtime, st->atime,
in->caps_issued());
}
m->head.size = in->inode.size;
m->head.max_size = in->inode.max_size;
m->head.truncate_seq = in->inode.truncate_seq;
+ m->head.truncate_size = in->inode.truncate_size;
in->inode.mtime.encode_timeval(&m->head.mtime);
in->inode.atime.encode_timeval(&m->head.atime);
in->inode.ctime.encode_timeval(&m->head.ctime);
::decode(in->xattrs, p);
in->inode.xattr_version = m->head.xattr_version;
}
- update_inode_file_bits(in, m->get_truncate_seq(), m->get_size(),
+ update_inode_file_bits(in, m->get_truncate_seq(), m->get_truncate_size(), m->get_size(),
m->get_time_warp_seq(), m->get_ctime(), m->get_mtime(), m->get_atime(), old_caps);
// max_size
Inode* insert_trace(MClientReply *reply, utime_t ttl, int mds);
void update_inode_file_bits(Inode *in,
- __u64 truncat_seq,__u64 size,
+ __u64 truncate_seq, __u64 truncate_size, __u64 size,
__u64 time_warp_seq, utime_t ctime, utime_t mtime, utime_t atime,
int issued);
void update_inode(Inode *in, InodeStat *st, utime_t ttl, int mds);
struct ceph_file_layout layout;
struct ceph_timespec ctime, mtime, atime;
__le32 time_warp_seq;
- __le64 size, max_size, truncate_seq;
+ __le64 size, max_size, truncate_seq, truncate_size;
__le32 mode, uid, gid;
__le32 nlink;
__le64 files, subdirs, rbytes, rfiles, rsubdirs; /* dir stats */
__le64 xattr_version;
/* filelock */
- __le64 size, max_size;
+ __le64 size, max_size, truncate_size;
__le32 truncate_seq;
struct ceph_timespec mtime, atime, ctime;
struct ceph_file_layout layout;
union {
struct {
__le64 offset, length;
+ __le32 seq;
};
struct {
__le32 name_len;
e.size = i->size;
e.max_size = i->max_size;
e.truncate_seq = i->truncate_seq;
+ e.truncate_size = i->truncate_size;
i->mtime.encode_timeval(&e.mtime);
i->atime.encode_timeval(&e.atime);
e.time_warp_seq = i->time_warp_seq;
m->head.size = i->size;
m->head.max_size = i->max_size;
m->head.truncate_seq = i->truncate_seq;
+ m->head.truncate_size = i->truncate_size;
i->mtime.encode_timeval(&m->head.mtime);
i->atime.encode_timeval(&m->head.atime);
m->head.time_warp_seq = i->time_warp_seq;
uint64_t size; // on directory, # dentries
uint64_t max_size; // client(s) are auth to write this much...
uint32_t truncate_seq;
+ uint64_t truncate_size;
utime_t mtime; // file data modify time.
utime_t atime; // file data access time.
uint32_t time_warp_seq; // count of (potential) mtime/atime timewarps (i.e., utimes())
::encode(size, bl);
::encode(max_size, bl);
::encode(truncate_seq, bl);
+ ::encode(truncate_size, bl);
::encode(mtime, bl);
::encode(atime, bl);
::encode(time_warp_seq, bl);
::decode(size, p);
::decode(max_size, p);
::decode(truncate_seq, p);
+ ::decode(truncate_size, p);
::decode(mtime, p);
::decode(atime, p);
::decode(time_warp_seq, p);
__u64 get_size() { return head.size; }
__u64 get_max_size() { return head.max_size; }
__u32 get_truncate_seq() { return head.truncate_seq; }
+ __u64 get_truncate_size() { return head.truncate_size; }
utime_t get_ctime() { return utime_t(head.ctime); }
utime_t get_mtime() { return utime_t(head.mtime); }
utime_t get_atime() { return utime_t(head.atime); }
unsigned mode, uid, gid, nlink, rdev;
loff_t size, max_size;
version_t truncate_seq;
+ __u64 truncate_size;
utime_t ctime, mtime, atime;
version_t time_warp_seq;
size = e.size;
max_size = e.max_size;
truncate_seq = e.truncate_seq;
+ truncate_size = e.truncate_size;
ctime.decode_timeval(&e.ctime);
mtime.decode_timeval(&e.mtime);
atime.decode_timeval(&e.atime);