mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
Merge branch 'for-4.4/core' of git://git.kernel.dk/linux-block
Pull core block updates from Jens Axboe: "This is the core block pull request for 4.4. I've got a few more topic branches this time around, some of them will layer on top of the core+drivers changes and will come in a separate round. So not a huge chunk of changes in this round. This pull request contains: - Enable blk-mq page allocation tracking with kmemleak, from Catalin. - Unused prototype removal in blk-mq from Christoph. - Cleanup of the q->blk_trace exchange, using cmpxchg instead of two xchg()'s, from Davidlohr. - A plug flush fix from Jeff. - Also from Jeff, a fix that means we don't have to update shared tag sets at init time unless we do a state change. This cuts down boot times on thousands of devices a lot with scsi/blk-mq. - blk-mq waitqueue barrier fix from Kosuke. - Various fixes from Ming: - Fixes for segment merging and splitting, and checks, for the old core and blk-mq. - Potential blk-mq speedup by marking ctx pending at the end of a plug insertion batch in blk-mq. - direct-io no page dirty on kernel direct reads. - A WRITE_SYNC fix for mpage from Roman" * 'for-4.4/core' of git://git.kernel.dk/linux-block: blk-mq: avoid excessive boot delays with large lun counts blktrace: re-write setting q->blk_trace blk-mq: mark ctx as pending at batch in flush plug path blk-mq: fix for trace_block_plug() block: check bio_mergeable() early before merging blk-mq: check bio_mergeable() early before merging block: avoid to merge splitted bio block: setup bi_phys_segments after splitting block: fix plug list flushing for nomerge queues blk-mq: remove unused blk_mq_clone_flush_request prototype blk-mq: fix waitqueue_active without memory barrier in block/blk-mq-tag.c fs: direct-io: don't dirtying pages for ITER_BVEC/ITER_KVEC direct read fs/mpage.c: forgotten WRITE_SYNC in case of data integrity write block: kmemleak: Track the page allocations for struct request
This commit is contained in:
23
fs/mpage.c
23
fs/mpage.c
@@ -485,6 +485,7 @@ static int __mpage_writepage(struct page *page, struct writeback_control *wbc,
|
||||
struct buffer_head map_bh;
|
||||
loff_t i_size = i_size_read(inode);
|
||||
int ret = 0;
|
||||
int wr = (wbc->sync_mode == WB_SYNC_ALL ? WRITE_SYNC : WRITE);
|
||||
|
||||
if (page_has_buffers(page)) {
|
||||
struct buffer_head *head = page_buffers(page);
|
||||
@@ -593,7 +594,7 @@ page_is_mapped:
|
||||
* This page will go to BIO. Do we need to send this BIO off first?
|
||||
*/
|
||||
if (bio && mpd->last_block_in_bio != blocks[0] - 1)
|
||||
bio = mpage_bio_submit(WRITE, bio);
|
||||
bio = mpage_bio_submit(wr, bio);
|
||||
|
||||
alloc_new:
|
||||
if (bio == NULL) {
|
||||
@@ -620,7 +621,7 @@ alloc_new:
|
||||
wbc_account_io(wbc, page, PAGE_SIZE);
|
||||
length = first_unmapped << blkbits;
|
||||
if (bio_add_page(bio, page, length, 0) < length) {
|
||||
bio = mpage_bio_submit(WRITE, bio);
|
||||
bio = mpage_bio_submit(wr, bio);
|
||||
goto alloc_new;
|
||||
}
|
||||
|
||||
@@ -630,7 +631,7 @@ alloc_new:
|
||||
set_page_writeback(page);
|
||||
unlock_page(page);
|
||||
if (boundary || (first_unmapped != blocks_per_page)) {
|
||||
bio = mpage_bio_submit(WRITE, bio);
|
||||
bio = mpage_bio_submit(wr, bio);
|
||||
if (boundary_block) {
|
||||
write_boundary_block(boundary_bdev,
|
||||
boundary_block, 1 << blkbits);
|
||||
@@ -642,7 +643,7 @@ alloc_new:
|
||||
|
||||
confused:
|
||||
if (bio)
|
||||
bio = mpage_bio_submit(WRITE, bio);
|
||||
bio = mpage_bio_submit(wr, bio);
|
||||
|
||||
if (mpd->use_writepage) {
|
||||
ret = mapping->a_ops->writepage(page, wbc);
|
||||
@@ -698,8 +699,11 @@ mpage_writepages(struct address_space *mapping,
|
||||
};
|
||||
|
||||
ret = write_cache_pages(mapping, wbc, __mpage_writepage, &mpd);
|
||||
if (mpd.bio)
|
||||
mpage_bio_submit(WRITE, mpd.bio);
|
||||
if (mpd.bio) {
|
||||
int wr = (wbc->sync_mode == WB_SYNC_ALL ?
|
||||
WRITE_SYNC : WRITE);
|
||||
mpage_bio_submit(wr, mpd.bio);
|
||||
}
|
||||
}
|
||||
blk_finish_plug(&plug);
|
||||
return ret;
|
||||
@@ -716,8 +720,11 @@ int mpage_writepage(struct page *page, get_block_t get_block,
|
||||
.use_writepage = 0,
|
||||
};
|
||||
int ret = __mpage_writepage(page, wbc, &mpd);
|
||||
if (mpd.bio)
|
||||
mpage_bio_submit(WRITE, mpd.bio);
|
||||
if (mpd.bio) {
|
||||
int wr = (wbc->sync_mode == WB_SYNC_ALL ?
|
||||
WRITE_SYNC : WRITE);
|
||||
mpage_bio_submit(wr, mpd.bio);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(mpage_writepage);
|
||||
|
Reference in New Issue
Block a user