void FileJournal::queue_completions_thru(uint64_t seq)
{
- assert(queue_lock.is_locked());
+ assert(finisher_lock.is_locked());
utime_t now = ceph_clock_now(g_ceph_context);
while (!completions_empty()) {
completion_item next = completion_peek_front();
if (next.tracked_op)
next.tracked_op->mark_event("journaled_completion_queued");
}
- queue_cond.Signal();
+ finisher_cond.Signal();
}
int FileJournal::prepare_single_write(bufferlist& bl, off64_t& queue_pos, uint64_t& orig_ops, uint64_t& orig_bytes)
assert(write_pos % header.alignment == 0);
{
- Mutex::Locker locker(queue_lock);
+ Mutex::Locker locker(finisher_lock);
journaled_seq = writing_seq;
// kick finisher?
{
dout(5) << "waiting for completions to empty" << dendl;
{
- Mutex::Locker l(queue_lock);
+ Mutex::Locker l(finisher_lock);
while (!completions_empty())
- queue_cond.Wait(queue_lock);
+ finisher_cond.Wait(finisher_lock);
}
dout(5) << "flush waiting for finisher" << dendl;
finisher->wait_for_empty();
if (completed_something) {
// kick finisher?
// only if we haven't filled up recently!
- Mutex::Locker locker(queue_lock);
+ Mutex::Locker locker(finisher_lock);
journaled_seq = new_journaled_seq;
if (full_state != FULL_NOTFULL) {
dout(10) << "check_aio_completion NOT queueing finisher seq " << journaled_seq
print_header();
{
- Mutex::Locker locker(queue_lock);
+ Mutex::Locker locker(finisher_lock);
// completions!
queue_completions_thru(seq);
if (plug_journal_completions) {
/**
* Implements journaling on top of block device or file.
*
- * Lock ordering is write_lock > aio_lock > queue_lock
+ * Lock ordering is write_lock > aio_lock > finisher_lock
*/
class FileJournal : public Journal {
public:
- /// Protected by queue_lock
+ /// Protected by finisher_lock
struct completion_item {
uint64_t seq;
Context *finish;
write_item() : seq(0), alignment(0) {}
};
- Mutex queue_lock;
- Cond queue_cond;
+ Mutex finisher_lock;
+ Cond finisher_cond;
uint64_t journaled_seq;
bool plug_journal_completions;
void submit_entry(uint64_t seq, bufferlist& bl, int alignment,
Context *oncommit,
TrackedOpRef osd_op = TrackedOpRef());
- /// End protected by queue_lock
+ /// End protected by finisher_lock
/*
* journal header
public:
FileJournal(uuid_d fsid, Finisher *fin, Cond *sync_cond, const char *f, bool dio=false, bool ai=true) :
Journal(fsid, fin, sync_cond),
- queue_lock("FileJournal::queue_lock", false, true, false, g_ceph_context),
+ finisher_lock("FileJournal::finisher_lock", false, true, false, g_ceph_context),
journaled_seq(0),
plug_journal_completions(false),
writeq_lock("FileJournal::writeq_lock", false, true, false, g_ceph_context),