Rearranged locks in preallocate to avoid possible deadlock with
compact_log_async_dump_metadata_NF.
Cycle was:
L->N rename/mkdir
N->F compact_log_async_dump_metadata_NF
F->L preallocate
Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
int BlueFS::preallocate(FileRef f, uint64_t off, uint64_t len)
{
+ std::lock_guard ll(log.lock);
std::lock_guard fl(f->lock);
dout(10) << __func__ << " file " << f->fnode << " 0x"
<< std::hex << off << "~" << len << std::dec << dendl;
vselector->add_usage(f->vselector_hint, f->fnode);
if (r < 0)
return r;
- std::lock_guard ll(log.lock);
log.t.op_file_update(f->fnode);
}
return 0;
* log L | < <
* dirty D |
* nodes N | <
- * File F | <
- * FileWriter W | < < <
+ * File F |
+ * FileWriter W | < < <
*
* Claim: Deadlock is possible IFF graph contains cycles.
*/