aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/blkdev.h
diff options
context:
space:
mode:
authorIlya Loginov <isloginov@gmail.com>2009-11-26 03:16:19 -0500
committerJens Axboe <jens.axboe@oracle.com>2009-11-26 03:16:19 -0500
commit2d4dc890b5c8fabd818a8586607e6843c4375e62 (patch)
tree9976ed7b0eed0056f8289aeb6a2b0abf8c940454 /include/linux/blkdev.h
parent3586e917f2c7df769d173c4ec99554cb40a911e5 (diff)
block: add helpers to run flush_dcache_page() against a bio and a request's pages
Mtdblock driver doesn't call flush_dcache_page for pages in request. So, this causes problems on architectures where the icache doesn't fill from the dcache or with dcache aliases. The patch fixes this. The ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE symbol was introduced to avoid pointless empty cache-thrashing loops on architectures for which flush_dcache_page() is a no-op. Every architecture was provided with this flush pages on architectires where ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE is equal 1 or do nothing otherwise. See "fix mtd_blkdevs problem with caches on some architectures" discussion on LKML for more information. Signed-off-by: Ilya Loginov <isloginov@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Peter Horton <phorton@bitbox.co.uk> Cc: "Ed L. Cashin" <ecashin@coraid.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r--include/linux/blkdev.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 1cc02972fbe2..e727f6c44c44 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -752,6 +752,17 @@ struct req_iterator {
752#define rq_iter_last(rq, _iter) \ 752#define rq_iter_last(rq, _iter) \
753 (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1) 753 (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1)
754 754
755#ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
756# error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
757#endif
758#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
759extern void rq_flush_dcache_pages(struct request *rq);
760#else
761static inline void rq_flush_dcache_pages(struct request *rq)
762{
763}
764#endif
765
755extern int blk_register_queue(struct gendisk *disk); 766extern int blk_register_queue(struct gendisk *disk);
756extern void blk_unregister_queue(struct gendisk *disk); 767extern void blk_unregister_queue(struct gendisk *disk);
757extern void register_disk(struct gendisk *dev); 768extern void register_disk(struct gendisk *dev);