Accepting request 987977 from home:hmzhao:branches:network:ha-clustering:Factory

- drbd: build error against kernel v5.18 (bsc#1201335)
  - remove patch: move_bdi_from_request_queue_to_gendisk
  - change exist patches name from bsc#1192929:
    old name:
      make_block_holder_optional.patch
      move_kvmalloc_related_to_slab.patch
      polling_to_bio_base.patch
      pass_gend_to_blk_queue_update_readahead.patch
      dax_support.patch
      add_disk_error_handle.patch
      have_void_drbd_submit_bio.patch
      remove_bdgrab.patch
    new name:
      bsc-1192929_01-make_block_holder_optional.patch
      bsc-1192929_02-move_kvmalloc_related_to_slab.patch
      bsc-1192929_03-polling_to_bio_base.patch
      bsc-1192929_04-pass_gend_to_blk_queue_update_readahead.patch
      bsc-1192929_06-dax_support.patch
      bsc-1192929_07-add_disk_error_handle.patch
      bsc-1192929_08-have_void_drbd_submit_bio.patch
      bsc-1192929_09-remove_bdgrab.patch
  - add patch:
    + bsc-1201335_01-compat-test-and-cocci-patch-for-bdi-in-gendisk.patch
    + bsc-1201335_02-0001-compat-only-apply-bdi-pointer-patch-if-bdi-is-in-req.patch
    + bsc-1201335_03-genhd.patch
    + bsc-1201335_04-bio_alloc_bioset.patch
    + bsc-1201335_05-bio_alloc.patch
    + bsc-1201335_06-bdi.patch
    + bsc-1201335_07-write-same.patch
    + bsc-1201335_08-bio_clone_fast.patch

OBS-URL: https://build.opensuse.org/request/show/987977
OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/drbd?expand=0&rev=137
This commit is contained in:
Roger Zhou 2022-07-09 00:28:28 +00:00 committed by Git OBS Bridge
parent 43a00e1438
commit 1eb6b25c2a
19 changed files with 578 additions and 94 deletions

View File

@ -0,0 +1,55 @@
From 25592a4a902415cf1a353a1e26ba11b4ccc0eca7 Mon Sep 17 00:00:00 2001
From: <christoph.boehmwalder@linbit.com>
Date: Wed, 6 Apr 2022 12:27:36 +0200
Subject: [PATCH] compat: test and cocci patch for bdi in gendisk
---
.../cocci/struct_gendisk__no_has_backing_dev_info.cocci | 6 ++++++
drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++
.../tests/struct_gendisk_has_backing_dev_info.c | 8 ++++++++
3 files changed, 17 insertions(+)
create mode 100644 drbd/drbd-kernel-compat/cocci/struct_gendisk__no_has_backing_dev_info.cocci
create mode 100644 drbd/drbd-kernel-compat/tests/struct_gendisk_has_backing_dev_info.c
diff --git a/drbd/drbd-kernel-compat/cocci/struct_gendisk__no_has_backing_dev_info.cocci b/drbd/drbd-kernel-compat/cocci/struct_gendisk__no_has_backing_dev_info.cocci
new file mode 100644
index 000000000000..b3d290710ee8
--- /dev/null
+++ b/drbd/drbd-kernel-compat/cocci/struct_gendisk__no_has_backing_dev_info.cocci
@@ -0,0 +1,6 @@
+@@
+struct drbd_device *d;
+@@
+d->ldev->backing_bdev->
+- bd_disk->bdi
++ bd_disk->queue->backing_dev_info
diff -Nupr a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c
--- a/drbd/drbd-kernel-compat/gen_patch_names.c 2022-07-08 19:43:37.106735503 +0800
+++ b/drbd/drbd-kernel-compat/gen_patch_names.c 2022-07-08 19:45:17.570310319 +0800
@@ -396,6 +396,9 @@ int main(int argc, char **argv)
COMPAT_HAVE_BLK_QUEUE_UPDATE_READAHEAD, "present");
#endif
+ patch(1, "struct_gendisk", true, false,
+ COMPAT_STRUCT_GENDISK_HAS_BACKING_DEV_INFO, "has_backing_dev_info");
+
patch(1, "backing_dev_info", true, false,
COMPAT_HAVE_POINTER_BACKING_DEV_INFO, "is_pointer");
diff --git a/drbd/drbd-kernel-compat/tests/struct_gendisk_has_backing_dev_info.c b/drbd/drbd-kernel-compat/tests/struct_gendisk_has_backing_dev_info.c
new file mode 100644
index 000000000000..cd40214a564c
--- /dev/null
+++ b/drbd/drbd-kernel-compat/tests/struct_gendisk_has_backing_dev_info.c
@@ -0,0 +1,8 @@
+/* { "version": "v5.15-rc1", "commit": "21cf866145047f8bfecb38ec8d2fed64464c074f", "comment": "The backing_dev_info was moved from request_queue to backing_dev_info", "author": "Christoph Hellwig <hch@lst.de>", "date": "Wed Jul 1 11:06:22 2020 +0200" } */
+
+#include <linux/blkdev.h>
+
+struct backing_dev_info *foo(struct gendisk *d)
+{
+ return d->bdi;
+}
--
2.34.1

View File

@ -0,0 +1,37 @@
From eacd74206a8f48c3861de2096215790426331237 Mon Sep 17 00:00:00 2001
From: <christoph.boehmwalder@linbit.com>
Date: Wed, 6 Apr 2022 13:36:08 +0200
Subject: [PATCH] compat: only apply bdi pointer patch if bdi is in
request_queue
The history is as follows:
1. In the beginning, request_queue.backing_dev_info was a regular member
2. Then, backing_dev_info became a pointer
3. Now the backing_dev_info pointer has moved to gendisk.bdi
So there is never a case where gendisk has a non-pointer
backing_dev_info. Thus, we only want to apply the pointer patch for old
kernels where backing_dev_info was still in request_queue.
---
drbd/drbd-kernel-compat/gen_patch_names.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c
index 9210d2c2eeb9..763652a8908b 100644
--- a/drbd/drbd-kernel-compat/gen_patch_names.c
+++ b/drbd/drbd-kernel-compat/gen_patch_names.c
@@ -400,8 +400,10 @@ int main(int argc, char **argv)
patch(1, "struct_gendisk", true, false,
COMPAT_STRUCT_GENDISK_HAS_BACKING_DEV_INFO, "has_backing_dev_info");
+#if !defined(COMPAT_STRUCT_GENDISK_HAS_BACKING_DEV_INFO)
patch(1, "backing_dev_info", true, false,
COMPAT_HAVE_POINTER_BACKING_DEV_INFO, "is_pointer");
+#endif
patch(1, "sendpage_ok", true, false,
COMPAT_HAVE_SENDPAGE_OK, "present");
--
2.34.1

102
bsc-1201335_03-genhd.patch Normal file
View File

@ -0,0 +1,102 @@
/* this patch is related with following upstream kernel commit */
commit 322cbb50de711814c42fb088f6d31901502c711a
Author: Christoph Hellwig <hch@lst.de>
Date: Mon Jan 24 10:39:13 2022 +0100
block: remove genhd.h
There is no good reason to keep genhd.h separate from the main blkdev.h
header that includes it. So fold the contents of genhd.h into blkdev.h
and remove genhd.h entirely.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20220124093913.742411-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_atomic_in_flight.c b/drbd/drbd-kernel-compat/tests/have_atomic_in_flight.c
--- a/drbd/drbd-kernel-compat/tests/have_atomic_in_flight.c 2022-07-07 16:50:27.736823224 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_atomic_in_flight.c 2022-07-08 18:27:01.362626866 +0800
@@ -1,6 +1,6 @@
#include <linux/version.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)
-#include <linux/genhd.h>
+#include <linux/blkdev.h>
#ifndef __same_type
# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c b/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c
--- a/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c 2022-07-07 16:50:35.476788526 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c 2022-07-07 16:52:09.432367225 +0800
@@ -1,4 +1,3 @@
-#include <linux/genhd.h>
#include <linux/fs.h>
#include <linux/blkdev.h>
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_blk_alloc_disk.c b/drbd/drbd-kernel-compat/tests/have_blk_alloc_disk.c
--- a/drbd/drbd-kernel-compat/tests/have_blk_alloc_disk.c 2022-07-07 16:50:42.400757477 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_blk_alloc_disk.c 2022-07-08 18:27:51.914415515 +0800
@@ -1,6 +1,6 @@
/* { "version": "v5.13-rc4", "commit": "b647ad024841d02d67e78716f51f355d8d3e9656", "comment": "5.13 introduces a blk_alloc_disk helper", "author": "Christoph Hellwig <hch@lst.de>", "date": "Fri May 21 07:50:57 2021 +0200" } */
-#include <linux/genhd.h>
+#include <linux/blkdev.h>
struct gendisk *foo(int node)
{
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_disk_update_readahead.c b/drbd/drbd-kernel-compat/tests/have_disk_update_readahead.c
--- a/drbd/drbd-kernel-compat/tests/have_disk_update_readahead.c 2022-07-08 20:00:47.590378757 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_disk_update_readahead.c 2022-07-08 20:01:47.462126256 +0800
@@ -1,6 +1,5 @@
/* { "version": "v5.16", "commit": "471aa704db4904f7af5a50019ca3b5b018c0cf62", "comment": "block: pass a gendisk to blk_queue_update_readahead", "author": "Christoph Hellwig <hch@lst.de>", "date": "Mon Aug 9 16:17:41 2021 +0200" } */
-#include <linux/genhd.h>
#include <linux/blkdev.h>
void foo(struct gendisk *d)
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_hd_struct.c b/drbd/drbd-kernel-compat/tests/have_hd_struct.c
--- a/drbd/drbd-kernel-compat/tests/have_hd_struct.c 2022-07-07 16:51:01.344672526 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_hd_struct.c 2022-07-08 18:31:19.633543494 +0800
@@ -1,5 +1,6 @@
/* { "version": "v5.10-rc5", "commit": "0d02129e76edf91cf04fabf1efbc3a9a1f1d729a", "comment": "struct hd_struct was merged into struct block_device", "author": "Christoph Hellwig <hch@lst.de>", "date": "Fri Nov 27 16:43:51 2020 +0100" } */
#include <linux/genhd.h>
+#include <linux/blkdev.h>
struct hd_struct hd;
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_revalidate_disk_size.c b/drbd/drbd-kernel-compat/tests/have_revalidate_disk_size.c
--- a/drbd/drbd-kernel-compat/tests/have_revalidate_disk_size.c 2022-07-07 16:51:06.892647651 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_revalidate_disk_size.c 2022-07-08 18:28:55.114151284 +0800
@@ -1,6 +1,6 @@
/* { "version": "v5.9-rc4", "commit": "659e56ba864d37b7ee0a49cd432205b2a5ca815e", "comment": "The revalidate_disk_size helper was added in v5.9-rc4", "author": "Christoph Hellwig <hch@lst.de>", "date": "Tue Sep 1 17:57:43 2020 +0200" } */
-#include <linux/genhd.h>
+#include <linux/blkdev.h>
void foo(struct gendisk *disk)
{
diff -Nupr a/drbd/drbd-kernel-compat/tests/have_set_capacity_and_notify.c b/drbd/drbd-kernel-compat/tests/have_set_capacity_and_notify.c
--- a/drbd/drbd-kernel-compat/tests/have_set_capacity_and_notify.c 2022-07-07 16:51:12.376623066 +0800
+++ b/drbd/drbd-kernel-compat/tests/have_set_capacity_and_notify.c 2022-07-08 18:29:26.082021496 +0800
@@ -1,6 +1,6 @@
/* { "version": "v5.10-rc5", "commit": "449f4ec9892ebc2f37a7eae6d97db2cf7c65e09a", "comment": "New (as far as DRBD is concerned) helper set_capacity_and_notify", "author": "Christoph Hellwig <hch@lst.de>", "date": "Mon Nov 16 15:56:56 2020 +0100" } */
-#include <linux/genhd.h>
+#include <linux/blkdev.h>
bool foo(struct gendisk *disk, sector_t size)
{
diff -Nupr a/drbd/drbd_int.h b/drbd/drbd_int.h
--- a/drbd/drbd_int.h 2022-07-07 16:50:13.032889154 +0800
+++ b/drbd/drbd_int.h 2022-07-07 16:51:38.292506862 +0800
@@ -28,7 +28,6 @@
#include <linux/major.h>
#include <linux/blkdev.h>
#include <linux/backing-dev.h>
-#include <linux/genhd.h>
#include <linux/idr.h>
#include <linux/lru_cache.h>
#include <linux/prefetch.h>

View File

@ -0,0 +1,79 @@
/* This patch is related with following upstream kernel commit */
commit 609be1066731fea86436f5f91022f82e592ab456
Author: Christoph Hellwig <hch@lst.de>
Date: Mon Jan 24 10:11:03 2022 +0100
block: pass a block_device and opf to bio_alloc_bioset
Pass the block_device and operation that we plan to use this bio for to
bio_alloc_bioset to optimize the assigment. NULL/0 can be passed, both
for the passthrough case on a raw request_queue and to temporarily avoid
refactoring some nasty code.
Also move the gfp_mask argument after the nr_vecs argument for a much
more logical calling convention matching what most of the kernel does.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://lore.kernel.org/r/20220124091107.642561-16-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
diff -Nupr a/drbd/drbd_actlog.c b/drbd/drbd_actlog.c
--- a/drbd/drbd_actlog.c 2022-07-07 18:23:47.643895879 +0800
+++ b/drbd/drbd_actlog.c 2022-07-08 06:46:56.597471149 +0800
@@ -94,8 +94,8 @@ static int _drbd_md_sync_page_io(struct
device->md_io.done = 0;
device->md_io.error = -ENODEV;
- bio = bio_alloc_bioset(GFP_NOIO, 1, &drbd_md_io_bio_set);
- bio_set_dev(bio, bdev->md_bdev);
+ bio = bio_alloc_bioset(bdev->md_bdev, 1, op | op_flags, GFP_NOIO,
+ &drbd_md_io_bio_set);
bio->bi_iter.bi_sector = sector;
err = -EIO;
if (bio_add_page(bio, device->md_io.page, size, 0) != size)
@@ -103,8 +103,6 @@ static int _drbd_md_sync_page_io(struct
bio->bi_private = device;
bio->bi_end_io = drbd_md_endio;
- bio->bi_opf = op | op_flags;
-
if (op != REQ_OP_WRITE && device->disk_state[NOW] == D_DISKLESS && device->ldev == NULL)
/* special case, drbd_md_read() during drbd_adm_attach(): no get_ldev */
;
diff -Nupr a/drbd/drbd_bitmap.c b/drbd/drbd_bitmap.c
--- a/drbd/drbd_bitmap.c 2022-07-07 18:24:13.671780513 +0800
+++ b/drbd/drbd_bitmap.c 2022-07-08 06:49:05.232970673 +0800
@@ -1123,12 +1123,13 @@ static void drbd_bm_endio(struct bio *bi
static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_hold(local)
{
- struct bio *bio = bio_alloc_bioset(GFP_NOIO, 1, &drbd_md_io_bio_set);
struct drbd_device *device = ctx->device;
+ unsigned int op = (ctx->flags & BM_AIO_READ) ? REQ_OP_READ : REQ_OP_WRITE;
+ struct bio *bio = bio_alloc_bioset(device->ldev->md_bdev, 1, op,
+ GFP_NOIO, &drbd_md_io_bio_set);
struct drbd_bitmap *b = device->bitmap;
struct page *page;
unsigned int len;
- unsigned int op = (ctx->flags & BM_AIO_READ) ? REQ_OP_READ : REQ_OP_WRITE;
sector_t on_disk_sector =
device->ldev->md.md_offset + device->ldev->md.bm_offset;
@@ -1153,14 +1154,12 @@ static void bm_page_io_async(struct drbd
bm_store_page_idx(page, page_nr);
} else
page = b->bm_pages[page_nr];
- bio_set_dev(bio, device->ldev->md_bdev);
bio->bi_iter.bi_sector = on_disk_sector;
/* bio_add_page of a single page to an empty bio will always succeed,
* according to api. Do we want to assert that? */
bio_add_page(bio, page, len, 0);
bio->bi_private = ctx;
bio->bi_end_io = drbd_bm_endio;
- bio->bi_opf = op;
if (drbd_insert_fault(device, (op == REQ_OP_WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) {
bio->bi_status = BLK_STS_IOERR;

View File

@ -0,0 +1,70 @@
/* this patch is related with following upstream kernel commit */
commit 07888c665b405b1cd3577ddebfeb74f4717a84c4
Author: Christoph Hellwig <hch@lst.de>
Date: Mon Jan 24 10:11:05 2022 +0100
block: pass a block_device and opf to bio_alloc
Pass the block_device and operation that we plan to use this bio for to
bio_alloc to optimize the assignment. NULL/0 can be passed, both for the
passthrough case on a raw request_queue and to temporarily avoid
refactoring some nasty code.
Also move the gfp_mask argument after the nr_vecs argument for a much
more logical calling convention matching what most of the kernel does.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://lore.kernel.org/r/20220124091107.642561-18-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
diff -Nupr a/drbd/drbd_receiver.c b/drbd/drbd_receiver.c
--- a/drbd/drbd_receiver.c 2022-07-08 06:55:17.451589834 +0800
+++ b/drbd/drbd_receiver.c 2022-07-08 06:59:24.486571488 +0800
@@ -1263,7 +1263,8 @@ static void one_flush_endio(struct bio *
static void submit_one_flush(struct drbd_device *device, struct issue_flush_context *ctx)
{
- struct bio *bio = bio_alloc(GFP_NOIO, 0);
+ struct bio *bio = bio_alloc(device->ldev->backing_bdev, 0,
+ REQ_OP_FLUSH | REQ_PREFLUSH, GFP_NOIO);
struct one_flush_context *octx = kmalloc(sizeof(*octx), GFP_NOIO);
if (!bio || !octx) {
drbd_warn(device, "Could not allocate a bio, CANNOT ISSUE FLUSH\n");
@@ -1283,14 +1284,12 @@ static void submit_one_flush(struct drbd
octx->device = device;
octx->ctx = ctx;
- bio_set_dev(bio, device->ldev->backing_bdev);
bio->bi_private = octx;
bio->bi_end_io = one_flush_endio;
device->flush_jif = jiffies;
set_bit(FLUSH_PENDING, &device->flags);
atomic_inc(&ctx->pending);
- bio->bi_opf = REQ_OP_FLUSH | REQ_PREFLUSH;
submit_bio(bio);
}
@@ -1832,17 +1831,14 @@ next_bio:
goto fail;
}
- bio = bio_alloc(GFP_NOIO, nr_pages);
+ bio = bio_alloc(device->ldev->backing_bdev, nr_pages, peer_req->opf,
+ GFP_NOIO);
if (!bio) {
drbd_err(device, "submit_ee: Allocation of a bio failed (nr_pages=%u)\n", nr_pages);
goto fail;
}
/* > peer_req->i.sector, unless this is the first bio */
bio->bi_iter.bi_sector = sector;
- bio_set_dev(bio, device->ldev->backing_bdev);
- /* we special case some flags in the multi-bio case, see below
- * (REQ_PREFLUSH, or BIO_RW_BARRIER in older kernels) */
- bio->bi_opf = peer_req->opf;
bio->bi_private = peer_req;
bio->bi_end_io = drbd_peer_request_endio;

117
bsc-1201335_06-bdi.patch Normal file
View File

@ -0,0 +1,117 @@
/* this patch is related with following 3 upstream kernel commits */
commit 8fd6533ef3f7729e4aa29ead83844c042688615a
Author: Haowen Bai <baihaowen@meizu.com>
Date: Wed Apr 6 21:07:15 2022 +0200
drbd: Return true/false (not 1/0) from bool functions
Return boolean values ("true" or "false") instead of 1 or 0 from bool
functions. This fixes the following warnings from coccicheck:
./drivers/block/drbd/drbd_req.c:912:9-10: WARNING: return of 0/1 in
function 'remote_due_to_read_balancing' with return type bool
Signed-off-by: Haowen Bai <baihaowen@meizu.com>
Reviewed-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
Link: https://lore.kernel.org/r/20220406190715.1938174-8-christoph.boehmwalder@linbit.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
commit b9b1335e640308acc1b8f26c739b804c80a6c147
Author: NeilBrown <neilb@suse.de>
Date: Tue Mar 22 14:39:10 2022 -0700
remove bdi_congested() and wb_congested() and related functions
These functions are no longer useful as no BDIs report congestions any
more.
Removing the test on bdi_write_contested() in current_may_throttle()
could cause a small change in behaviour, but only when PF_LOCAL_THROTTLE
is set.
So replace the calls by 'false' and simplify the code - and remove the
functions.
[akpm@linux-foundation.org: fix build]
Link: https://lkml.kernel.org/r/164549983742.9187.2570198746005819592.stgit@noble.brown
Signed-off-by: NeilBrown <neilb@suse.de>
Acked-by: Ryusuke Konishi <konishi.ryusuke@gmail.com> [nilfs]
Cc: Anna Schumaker <Anna.Schumaker@Netapp.com>
Cc: Chao Yu <chao@kernel.org>
Cc: Darrick J. Wong <djwong@kernel.org>
Cc: Ilya Dryomov <idryomov@gmail.com>
Cc: Jaegeuk Kim <jaegeuk@kernel.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Jeff Layton <jlayton@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Lars Ellenberg <lars.ellenberg@linbit.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>
Cc: Paolo Valente <paolo.valente@linaro.org>
Cc: Philipp Reisner <philipp.reisner@linbit.com>
Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
---
commit edb0872f44ec9976ea6d052cb4b93cd2d23ac2ba
Author: Christoph Hellwig <hch@lst.de>
Date: Mon Aug 9 16:17:43 2021 +0200
block: move the bdi from the request_queue to the gendisk
The backing device information only makes sense for file system I/O,
and thus belongs into the gendisk and not the lower level request_queue
structure. Move it there.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20210809141744.1203023-5-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
diff -Nupr a/drbd/drbd_req.c b/drbd/drbd_req.c
--- a/drbd/drbd_req.c 2022-07-08 18:08:35.075249173 +0800
+++ b/drbd/drbd_req.c 2022-07-08 07:50:00.750419154 +0800
@@ -1148,13 +1148,11 @@ static bool remote_due_to_read_balancing
struct drbd_peer_device *peer_device, sector_t sector,
enum drbd_read_balancing rbm)
{
- struct backing_dev_info *bdi;
int stripe_shift;
switch (rbm) {
case RB_CONGESTED_REMOTE:
- bdi = device->ldev->backing_bdev->bd_disk->queue->backing_dev_info;
- return bdi_read_congested(bdi);
+ return false;
case RB_LEAST_PENDING:
return atomic_read(&device->local_cnt) >
atomic_read(&peer_device->ap_pending_cnt) + atomic_read(&peer_device->rs_pending_cnt);
diff -Nupr a/drbd/drbd_nl.c b/drbd/drbd_nl.c
--- a/drbd/drbd_nl.c 2022-07-08 08:50:52.751580529 +0800
+++ b/drbd/drbd_nl.c 2022-07-08 08:51:20.971464720 +0800
@@ -5593,7 +5593,6 @@ static void device_to_statistics(struct
if (get_ldev(device)) {
struct drbd_md *md = &device->ldev->md;
u64 *history_uuids = (u64 *)s->history_uuids;
- struct request_queue *q;
int n;
spin_lock_irq(&md->uuid_lock);
@@ -5605,11 +5604,6 @@ static void device_to_statistics(struct
spin_unlock_irq(&md->uuid_lock);
s->dev_disk_flags = md->flags;
- q = bdev_get_queue(device->ldev->backing_bdev);
- s->dev_lower_blocked =
- bdi_congested(q->backing_dev_info,
- (1 << WB_async_congested) |
- (1 << WB_sync_congested));
put_ldev(device);
}
s->dev_size = get_capacity(device->vdisk);

View File

@ -0,0 +1,28 @@
/* this patch is related with following upstream kernel commit */
commit a34592ff6b78e84e11b19183b60cd240737f76f9
Author: Christoph Hellwig <hch@lst.de>
Date: Wed Feb 9 09:28:23 2022 +0100
scsi: drbd: Remove WRITE_SAME support
REQ_OP_WRITE_SAME was only ever submitted by the legacy Linux zeroing code,
which has switched to use REQ_OP_WRITE_ZEROES long ago.
Link: https://lore.kernel.org/r/20220209082828.2629273-3-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
---
diff -Nupr a/drbd/drbd_receiver.c b/drbd/drbd_receiver.c
--- a/drbd/drbd_receiver.c 2022-07-08 07:14:26.331017361 +0800
+++ b/drbd/drbd_receiver.c 2022-07-08 07:14:57.750893198 +0800
@@ -2737,8 +2737,6 @@ static unsigned long wire_flags_to_bio_o
return REQ_OP_WRITE_ZEROES;
if (dpf & DP_DISCARD)
return REQ_OP_DISCARD;
- if (dpf & DP_WSAME)
- return REQ_OP_WRITE_SAME;
else
return REQ_OP_WRITE;
}

View File

@ -0,0 +1,30 @@
/* this patch is related with following upstream kernel commit */
commit abfc426d1b2fb2176df59851a64223b58ddae7e7
Author: Christoph Hellwig <hch@lst.de>
Date: Wed Feb 2 17:01:09 2022 +0100
block: pass a block_device to bio_clone_fast
Pass a block_device to bio_clone_fast and __bio_clone_fast and give
the functions more suitable names.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mike Snitzer <snitzer@redhat.com>
Link: https://lore.kernel.org/r/20220202160109.108149-14-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
diff -Nupr a/drbd/drbd_req.c b/drbd/drbd_req.c
--- a/drbd/drbd_req.c 2022-07-08 08:00:58.007783979 +0800
+++ b/drbd/drbd_req.c 2022-07-08 08:09:29.157733345 +0800
@@ -1543,7 +1543,8 @@ drbd_request_prepare(struct drbd_device
req->start_jif = bio_start_io_acct(req->master_bio);
if (get_ldev(device)) {
- req->private_bio = bio_clone_fast(bio, GFP_NOIO, &drbd_io_bio_set);
+ req->private_bio = bio_alloc_clone(device->ldev->backing_bdev, bio,
+ GFP_NOIO, &drbd_io_bio_set);
req->private_bio->bi_private = req;
req->private_bio->bi_end_io = drbd_request_endio;
}

View File

@ -1,3 +1,37 @@
-------------------------------------------------------------------
Fri Jul 08 12:47:00 UTC 2022 - Heming Zhao <heming.zhao@suse.com>
- drbd: build error against kernel v5.18 (bsc#1201335)
- remove patch: move_bdi_from_request_queue_to_gendisk
- change exist patches name from bsc#1192929:
old name:
make_block_holder_optional.patch
move_kvmalloc_related_to_slab.patch
polling_to_bio_base.patch
pass_gend_to_blk_queue_update_readahead.patch
dax_support.patch
add_disk_error_handle.patch
have_void_drbd_submit_bio.patch
remove_bdgrab.patch
new name:
bsc-1192929_01-make_block_holder_optional.patch
bsc-1192929_02-move_kvmalloc_related_to_slab.patch
bsc-1192929_03-polling_to_bio_base.patch
bsc-1192929_04-pass_gend_to_blk_queue_update_readahead.patch
bsc-1192929_06-dax_support.patch
bsc-1192929_07-add_disk_error_handle.patch
bsc-1192929_08-have_void_drbd_submit_bio.patch
bsc-1192929_09-remove_bdgrab.patch
- add patch:
+ bsc-1201335_01-compat-test-and-cocci-patch-for-bdi-in-gendisk.patch
+ bsc-1201335_02-0001-compat-only-apply-bdi-pointer-patch-if-bdi-is-in-req.patch
+ bsc-1201335_03-genhd.patch
+ bsc-1201335_04-bio_alloc_bioset.patch
+ bsc-1201335_05-bio_alloc.patch
+ bsc-1201335_06-bdi.patch
+ bsc-1201335_07-write-same.patch
+ bsc-1201335_08-bio_clone_fast.patch
-------------------------------------------------------------------
Mon Nov 22 04:38:30 UTC 2021 - nick wang <nwang@suse.com>

View File

@ -35,15 +35,23 @@ Source1: preamble
Source2: Module.supported
Source3: drbd_git_revision
Patch1: fix-resync-finished-with-syncs-have-bits-set.patch
Patch2: make_block_holder_optional.patch
Patch3: move_kvmalloc_related_to_slab.patch
Patch4: polling_to_bio_base.patch
Patch5: pass_gend_to_blk_queue_update_readahead.patch
Patch6: move_bdi_from_request_queue_to_gendisk.patch
Patch7: dax_support.patch
Patch8: add_disk_error_handle.patch
Patch9: have_void_drbd_submit_bio.patch
Patch10: remove_bdgrab.patch
Patch2: bsc-1192929_01-make_block_holder_optional.patch
Patch3: bsc-1192929_02-move_kvmalloc_related_to_slab.patch
Patch4: bsc-1192929_03-polling_to_bio_base.patch
Patch5: bsc-1192929_04-pass_gend_to_blk_queue_update_readahead.patch
#Patch6: bsc-1192929_05-move_bdi_from_request_queue_to_gendisk
Patch7: bsc-1192929_06-dax_support.patch
Patch8: bsc-1192929_07-add_disk_error_handle.patch
Patch9: bsc-1192929_08-have_void_drbd_submit_bio.patch
Patch10: bsc-1192929_09-remove_bdgrab.patch
Patch11: bsc-1201335_01-compat-test-and-cocci-patch-for-bdi-in-gendisk.patch
Patch12: bsc-1201335_02-compat-only-apply-bdi-pointer-patch-if-bdi-is-in-req.patch
Patch13: bsc-1201335_03-genhd.patch
Patch14: bsc-1201335_04-bio_alloc_bioset.patch
Patch15: bsc-1201335_05-bio_alloc.patch
Patch16: bsc-1201335_06-bdi.patch
Patch17: bsc-1201335_07-write-same.patch
Patch18: bsc-1201335_08-bio_clone_fast.patch
Patch99: suse-coccinelle.patch
#https://github.com/openSUSE/rpmlint-checks/blob/master/KMPPolicyCheck.py
BuildRequires: coccinelle >= 1.0.8
@ -82,11 +90,19 @@ installed kernel.
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
#%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch99 -p1
mkdir source

View File

@ -1,84 +0,0 @@
diff -Naur drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd-kernel-compat/gen_patch_names.c drbd-9.0.30~1+git.8e9c0812/drbd/drbd-kernel-compat/gen_patch_names.c
--- drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd-kernel-compat/gen_patch_names.c 2021-11-22 14:00:22.158226957 +0800
+++ drbd-9.0.30~1+git.8e9c0812/drbd/drbd-kernel-compat/gen_patch_names.c 2021-11-22 14:10:47.141520981 +0800
@@ -396,8 +396,10 @@
COMPAT_HAVE_BLK_QUEUE_UPDATE_READAHEAD, "present");
#endif
+#ifndef COMPAT_HAVE_GENDISK_BACKING_DEV_INFO
patch(1, "backing_dev_info", true, false,
COMPAT_HAVE_POINTER_BACKING_DEV_INFO, "is_pointer");
+#endif
patch(1, "sendpage_ok", true, false,
COMPAT_HAVE_SENDPAGE_OK, "present");
diff -Naur drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd-kernel-compat/tests/have_gendisk_backing_dev_info.c drbd-9.0.30~1+git.8e9c0812/drbd/drbd-kernel-compat/tests/have_gendisk_backing_dev_info.c
--- drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd-kernel-compat/tests/have_gendisk_backing_dev_info.c 1970-01-01 08:00:00.000000000 +0800
+++ drbd-9.0.30~1+git.8e9c0812/drbd/drbd-kernel-compat/tests/have_gendisk_backing_dev_info.c 2021-11-22 14:08:58.564950244 +0800
@@ -0,0 +1,11 @@
+/* { "version": "v5.15-rc1~161", "commit": "edb0872f44ec9976ea6d052cb4b93cd2d23ac2ba", "comment": "block: move the bdi from the request_queue to the gendisk", "author": "Christoph Hellwig <hch@lst.de>", "date": "Mon Aug 9 16:17:43 2021 +0200" } */
+
+
+#include <linux/genhd.h>
+#include <linux/backing-dev-defs.h>
+
+void dummy(struct gendisk *gd)
+{
+ struct backing_dev_info *b;
+ b = gd->bdi;
+}
diff -Naur drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd_nl.c drbd-9.0.30~1+git.8e9c0812/drbd/drbd_nl.c
--- drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd_nl.c 2021-11-22 14:00:22.158226957 +0800
+++ drbd-9.0.30~1+git.8e9c0812/drbd/drbd_nl.c 2021-11-22 14:40:51.131336874 +0800
@@ -5594,7 +5594,9 @@
if (get_ldev(device)) {
struct drbd_md *md = &device->ldev->md;
u64 *history_uuids = (u64 *)s->history_uuids;
+#ifndef COMPAT_HAVE_GENDISK_BACKING_DEV_INFO
struct request_queue *q;
+#endif
int n;
spin_lock_irq(&md->uuid_lock);
@@ -5606,11 +5608,18 @@
spin_unlock_irq(&md->uuid_lock);
s->dev_disk_flags = md->flags;
+#ifndef COMPAT_HAVE_GENDISK_BACKING_DEV_INFO
q = bdev_get_queue(device->ldev->backing_bdev);
s->dev_lower_blocked =
bdi_congested(q->backing_dev_info,
(1 << WB_async_congested) |
(1 << WB_sync_congested));
+#else
+ s->dev_lower_blocked =
+ bdi_congested(device->ldev->backing_bdev->bd_disk->bdi,
+ (1 << WB_async_congested) |
+ (1 << WB_sync_congested));
+#endif
put_ldev(device);
}
s->dev_size = get_capacity(device->vdisk);
diff -Naur drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd_req.c drbd-9.0.30~1+git.8e9c0812/drbd/drbd_req.c
--- drbd-9.0.30~1+git.8e9c0812.orig/drbd/drbd_req.c 2021-11-22 14:00:22.158226957 +0800
+++ drbd-9.0.30~1+git.8e9c0812/drbd/drbd_req.c 2021-11-22 14:15:43.103076717 +0800
@@ -1148,13 +1148,19 @@
struct drbd_peer_device *peer_device, sector_t sector,
enum drbd_read_balancing rbm)
{
+#ifndef COMPAT_HAVE_GENDISK_BACKING_DEV_INFO
struct backing_dev_info *bdi;
+#endif
int stripe_shift;
switch (rbm) {
case RB_CONGESTED_REMOTE:
+#ifndef COMPAT_HAVE_GENDISK_BACKING_DEV_INFO
bdi = device->ldev->backing_bdev->bd_disk->queue->backing_dev_info;
return bdi_read_congested(bdi);
+#else
+ return bdi_read_congested(device->ldev->backing_bdev->bd_disk->bdi);
+#endif
case RB_LEAST_PENDING:
return atomic_read(&device->local_cnt) >
atomic_read(&peer_device->ap_pending_cnt) + atomic_read(&peer_device->rs_pending_cnt);