From: Sage Weil Date: Sat, 6 Feb 2010 19:19:39 +0000 (-0800) Subject: filejournal: make io contiguous in write_bl() for directio X-Git-Tag: v0.19~87 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2ec2d579cb6168ed10d0471c4e4e630dcba7488f;p=ceph.git 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. --- diff --git a/src/os/FileJournal.cc b/src/os/FileJournal.cc index 5e066a925dae..b5b6366e4317 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) {