dout(0) << "WARNING: " << *in << " mds time_warp_seq "
<< time_warp_seq << " > " << in->inode.time_warp_seq << dendl;
} else if (issued & (CEPH_CAP_WR|CEPH_CAP_WRBUFFER)) {
- if (size > in->inode.size)
+ if (size > in->inode.size) {
in->inode.size = size;
+ in->reported_size = size;
+ }
if (time_warp_seq > in->inode.time_warp_seq) {
in->inode.ctime = ctime;
in->inode.mtime = mtime;
warn = true;
} else {
in->inode.size = size;
+ in->reported_size = size;
if (time_warp_seq >= in->inode.time_warp_seq) {
in->inode.ctime = ctime;
in->inode.mtime = mtime;
/* approaching file_max? */
if ((cap.issued & CEPH_CAP_WR) &&
- (in->inode.size << 1) >= in->inode.max_size) {
- //(in->i_reported_size << 1) < in->inode.max_size) {
- dout(10) << "size approaching max_size" << dendl;
+ (in->inode.size << 1) >= in->inode.max_size &&
+ (in->reported_size << 1) < in->inode.max_size) {
+ dout(10) << "size approaching max_size" << dendl;
goto ack;
}
it->second.seq,
it->second.issued,
wanted);
+ in->reported_size = in->inode.size;
m->set_max_size(in->wanted_max_size);
in->requested_max_size = in->wanted_max_size;
messenger->send_message(m, mdsmap->get_inst(it->first));
objectcacher->truncate_set(in->inode.ino, ls);
}
- in->inode.size = m->get_size();
+ in->reported_size = in->inode.size = m->get_size();
delete m;
return;
}
// extend file?
if (totalwritten + offset > in->inode.size) {
in->inode.size = totalwritten + offset;
+
+ if ((in->inode.size << 1) >= in->inode.max_size &&
+ (in->reported_size << 1) < in->inode.max_size)
+ check_caps(in);
+
dout(7) << "wrote to " << totalwritten+offset << ", extending file size" << dendl;
} else {
dout(7) << "wrote to " << totalwritten+offset << ", leaving file size at " << in->inode.size << dendl;
map<int,int> open_by_mode;
map<int,int> cap_refs;
- __u64 wanted_max_size, requested_max_size;
+ __u64 reported_size, wanted_max_size, requested_max_size;
int ref; // ref count. 1 for each dentry, fh that links to me.
int ll_ref; // separate ref count for ll client
//inode(_inode),
lease_mask(0), lease_mds(-1),
dir_auth(-1), dir_hashed(false), dir_replicated(false),
- wanted_max_size(0), requested_max_size(0),
+ reported_size(0), wanted_max_size(0), requested_max_size(0),
ref(0), ll_ref(0),
dir(0), dn(0), symlink(0),
hack_balance_reads(false)