/* try to hold open_sem so that nobody else can open the file */
if (!down_write_trylock(&o->mot_open_sem)) {
ldlm_lock_cancel(lease);
- LDLM_LOCK_PUT(lease);
- RETURN(-EBUSY);
+ GOTO(out_reprocess, rc = -EBUSY);
}
/* Check if the lease open lease has already canceled */
* have been cancelled. It's okay to cancel it now as we've
* held mot_open_sem. */
ldlm_lock_cancel(lease);
- LDLM_LOCK_PUT(lease);
if (lease_broken) /* don't perform release task */
GOTO(out_unlock, rc = -ESTALE);
repbody->valid |= OBD_MD_FLRELEASED;
}
+out_reprocess:
+ ldlm_reprocess_all(lease->l_resource);
+ LDLM_LOCK_PUT(lease);
+
ma->ma_valid = 0;
ma->ma_need = 0;