diff options
Diffstat (limited to 'fs/ext4/page-io.c')
| -rw-r--r-- | fs/ext4/page-io.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c index beaec6d81074..1e4db96a04e6 100644 --- a/fs/ext4/page-io.c +++ b/fs/ext4/page-io.c @@ -409,7 +409,8 @@ static void io_submit_init_bio(struct ext4_io_submit *io,  static void io_submit_add_bh(struct ext4_io_submit *io,  			     struct inode *inode, -			     struct page *page, +			     struct page *pagecache_page, +			     struct page *bounce_page,  			     struct buffer_head *bh)  {  	int ret; @@ -421,10 +422,11 @@ submit_and_retry:  	}  	if (io->io_bio == NULL)  		io_submit_init_bio(io, bh); -	ret = bio_add_page(io->io_bio, page, bh->b_size, bh_offset(bh)); +	ret = bio_add_page(io->io_bio, bounce_page ?: pagecache_page, +			   bh->b_size, bh_offset(bh));  	if (ret != bh->b_size)  		goto submit_and_retry; -	wbc_account_cgroup_owner(io->io_wbc, page, bh->b_size); +	wbc_account_cgroup_owner(io->io_wbc, pagecache_page, bh->b_size);  	io->io_next_block++;  } @@ -561,8 +563,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io,  	do {  		if (!buffer_async_write(bh))  			continue; -		io_submit_add_bh(io, inode, -				 bounce_page ? bounce_page : page, bh); +		io_submit_add_bh(io, inode, page, bounce_page, bh);  	} while ((bh = bh->b_this_page) != head);  unlock:  	unlock_page(page);  |