kmod-kvdo/fix-generic_make_request.patch
2020-11-11 10:27:25 +08:00

95 lines
3.6 KiB
Diff

From 4f133fd8e48ad7a35d0f36a491fb771ff688a7be Mon Sep 17 00:00:00 2001
From: Andrew Walsh <awalsh@redhat.com>
Date: Thu, 3 Sep 2020 18:11:14 -0400
Subject: [PATCH] Replace generic_make_request with submit_bio_noacct.
<Author: jwiele@redhat.com>
In kernel 5.9, generic_make_request has been renamed to
submit_bio_noacct to more accurately describe its
function. There is a comment in vdo/kernel/kernelLayer.c
referencing generic_make_request which is not touched by this
change because the whole lengthy comment will have to be
massively revised or even removed for upstreaming.
The doxygen comments in dmvdo.c and dmDory.c that reference
generic_make_request cannot easily be made conditional because
doxygen does not process preprocessor directives within
comments. The comments can be rephrased to simply refer to bio
submission because the exact name of the function used to do
the submission is not critical to the meaning of the comments.
Pair: sweettea
.../dmvdo.c
.../ioSubmitter.c
.../kvdoFlush.c
Replace generic_make_request with submit_bio_noacct for kernels > 5.9.
---
vdo/kernel/dmvdo.c | 8 ++++----
vdo/kernel/ioSubmitter.c | 4 ++++
vdo/kernel/kvdoFlush.c | 4 ++++
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/vdo/kernel/dmvdo.c b/vdo/kernel/dmvdo.c
index a6c7b98..f5bed6d 100644
--- a/vdo/kernel/dmvdo.c
+++ b/vdo/kernel/dmvdo.c
@@ -80,8 +80,8 @@ static KernelLayer *getKernelLayerForTarget(struct dm_target *ti)
/**
* Begin VDO processing of a bio. This is called by the device mapper
- * through the "map" function, and has resulted from a call to either
- * submit_bio or generic_make_request.
+ * through the "map" function, and has resulted from a bio being
+ * submitted.
*
* @param ti The dm_target. We only need the "private" member to give
* us the KernelLayer.
@@ -95,11 +95,11 @@ static KernelLayer *getKernelLayerForTarget(struct dm_target *ti)
* DM_MAPIO_SUBMITTED VDO will take care of this I/O, either
* processing it completely and calling
* bio_endio, or forwarding it onward by
- * calling generic_make_request.
+ * submitting it to the next layer.
*
* DM_MAPIO_REMAPPED VDO has modified the bio and the device
* mapper will immediately forward the bio
- * onward using generic_make_request.
+ * onward by submitting it to the next layer.
*
* DM_MAPIO_REQUEUE We do not use this. It is used by device
* mapper devices to defer an I/O request
diff --git a/vdo/kernel/ioSubmitter.c b/vdo/kernel/ioSubmitter.c
index 036bf25..0e28c3f 100644
--- a/vdo/kernel/ioSubmitter.c
+++ b/vdo/kernel/ioSubmitter.c
@@ -291,7 +291,11 @@ static void sendBioToDevice(KVIO *kvio, BIO *bio, TraceLocation location)
countAllBios(kvio, bio);
kvioAddTraceRecord(kvio, location);
bio->bi_next = NULL;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,9,0)
generic_make_request(bio);
+#else
+ submit_bio_noacct(bio);
+#endif
}
/**
diff --git a/vdo/kernel/kvdoFlush.c b/vdo/kernel/kvdoFlush.c
index 7b38af1..ddc3958 100644
--- a/vdo/kernel/kvdoFlush.c
+++ b/vdo/kernel/kvdoFlush.c
@@ -198,7 +198,11 @@ static void kvdoCompleteFlushWork(KvdoWorkItem *item)
prepareFlushBIO(bio, bio->bi_private, getKernelLayerBdev(layer),
bio->bi_end_io);
atomic64_inc(&layer->flushOut);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,9,0)
generic_make_request(bio);
+#else
+ submit_bio_noacct(bio);
+#endif
}