From 466f0dcd56fdbe1098c0b40713c37a4f4d5adcd77423d1fa31a728c7e2074a85 Mon Sep 17 00:00:00 2001 From: nick wang Date: Tue, 20 Oct 2020 03:18:21 +0000 Subject: [PATCH] osc copypac from project:home:wanghaisu:branches:Kernel:HEAD:KMP package:drbd revision:11 OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/drbd?expand=0&rev=118 --- 1.patch | 80 +++++++++++++ blk_alloc_queue_make_request.patch | 139 +++++++++++++++++++++++ compat_generic_make_request.patch | 49 ++++++++ drbd.spec | 9 ++ remove_congested_fn_congested_data.patch | 115 +++++++++++++++++++ 5 files changed, 392 insertions(+) create mode 100644 1.patch create mode 100644 blk_alloc_queue_make_request.patch create mode 100644 compat_generic_make_request.patch create mode 100644 remove_congested_fn_congested_data.patch diff --git a/1.patch b/1.patch new file mode 100644 index 0000000..4520230 --- /dev/null +++ b/1.patch @@ -0,0 +1,80 @@ +1. b9b1a5d7 blk_queue_stack_limits is removed +2. 63a0895d and 3f649ab72 uninitialized_var() macro removed +3. c9ec0524 convert sched_setscheduler to sched_set_fifo* + +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/drbd_wrappers.h drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/drbd_wrappers.h +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/drbd_wrappers.h 2020-10-20 10:48:14.274795598 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/drbd_wrappers.h 2020-10-20 10:48:02.074702666 +0800 +@@ -523,4 +523,13 @@ + #define __vmalloc(SIZE, GFP, PRGROT) __vmalloc(SIZE, GFP) + #endif + ++#ifndef COMPAT_HAVE_BLK_QUEUE_STACK_LIMITS ++#define blk_queue_stack_limits(TOP, BOTTOM) \ ++ blk_stack_limits(&((TOP)->limits), &((BOTTOM)->limits), 0 ) ++#endif ++ ++#ifndef COMPAT_HAVE_UNINITIALIZED_VAR ++#define uninitialized_var(X) (X) ++#endif ++ + #endif +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_blk_queue_stack_limits.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_blk_queue_stack_limits.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_blk_queue_stack_limits.c 1970-01-01 08:00:00.000000000 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_blk_queue_stack_limits.c 2020-10-20 10:48:02.070702635 +0800 +@@ -0,0 +1,7 @@ ++#include ++ ++/* b9b1a5d7 blk_queue_stack_limits is removed */ ++void dummy(struct request_queue *a, struct request_queue *b) ++{ ++ blk_queue_stack_limits(a, b); ++} +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_sched_set_fifo_low.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_sched_set_fifo_low.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_sched_set_fifo_low.c 1970-01-01 08:00:00.000000000 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_sched_set_fifo_low.c 2020-10-20 10:48:02.070702635 +0800 +@@ -0,0 +1,7 @@ ++/* 6d2b84a4e and c9ec052470 Convert set_scheduler to sched_set_fifo* */ ++#include ++ ++void test(struct task_struct *p) ++{ ++ sched_set_fifo_low(p); ++} +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_uninitialized_var.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_uninitialized_var.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_uninitialized_var.c 1970-01-01 08:00:00.000000000 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_uninitialized_var.c 2020-10-20 10:48:02.070702635 +0800 +@@ -0,0 +1,10 @@ ++/* 63a0895d9 uninitialized_var is removed ++ * 3f649ab72 uninitialized_var removed in all .c ++*/ ++#include ++ ++void test() ++{ ++ unsigned int uninitialized_var(a); ++ a = 1; ++} +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_receiver.c drbd-9.0.25~0+git.bd41626d/drbd/drbd_receiver.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_receiver.c 2020-10-20 10:48:14.058793953 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_receiver.c 2020-10-20 11:11:32.948922212 +0800 +@@ -9241,13 +9241,18 @@ + unsigned int header_size = drbd_header_size(connection); + int expect = header_size; + bool ping_timeout_active = false; +- struct sched_param param = { .sched_priority = 2 }; + struct drbd_transport *transport = &connection->transport; + struct drbd_transport_ops *tr_ops = transport->ops; + ++#ifdef COMPAT_HAVE_SCHED_SET_FIFO_LOW ++ sched_set_fifo_low(current); ++#else ++ struct sched_param param = { .sched_priority = 2 }; + rv = sched_setscheduler(current, SCHED_RR, ¶m); ++ + if (rv < 0) + drbd_err(connection, "drbd_ack_receiver: ERROR set priority, ret=%d\n", rv); ++#endif + + while (get_t_state(thi) == RUNNING) { + drbd_thread_current_set_cpu(thi); diff --git a/blk_alloc_queue_make_request.patch b/blk_alloc_queue_make_request.patch new file mode 100644 index 0000000..f68251d --- /dev/null +++ b/blk_alloc_queue_make_request.patch @@ -0,0 +1,139 @@ +Together with generic_make_request change to submit_bio_noacct, +patch compat_generic_make_request.patch + +Adapted two upstream changes: +c62b37d96b6eb v5.9-rc1~147^2~55 + move ->make_request_fn to struct + block_device_operations +f695ca3886ce7 v5.9-rc1~147^2~59 + remove the request_queue argument + from blk_queue_split + +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_int.h drbd-9.0.25~0+git.bd41626d/drbd/drbd_int.h +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_int.h 2020-10-10 13:00:26.547933412 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_int.h 2020-10-10 13:00:51.932114769 +0800 +@@ -1838,7 +1838,11 @@ + #define __drbd_make_request(d,b,k,j) __drbd_make_request(d,b,j) + #endif + extern void __drbd_make_request(struct drbd_device *, struct bio *, ktime_t, unsigned long); ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++extern blk_qc_t drbd_make_request(struct bio *bio); ++#else + extern blk_qc_t drbd_make_request(struct request_queue *q, struct bio *bio); ++#endif + + /* drbd_nl.c */ + enum suspend_scope { +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/gen_patch_names.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/gen_patch_names.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/gen_patch_names.c 2020-10-10 13:00:26.543933383 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/gen_patch_names.c 2020-10-10 13:00:51.932114769 +0800 +@@ -83,7 +83,7 @@ + patch(1, "block_device_operations_release", true, false, + COMPAT_DRBD_RELEASE_RETURNS_VOID, "is_void"); + +-#if !defined(COMPAT_HAVE_BD_UNLINK_DISK_HOLDER) || defined(COMPAT_HAVE_BD_CLAIM_BY) ++#if !defined(COMPAT_HAVE_BD_UNLINK_DISK_HOLDER) || defined(COMPAT_HAVE_BD_CLAIM_BY_DISK) + patch(2, "claim_disk", true, false, + COMPAT_HAVE_BD_UNLINK_DISK_HOLDER, "link", + COMPAT_HAVE_BD_CLAIM_BY_DISK, "claim"); +@@ -130,11 +130,14 @@ + patch(1, "blk_queue_make_request", false, true, + COMPAT_HAVE_BLK_QUEUE_MAKE_REQUEST, "present"); + ++/* together with generic_make_request change to submit_bio_noacct */ ++#ifdef COMPAT_HAVE_GENERIC_MAKE_REQUEST + #ifndef COMPAT_HAVE_BLK_QC_T_MAKE_REQUEST + patch(2, "make_request", false, false, + COMPAT_HAVE_BLK_QC_T_MAKE_REQUEST, "is_blk_qc_t", + COMPAT_HAVE_VOID_MAKE_REQUEST, "is_void"); + #endif ++#endif + + patch(1, "blkdev_get_by_path", true, false, + COMPAT_HAVE_BLKDEV_GET_BY_PATH, "present"); +@@ -209,6 +212,8 @@ + patch(1, "blk_queue_merge_bvec", false, true, + COMPAT_HAVE_BLK_QUEUE_MERGE_BVEC, "present"); + ++/* together with generic_make_request change to submit_bio_noacct */ ++#ifdef COMPAT_HAVE_GENERIC_MAKE_REQUEST + #if !defined(COMPAT_HAVE_BLK_QUEUE_SPLIT_Q_BIO) + # if defined(COMPAT_HAVE_BLK_QUEUE_SPLIT_Q_BIO_BIOSET) + /* if _BIOSET is true, it's the variant with 3 arguments */ +@@ -222,6 +227,7 @@ + NO, "present"); + # endif + #endif ++#endif + + patch(1, "security_netlink_recv", false, true, + COMPAT_HAVE_SECURITY_NETLINK_RECV, "present"); +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_blk_queue_split_q_bio.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_blk_queue_split_q_bio.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_blk_queue_split_q_bio.c 2020-10-10 13:00:26.543933383 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_blk_queue_split_q_bio.c 2020-10-10 13:03:31.905257690 +0800 +@@ -2,5 +2,10 @@ + + void dummy(struct request_queue *q, struct bio *bio) + { ++/* together with generic_make_request change to submit_bio_noacct */ ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++ blk_queue_split(&bio); ++#else + blk_queue_split(q, &bio); ++#endif + } +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_main.c drbd-9.0.25~0+git.bd41626d/drbd/drbd_main.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_main.c 2020-10-10 13:00:26.547933412 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_main.c 2020-10-10 13:00:51.936114797 +0800 +@@ -161,6 +161,9 @@ + .owner = THIS_MODULE, + .open = drbd_open, + .release = drbd_release, ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++ .submit_bio = drbd_make_request, ++#endif + }; + + struct bio *bio_alloc_drbd(gfp_t gfp_mask) +@@ -3709,7 +3712,11 @@ + + init_rwsem(&device->uuid_sem); + ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++ q = blk_alloc_queue(NUMA_NO_NODE); ++#else + q = blk_alloc_queue(drbd_make_request, NUMA_NO_NODE); ++#endif + if (!q) + goto out_no_q; + device->rq_queue = q; +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_req.c drbd-9.0.25~0+git.bd41626d/drbd/drbd_req.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_req.c 2020-10-10 13:00:26.547933412 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_req.c 2020-10-10 13:05:16.018001520 +0800 +@@ -2183,15 +2183,26 @@ + } + } + ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++blk_qc_t drbd_make_request(struct bio *bio) ++{ ++ struct drbd_device *device = bio->bi_disk->private_data; ++#else + blk_qc_t drbd_make_request(struct request_queue *q, struct bio *bio) + { + struct drbd_device *device = (struct drbd_device *) q->queuedata; ++#endif ++ + #ifdef CONFIG_DRBD_TIMING_STATS + ktime_t start_kt; + #endif + unsigned long start_jif; + ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++ blk_queue_split(&bio); ++#else + blk_queue_split(q, &bio); ++#endif + + if (device->cached_err_io) { + bio->bi_status = BLK_STS_IOERR; diff --git a/compat_generic_make_request.patch b/compat_generic_make_request.patch new file mode 100644 index 0000000..c6a11a8 --- /dev/null +++ b/compat_generic_make_request.patch @@ -0,0 +1,49 @@ +Upstream ed00aabd5eb9fb44d6aff1173234a2e911b9fead +block: rename generic_make_request to submit_bio_noacct + +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_int.h drbd-9.0.25~0+git.bd41626d/drbd/drbd_int.h +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_int.h 2020-09-19 09:26:23.903673522 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_int.h 2020-09-19 09:34:03.363139586 +0800 +@@ -2063,7 +2063,11 @@ + bio->bi_status = BLK_STS_IOERR; + bio_endio(bio); + } else { ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++ submit_bio_noacct(bio); ++#else + generic_make_request(bio); ++#endif + } + } + +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_generic_make_request.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_generic_make_request.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_generic_make_request.c 1970-01-01 08:00:00.000000000 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_generic_make_request.c 2020-09-19 09:30:31.729550871 +0800 +@@ -0,0 +1,11 @@ ++#include ++ ++/* in Commit ed00aabd5eb9fb44d6aff1173234a2e911b9fead ++ generic_make_request rename to submit_bio_noacct ++ */ ++ ++void foo(void) ++{ ++ struct bio *bio; ++ generic_make_request(bio); ++} +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_req.c drbd-9.0.25~0+git.bd41626d/drbd/drbd_req.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_req.c 2020-09-19 09:26:23.903673522 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_req.c 2020-09-19 09:35:12.107655181 +0800 +@@ -1481,7 +1481,11 @@ + } else if (bio_op(bio) == REQ_OP_DISCARD) { + drbd_process_discard_or_zeroes_req(req, EE_TRIM); + } else { +- generic_make_request(bio); ++#ifndef COMPAT_HAVE_GENERIC_MAKE_REQUEST ++ submit_bio_noacct(bio); ++#else ++ generic_make_request(bio); ++#endif + } + put_ldev(device); + } else { diff --git a/drbd.spec b/drbd.spec index 032857f..563f33b 100644 --- a/drbd.spec +++ b/drbd.spec @@ -40,6 +40,11 @@ Patch3: drbd-fix-zero-metadata-limit-by-page-size-misaligned.patch Patch4: compat_remove_pgprot_88dca4c.patch Patch5: compat_remove_include_vermagic.patch Patch6: compat_remove_kernel_setsockopt.patch +# Compat to kernel v5.9 +Patch7: compat_generic_make_request.patch +Patch8: blk_alloc_queue_make_request.patch +Patch9: remove_congested_fn_congested_data.patch +Patch10: 1.patch Patch99: suse-coccinelle.patch #https://github.com/openSUSE/rpmlint-checks/blob/master/KMPPolicyCheck.py BuildRequires: coccinelle >= 1.0.8 @@ -79,6 +84,10 @@ installed kernel. %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 %patch99 -p1 mkdir source diff --git a/remove_congested_fn_congested_data.patch b/remove_congested_fn_congested_data.patch new file mode 100644 index 0000000..c8d7ac6 --- /dev/null +++ b/remove_congested_fn_congested_data.patch @@ -0,0 +1,115 @@ +1. Remove congested_fn and drbd_congested due to + 21cf866145047f8bfecb38ec8d2fed64464c074f +2. Change define of blkdev_get_by_path from fs.h to blkdev.h, + 3f1266f1f82d7b8c72472a8921e80aa3e611fb62 +3. Change define of bd_unlink_disk_holder from fs.h to genhd.h, + 3f1266f1f82d7b8c72472a8921e80aa3e611fb62 + +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/drbd_wrappers.h drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/drbd_wrappers.h +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/drbd_wrappers.h 2020-10-10 10:50:15.408562371 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/drbd_wrappers.h 2020-10-10 10:50:21.156601464 +0800 +@@ -143,9 +143,7 @@ + + #ifdef COMPAT_HAVE_POINTER_BACKING_DEV_INFO /* >= v4.11 */ + #define bdi_from_device(device) (device->ldev->backing_bdev->bd_disk->queue->backing_dev_info) +-#define init_bdev_info(bdev_info, drbd_congested, device) do { \ +- (bdev_info)->congested_fn = drbd_congested; \ +- (bdev_info)->congested_data = device; \ ++#define init_bdev_info(bdev_info, device) do { \ + set_bdi_cap_stable_writes(bdev_info->capabilities); \ + } while(0) + #define adjust_ra_pages(q, b) _adjust_ra_pages((q)->backing_dev_info->ra_pages, (b)->backing_dev_info->ra_pages) +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c 2020-10-10 10:50:15.408562371 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_bd_unlink_disk_holder.c 2020-10-10 10:50:29.488658135 +0800 +@@ -1,4 +1,5 @@ + #include ++#include + + #ifdef CONFIG_SYSFS + void dummy(struct block_device *bdev, struct gendisk *disk) +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_blkdev_get_by_path.c drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_blkdev_get_by_path.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd-kernel-compat/tests/have_blkdev_get_by_path.c 2020-10-10 10:50:15.408562371 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd-kernel-compat/tests/have_blkdev_get_by_path.c 2020-10-10 10:50:40.432732559 +0800 +@@ -1,4 +1,5 @@ + #include ++#include + + /* + * In kernel version 2.6.38-rc1, open_bdev_exclusive() was replaced by +diff -Naur drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_main.c drbd-9.0.25~0+git.bd41626d/drbd/drbd_main.c +--- drbd-9.0.25~0+git.bd41626d.orig/drbd/drbd_main.c 2020-10-10 10:50:15.412562399 +0800 ++++ drbd-9.0.25~0+git.bd41626d/drbd/drbd_main.c 2020-10-10 10:50:21.156601464 +0800 +@@ -3103,63 +3103,6 @@ + pr_info("module cleanup done.\n"); + } + +-/** +- * drbd_congested() - Callback for the flusher thread +- * @congested_data: User data +- * @bdi_bits: Bits the BDI flusher thread is currently interested in +- * +- * Returns 1<resource->flags)) { +- r |= (1 << WB_async_congested); +- /* Without good local data, we would need to read from remote, +- * and that would need the worker thread as well, which is +- * currently blocked waiting for that usermode helper to +- * finish. +- */ +- if (!get_ldev_if_state(device, D_UP_TO_DATE)) +- r |= (1 << WB_sync_congested); +- else +- put_ldev(device); +- r &= bdi_bits; +- goto out; +- } +- +- if (get_ldev(device)) { +- q = bdev_get_queue(device->ldev->backing_bdev); +- r = bdi_congested(q->backing_dev_info, bdi_bits); +- put_ldev(device); +- } +- +- if (bdi_bits & (1 << WB_async_congested)) { +- struct drbd_peer_device *peer_device; +- +- rcu_read_lock(); +- for_each_peer_device_rcu(peer_device, device) { +- if (test_bit(NET_CONGESTED, &peer_device->connection->transport.flags)) { +- r |= (1 << WB_async_congested); +- break; +- } +- } +- rcu_read_unlock(); +- } +- +-out: +- return r; +-} +- + static void drbd_init_workqueue(struct drbd_work_queue* wq) + { + spin_lock_init(&wq->q_lock); +@@ -3731,7 +3674,7 @@ + /* we have no partitions. we contain only ourselves. */ + device->this_bdev->bd_contains = device->this_bdev; + +- init_bdev_info(q->backing_dev_info, drbd_congested, device); ++ init_bdev_info(q->backing_dev_info, device); + + blk_queue_write_cache(q, true, true); +