if (issued) {
dout(10) << " revoking " << cap_string(issued) << " on " << *in << dendl;
cap->revoke();
- in->state_set(CInode::STATE_NEEDSRECOVER);
+ if (in->inode.max_size > in->inode.size)
+ in->state_set(CInode::STATE_NEEDSRECOVER);
if (!in->filelock.is_stable())
file_eval_gather(&in->filelock);
if (in->is_auth()) {
!file_recover_queue.empty()) {
CInode *in = *file_recover_queue.begin();
file_recover_queue.erase(in);
- file_recovering.insert(in);
- dout(10) << "do_file_recover " << *in << dendl;
- mds->filer->probe(in->inode, in->inode.max_size, &in->inode.size, false,
- 0, new C_MDC_Recover(this, in));
+ if (in->inode.max_size > in->inode.size) {
+ dout(10) << "do_file_recover starting " << in->inode.size << "/" << in->inode.max_size
+ << " " << *in << dendl;
+ file_recovering.insert(in);
+ mds->filer->probe(in->inode, in->inode.max_size, &in->inode.size, false,
+ 0, new C_MDC_Recover(this, in));
+ } else {
+ dout(10) << "do_file_recover skipping " << in->inode.size << "/" << in->inode.max_size
+ << " " << *in << dendl;
+ }
}
}
int Filer::probe(inode_t& inode,
__u64 start_from,
- __u64 *end,
+ __u64 *end, // LB, when !fwd
bool fwd,
int flags,
Context *onfinish)
if (probe->fwd)
probe->probing_len += period - (start_from % period);
} else {
+ assert(start_from > *end);
if (probe->fwd)
probe->probing_len = start_from % period;
probe->from -= probe->probing_len;