| .. | .. |
|---|
| 416 | 416 | |
|---|
| 417 | 417 | static void io_submit_add_bh(struct ext4_io_submit *io, |
|---|
| 418 | 418 | struct inode *inode, |
|---|
| 419 | | - struct page *page, |
|---|
| 419 | + struct page *pagecache_page, |
|---|
| 420 | + struct page *bounce_page, |
|---|
| 420 | 421 | struct buffer_head *bh) |
|---|
| 421 | 422 | { |
|---|
| 422 | 423 | int ret; |
|---|
| .. | .. |
|---|
| 430 | 431 | io_submit_init_bio(io, bh); |
|---|
| 431 | 432 | io->io_bio->bi_write_hint = inode->i_write_hint; |
|---|
| 432 | 433 | } |
|---|
| 433 | | - ret = bio_add_page(io->io_bio, page, bh->b_size, bh_offset(bh)); |
|---|
| 434 | + ret = bio_add_page(io->io_bio, bounce_page ?: pagecache_page, |
|---|
| 435 | + bh->b_size, bh_offset(bh)); |
|---|
| 434 | 436 | if (ret != bh->b_size) |
|---|
| 435 | 437 | goto submit_and_retry; |
|---|
| 436 | | - wbc_account_cgroup_owner(io->io_wbc, page, bh->b_size); |
|---|
| 438 | + wbc_account_cgroup_owner(io->io_wbc, pagecache_page, bh->b_size); |
|---|
| 437 | 439 | io->io_next_block++; |
|---|
| 438 | 440 | } |
|---|
| 439 | 441 | |
|---|
| .. | .. |
|---|
| 551 | 553 | do { |
|---|
| 552 | 554 | if (!buffer_async_write(bh)) |
|---|
| 553 | 555 | continue; |
|---|
| 554 | | - io_submit_add_bh(io, inode, |
|---|
| 555 | | - bounce_page ? bounce_page : page, bh); |
|---|
| 556 | + io_submit_add_bh(io, inode, page, bounce_page, bh); |
|---|
| 556 | 557 | nr_submitted++; |
|---|
| 557 | 558 | clear_buffer_dirty(bh); |
|---|
| 558 | 559 | } while ((bh = bh->b_this_page) != head); |
|---|