|
@@ -60,7 +60,6 @@ void ext4_ioend_wait(struct inode *inode)
|
|
|
static void put_io_page(struct ext4_io_page *io_page)
|
|
|
{
|
|
|
if (atomic_dec_and_test(&io_page->p_count)) {
|
|
|
- end_page_writeback(io_page->p_page);
|
|
|
put_page(io_page->p_page);
|
|
|
kmem_cache_free(io_page_cachep, io_page);
|
|
|
}
|
|
@@ -234,9 +233,9 @@ static void ext4_end_bio(struct bio *bio, int error)
|
|
|
} while (bh != head);
|
|
|
}
|
|
|
|
|
|
- put_io_page(io_end->pages[i]);
|
|
|
+ if (atomic_read(&io_end->pages[i]->p_count) == 1)
|
|
|
+ end_page_writeback(io_end->pages[i]->p_page);
|
|
|
}
|
|
|
- io_end->num_io_pages = 0;
|
|
|
inode = io_end->inode;
|
|
|
|
|
|
if (error) {
|
|
@@ -428,6 +427,8 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
|
|
|
* PageWriteback bit from the page to prevent the system from
|
|
|
* wedging later on.
|
|
|
*/
|
|
|
+ if (atomic_read(&io_page->p_count) == 1)
|
|
|
+ end_page_writeback(page);
|
|
|
put_io_page(io_page);
|
|
|
return ret;
|
|
|
}
|