On Sat, Feb 12, 2011 at 07:15:55PM -0500, Theodore Ts'o wrote: > If we have accumulated a contiguous region of memory to be written > out, and the next page can added to this region, don't bother locking > (and then unlocking the page) before writing out the memory. In the > unlikely event that the next page was being written back by some other > CPU, we can also skip waiting that page to finish writeback. > > Signed-off-by: "Theodore Ts'o" <tytso@xxxxxxx> > --- > fs/ext4/inode.c | 27 ++++++++++----------------- > 1 files changed, 10 insertions(+), 17 deletions(-) > > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index 6dfdc0e..2ac64e3 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -2761,6 +2761,16 @@ static int write_cache_pages_da(struct address_space *mapping, > > *done_index = page->index + 1; > > + /* > + * If we can't merge this page, and we have > + * accumulated an contiguous region, write it > + */ > + if ((mpd->next_page != page->index) && > + (mpd->next_page != mpd->first_page)) { > + mpage_da_map_and_submit(mpd); > + goto ret_extent_tail; > + } > + > lock_page(page); > > /* > @@ -2784,25 +2794,8 @@ static int write_cache_pages_da(struct address_space *mapping, > > BUG_ON(PageWriteback(page)); > > - /* > - * Can we merge this page to current extent? > - */ > if (mpd->next_page != page->index) { > /* > - * Nope, we can't. So, we map > - * non-allocated blocks and start IO > - * on them > - */ > - if (mpd->next_page != mpd->first_page) { > - mpage_da_map_and_submit(mpd); > - /* > - * skip rest of the page in the page_vec > - */ > - unlock_page(page); > - goto ret_extent_tail; > - } > - > - /* > * Start next extent of pages and blocks > */ > mpd->first_page = page->index; Looks good. Josef -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html