• Jan Kara's avatar
    ext4: make ext4_bio_write_page() use BH_Async_Write flags · 0058f965
    Jan Kara authored
    So far ext4_bio_write_page() attached all the pages to ext4_io_end
    structure.  This makes that structure pretty heavy (1 KB for pointers
    + 16 bytes per page attached to the bio).  Also later we would like to
    share ext4_io_end structure among several bios in case IO to a single
    extent needs to be split among several bios and pointing to pages from
    ext4_io_end makes this complex.
    
    We remove page pointers from ext4_io_end and use pointers from bio
    itself instead.  This isn't as easy when blocksize < pagesize because
    then we can have several bios in flight for a single page and we have
    to be careful when to call end_page_writeback().  However this is a
    known problem already solved by block_write_full_page() /
    end_buffer_async_write() so we mimic its behavior here.  We mark
    buffers going to disk with BH_Async_Write flag and in
    ext4_bio_end_io() we check whether there are any buffers with
    BH_Async_Write flag left.  If there are not, we can call
    end_page_writeback().
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Reviewed-by: default avatarDmitry Monakhov <dmonakhov@openvz.org>
    Reviewed-by: default avatarZheng Liu <wenqing.lz@taobao.com>
    0058f965
ext4.h 95.6 KB