mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
fs/block_dev.c: add bdev_read_page() and bdev_write_page()
A block device driver may choose to provide a rw_page operation. These will be called when the filesystem is attempting to do page sized I/O to page cache pages (ie not for direct I/O). This does preclude I/Os that are larger than page size, so this may only be a performance gain for some devices. Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com> Tested-by: Dheeraj Reddy <dheeraj.reddy@intel.com> Cc: Dave Chinner <david@fromorbit.com> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
57d998456a
commit
47a191fd38
12
fs/mpage.c
12
fs/mpage.c
@@ -269,6 +269,11 @@ do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages,
|
||||
|
||||
alloc_new:
|
||||
if (bio == NULL) {
|
||||
if (first_hole == blocks_per_page) {
|
||||
if (!bdev_read_page(bdev, blocks[0] << (blkbits - 9),
|
||||
page))
|
||||
goto out;
|
||||
}
|
||||
bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
|
||||
min_t(int, nr_pages, bio_get_nr_vecs(bdev)),
|
||||
GFP_KERNEL);
|
||||
@@ -587,6 +592,13 @@ page_is_mapped:
|
||||
|
||||
alloc_new:
|
||||
if (bio == NULL) {
|
||||
if (first_unmapped == blocks_per_page) {
|
||||
if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
|
||||
page, wbc)) {
|
||||
clean_buffers(page, first_unmapped);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),
|
||||
bio_get_nr_vecs(bdev), GFP_NOFS|__GFP_HIGH);
|
||||
if (bio == NULL)
|
||||
|
Reference in New Issue
Block a user