From 2ec2d579cb6168ed10d0471c4e4e630dcba7488f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 6 Feb 2010 11:19:39 -0800 Subject: [PATCH] filejournal: make io contiguous in write_bl() for directio Previously we were splitting the io for writing the header plus first segment following a wrap. --- src/os/FileJournal.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/os/FileJournal.cc b/src/os/FileJournal.cc index 5e066a925daea..b5b6366e4317e 100644 --- a/src/os/FileJournal.cc +++ b/src/os/FileJournal.cc @@ -444,6 +444,12 @@ bool FileJournal::prepare_single_write(bufferlist& bl, off64_t& queue_pos) void FileJournal::write_bl(off64_t& pos, bufferlist& bl) { + // make sure this is a single, contiguous buffer + if (directio && !bl.is_contiguous()) { + bl.rebuild(); + assert((bl.length() & ~PAGE_MASK) == 0); + } + ::lseek64(fd, pos, SEEK_SET); for (list::const_iterator it = bl.buffers().begin(); @@ -489,13 +495,6 @@ void FileJournal::do_write(bufferlist& bl) // entry off64_t pos = write_pos; - // make sure this is a single, contiguous buffer - if (directio && !bl.is_contiguous()) { - bl.rebuild(); - //dout(0) << "len " << bl.length() << " page_mask " << PAGE_MASK << " ~" << ~PAGE_MASK << dendl; - assert((bl.length() & ~PAGE_MASK) == 0); - } - // split? off64_t split = 0; if (pos + bl.length() > header.max_size) { -- 2.39.5