{
assert(in->is_auth());
if (!forceupdate && !in->filelock.can_wrlock()) {
- // try again later
- in->filelock.add_waiter(SimpleLock::WAIT_STABLE, new C_MDL_CheckMaxSize(this, in));
- dout(10) << "check_inode_max_size can't wrlock, waiting on " << *in << dendl;
- return false;
+ // lock?
+ if (in->filelock.is_stable())
+ file_lock(&in->filelock);
+ if (!in->filelock.can_wrlock()) {
+ // try again later
+ in->filelock.add_waiter(SimpleLock::WAIT_STABLE, new C_MDL_CheckMaxSize(this, in));
+ dout(10) << "check_inode_max_size can't wrlock, waiting on " << *in << dendl;
+ return false;
+ }
}
inode_t *latest = in->get_projected_inode();