From 1dcd705e16c26d804e08fdfa0ffeda7d7db23b67 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Sun, 1 Dec 2019 19:46:31 +0100 Subject: [PATCH] infra: adapt to block layer changes, kernel 4.11 --- kernel/compat.h | 14 ++++++++++++++ kernel/lib_mapfree.c | 9 ++++++++- kernel/mars_bio.c | 10 ++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/kernel/compat.h b/kernel/compat.h index b5350d63..3f94166a 100644 --- a/kernel/compat.h +++ b/kernel/compat.h @@ -71,6 +71,20 @@ extern int _compat_unlink( #define MARS_HAS_BVEC_ITER #endif +/* Detect upstream commits + * dc3b17cc8bf21307c7e076e7c778d5db756f7871 + * d03f6cdc1fc422accb734c7c07a661a0018d8631 + * b1d2dc5659b41741f5a29b2ade76ffb4e5bb13d8 + * via fd2d332677c687ca90c12a47d6c377c547100b56 + */ +#include +#ifdef BLK_QC_T_INTERNAL +#define MARS_HAS_BDI_GET +#endif +#ifdef MARS_HAS_BDI_GET +#include +#endif + /* adaptation to 4246a0b63bd8f56a1469b12eafeb875b1041a451 and 8ae126660fddbeebb9251a174e6fa45b6ad8f932 */ #ifndef bio_io_error #define MARS_HAS_BI_ERROR diff --git a/kernel/lib_mapfree.c b/kernel/lib_mapfree.c index 862cabdb..1c219665 100644 --- a/kernel/lib_mapfree.c +++ b/kernel/lib_mapfree.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include @@ -215,8 +214,16 @@ struct mapfree_info *mapfree_get(const char *name, int flags) } if (S_ISBLK(inode->i_mode)) { +#ifdef MARS_HAS_BDI_GET + struct backing_dev_info *bdi = + I_BDEV(inode)->bd_bdi; + MARS_INF("changing blkdev readahead from %lu to %d\n", + bdi->ra_pages, ra); + bdi->ra_pages = ra; +#else /* deprecated old code */ MARS_INF("changing blkdev readahead from %lu to %d\n", inode->i_bdev->bd_disk->queue->backing_dev_info.ra_pages, ra); inode->i_bdev->bd_disk->queue->backing_dev_info.ra_pages = ra; +#endif } if (flags & O_DIRECT) { // never share them diff --git a/kernel/mars_bio.c b/kernel/mars_bio.c index 99e1d476..633bc804 100644 --- a/kernel/mars_bio.c +++ b/kernel/mars_bio.c @@ -791,6 +791,9 @@ static int bio_switch(struct bio_brick *brick) struct address_space *mapping; struct inode *inode; struct request_queue *q; +#ifdef MARS_HAS_BDI_GET + struct backing_dev_info *bdi; +#endif brick->mf = mapfree_get(path, flags); if (unlikely(!brick->mf)) { @@ -820,8 +823,15 @@ static int bio_switch(struct bio_brick *brick) goto done; } +#ifdef MARS_HAS_BDI_GET + bdi = I_BDEV(inode)->bd_bdi; + MARS_INF("'%s' ra_pages OLD=%lu NEW=%d\n", path, + bdi->ra_pages, brick->ra_pages); + bdi->ra_pages = brick->ra_pages; +#else MARS_INF("'%s' ra_pages OLD=%lu NEW=%d\n", path, q->backing_dev_info.ra_pages, brick->ra_pages); q->backing_dev_info.ra_pages = brick->ra_pages; +#endif q->nr_requests = bio_nr_requests;