diff --git a/0001-drbd-Fix-memory-leak.patch b/0001-drbd-Fix-memory-leak.patch new file mode 100644 index 0000000..8883ea0 --- /dev/null +++ b/0001-drbd-Fix-memory-leak.patch @@ -0,0 +1,81 @@ +From d64ebe7eb7df8c622b20bca38f3d7f4c7bb033c9 Mon Sep 17 00:00:00 2001 +From: "zhengbing.huang" +Date: Sun, 15 Dec 2024 14:50:56 +0800 +Subject: [PATCH] drbd: Fix memory leak + +In the output of kmemleak, we have the followe backtrace: + +unreferenced object 0xffff8885b57cda80 (size 64): + comm "drbd_r_testimg4", pid 37104, jiffies 4494192827 (age 127162.843s) + hex dump (first 32 bytes): + 31 20 6f 66 20 32 20 6e 6f 64 65 73 20 76 69 73 1 of 2 nodes vis + 69 62 6c 65 2c 20 6e 65 65 64 20 32 20 66 6f 72 ible, need 2 for + backtrace: + [<000000006d641d68>] __kmalloc_track_caller+0x15c/0x270 + [<000000006a7ffbcf>] kvasprintf+0xa7/0x120 + [<000000002d2f15b3>] drbd_state_err+0xa9/0x190 [drbd] + [<000000006aa2f3df>] __is_valid_soft_transition+0xe99/0xec0 [drbd] + [<0000000009d68cc7>] try_state_change+0x4f0/0x840 [drbd] + [<00000000d5640f06>] ___end_state_change+0x140/0x12a0 [drbd] + [<000000009f4b8d71>] __end_state_change+0xa1/0x130 [drbd] + [<000000001c6de1a7>] change_connection_state+0x5ee/0xbd0 [drbd] + [<00000000ce4408d6>] process_twopc+0x1d3e/0x2ce0 [drbd] + [<00000000df3af6e8>] receive_twopc+0x17b/0x2b0 [drbd] + [<000000009701f919>] drbd_receiver+0x311/0x6e0 [drbd] + [<0000000092c4aeb1>] drbd_thread_setup+0x19d/0x430 [drbd] + [<0000000098e316ab>] kthread+0x19c/0x1c0 + [<000000004c72b3a8>] ret_from_fork+0x1f/0x40 + +This is a memory leak. + +In drbd_state_err() function, if resource->state_change_err_str is a null pointer, +the err_str will not be free. +And _drbd_state_err() has same issues. + +So, if err_str has not put to up layer, free it in current function. + +Signed-off-by: zhengbing.huang +Signed-off-by: Joel Colledge +--- + drbd/drbd_state.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/drbd/drbd_state.c b/drbd/drbd_state.c +index f498eaa60396..0e693c8e3af0 100644 +--- a/drbd/drbd_state.c ++++ b/drbd/drbd_state.c +@@ -1557,10 +1557,13 @@ static __printf(2, 3) void _drbd_state_err(struct change_context *context, const + va_end(args); + if (!err_str) + return; +- if (context->err_str) +- *context->err_str = err_str; + if (context->flags & CS_VERBOSE) + drbd_err(resource, "%s\n", err_str); ++ ++ if (context->err_str) ++ *context->err_str = err_str; ++ else ++ kfree(err_str); + } + + static __printf(2, 3) void drbd_state_err(struct drbd_resource *resource, const char *fmt, ...) +@@ -1573,10 +1576,13 @@ static __printf(2, 3) void drbd_state_err(struct drbd_resource *resource, const + va_end(args); + if (!err_str) + return; +- if (resource->state_change_err_str) +- *resource->state_change_err_str = err_str; + if (resource->state_change_flags & CS_VERBOSE) + drbd_err(resource, "%s\n", err_str); ++ ++ if (resource->state_change_err_str) ++ *resource->state_change_err_str = err_str; ++ else ++ kfree(err_str); + } + + static enum drbd_state_rv __is_valid_soft_transition(struct drbd_resource *resource) +-- +2.43.0 + diff --git a/0001-drbd-properly-rate-limit-resync-progress-reports.patch b/0001-drbd-properly-rate-limit-resync-progress-reports.patch deleted file mode 100644 index c4c70ee..0000000 --- a/0001-drbd-properly-rate-limit-resync-progress-reports.patch +++ /dev/null @@ -1,119 +0,0 @@ -From aab03bfc73a62f95011316545a5c0fbb4817741b Mon Sep 17 00:00:00 2001 -From: Lars Ellenberg -Date: Wed, 14 Aug 2024 11:49:42 +0200 -Subject: [PATCH 01/32] drbd: properly rate-limit resync progress reports - -A peer_device in "paused" sync would have flooded the "drbd events2" -generic netlink broadcast with "resync progress reports", -if it cleared significant out-of-sync bits, -as is the case with application writes, -or several peers syncing from the same sync source -and having a "paused sync" replication state between themselves. - -If you have "many" such resources, this storm may even overflow receive buffers. -At most one progress report every three seconds should be enough, -and is what was intended. - -Use a new "last progress report time stamp" to throttle -advancing resync progress marks and progress report broadcasts. ---- - drbd/drbd_actlog.c | 35 +++++++++++++++++++++++------------ - drbd/drbd_int.h | 1 + - drbd/drbd_receiver.c | 1 + - drbd/drbd_state.c | 2 ++ - 4 files changed, 27 insertions(+), 12 deletions(-) - -diff --git a/drbd/drbd_actlog.c b/drbd/drbd_actlog.c -index b96560843878..646dcb29e1d9 100644 ---- a/drbd/drbd_actlog.c -+++ b/drbd/drbd_actlog.c -@@ -1020,19 +1020,30 @@ static bool update_rs_extent(struct drbd_peer_device *peer_device, - - void drbd_advance_rs_marks(struct drbd_peer_device *peer_device, unsigned long still_to_go) - { -- unsigned long now = jiffies; -- unsigned long last = peer_device->rs_mark_time[peer_device->rs_last_mark]; -- int next = (peer_device->rs_last_mark + 1) % DRBD_SYNC_MARKS; -- if (time_after_eq(now, last + DRBD_SYNC_MARK_STEP)) { -- if (peer_device->rs_mark_left[peer_device->rs_last_mark] != still_to_go && -- peer_device->repl_state[NOW] != L_PAUSED_SYNC_T && -- peer_device->repl_state[NOW] != L_PAUSED_SYNC_S) { -- peer_device->rs_mark_time[next] = now; -- peer_device->rs_mark_left[next] = still_to_go; -- peer_device->rs_last_mark = next; -- } -- drbd_peer_device_post_work(peer_device, RS_PROGRESS); -+ unsigned long now; -+ int next; -+ -+ /* report progress and advance marks only if we made progress */ -+ if (peer_device->rs_mark_left[peer_device->rs_last_mark] == still_to_go) -+ return; -+ -+ /* report progress and advance marks at most once every DRBD_SYNC_MARK_STEP (3 seconds) */ -+ now = jiffies; -+ if (!time_after_eq(now, peer_device->rs_last_progress_report_ts + DRBD_SYNC_MARK_STEP)) -+ return; -+ -+ /* Do not advance marks if we are "paused" */ -+ if (peer_device->repl_state[NOW] != L_PAUSED_SYNC_T && -+ peer_device->repl_state[NOW] != L_PAUSED_SYNC_S) { -+ next = (peer_device->rs_last_mark + 1) % DRBD_SYNC_MARKS; -+ peer_device->rs_mark_time[next] = now; -+ peer_device->rs_mark_left[next] = still_to_go; -+ peer_device->rs_last_mark = next; - } -+ -+ /* But still report progress even if paused. */ -+ peer_device->rs_last_progress_report_ts = now; -+ drbd_peer_device_post_work(peer_device, RS_PROGRESS); - } - - /* It is called lazy update, so don't do write-out too often. */ -diff --git a/drbd/drbd_int.h b/drbd/drbd_int.h -index 49bd7b0c407c..c18407899f59 100644 ---- a/drbd/drbd_int.h -+++ b/drbd/drbd_int.h -@@ -1285,6 +1285,7 @@ struct drbd_peer_device { - unsigned long rs_paused; - /* skipped because csum was equal [unit BM_BLOCK_SIZE] */ - unsigned long rs_same_csum; -+ unsigned long rs_last_progress_report_ts; - #define DRBD_SYNC_MARKS 8 - #define DRBD_SYNC_MARK_STEP (3*HZ) - /* block not up-to-date at mark [unit BM_BLOCK_SIZE] */ -diff --git a/drbd/drbd_receiver.c b/drbd/drbd_receiver.c -index 19634f6423bd..ee54cf3ac116 100644 ---- a/drbd/drbd_receiver.c -+++ b/drbd/drbd_receiver.c -@@ -3409,6 +3409,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet - peer_device->ov_skipped = 0; - peer_device->rs_total = ov_left; - peer_device->rs_last_writeout = now; -+ peer_device->rs_last_progress_report_ts = now; - for (i = 0; i < DRBD_SYNC_MARKS; i++) { - peer_device->rs_mark_left[i] = ov_left; - peer_device->rs_mark_time[i] = now; -diff --git a/drbd/drbd_state.c b/drbd/drbd_state.c -index be1de8f0653b..44f55ee5c939 100644 ---- a/drbd/drbd_state.c -+++ b/drbd/drbd_state.c -@@ -2483,6 +2483,7 @@ static void initialize_resync_progress_marks(struct drbd_peer_device *peer_devic - unsigned long now = jiffies; - int i; - -+ peer_device->rs_last_progress_report_ts = now; - for (i = 0; i < DRBD_SYNC_MARKS; i++) { - peer_device->rs_mark_left[i] = tw; - peer_device->rs_mark_time[i] = now; -@@ -2730,6 +2731,7 @@ static void finish_state_change(struct drbd_resource *resource, const char *tag) - peer_device->ov_last_skipped_size = 0; - peer_device->ov_last_skipped_start = 0; - peer_device->rs_last_writeout = now; -+ peer_device->rs_last_progress_report_ts = now; - for (i = 0; i < DRBD_SYNC_MARKS; i++) { - peer_device->rs_mark_left[i] = peer_device->rs_total; - peer_device->rs_mark_time[i] = now; --- -2.35.3 - diff --git a/0002-drbd-inherit-history-UUIDs-from-sync-source-when-res.patch b/0002-drbd-inherit-history-UUIDs-from-sync-source-when-res.patch deleted file mode 100644 index 364c74c..0000000 --- a/0002-drbd-inherit-history-UUIDs-from-sync-source-when-res.patch +++ /dev/null @@ -1,60 +0,0 @@ -From f6613104a37c1d43cb50fd619afccba370db47a0 Mon Sep 17 00:00:00 2001 -From: Joel Colledge -Date: Tue, 20 Aug 2024 12:28:09 +0100 -Subject: [PATCH 02/32] drbd: inherit history UUIDs from sync source when - resync finishes - -This prevents unexpected "unrelated data" or "split-brain" situations -from occurring later. For example with nodes A, B and C: -* A diskless, B, C with disk, all connected, on UUID X -* Down B -* Write on C, new UUID Y generated -* Add disk on A, resyncs from C -* Down C -* Up B, connects to A, should resync from A - -Without this change, "unrelated data" or "split-brain" occurs between A -and B. -Node A has current UUID Y, but knows nothing about X. -Node B has current UUID X, but knows nothing about Y. - -This scenario is also possible with "quorum majority". - -Fix this by adding the history and bitmap UUIDs from the sync source -into the history on the sync target when a resync finishes. In the above -scenario, this adds the UUID X into the history on A and so has the -effect that a full sync from A to B occurs in the final step. ---- - drbd/drbd_main.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c -index 7968be7c4c3f..862438885f35 100644 ---- a/drbd/drbd_main.c -+++ b/drbd/drbd_main.c -@@ -5030,11 +5030,22 @@ u64 drbd_uuid_resync_finished(struct drbd_peer_device *peer_device) __must_hold( - { - struct drbd_device *device = peer_device->device; - unsigned long flags; -+ int i; - u64 ss_nz_bm; /* sync_source has non zero bitmap for. expressed as nodemask */ - u64 pwcu; /* peers with current uuid */ - u64 newer; - - spin_lock_irqsave(&device->ldev->md.uuid_lock, flags); -+ // Inherit history from the sync source -+ for (i = 0; i < ARRAY_SIZE(peer_device->history_uuids); i++) -+ _drbd_uuid_push_history(device, peer_device->history_uuids[i] & ~UUID_PRIMARY); -+ -+ // Inherit history in bitmap UUIDs from the sync source -+ for (i = 0; i < DRBD_PEERS_MAX; i++) -+ if (peer_device->bitmap_uuids[i] != -1) -+ _drbd_uuid_push_history(device, -+ peer_device->bitmap_uuids[i] & ~UUID_PRIMARY); -+ - ss_nz_bm = __test_bitmap_slots_of_peer(peer_device); - pwcu = peers_with_current_uuid(device, peer_device->current_uuid); - --- -2.35.3 - diff --git a/0003-build-compat-fix-line-offset-in-annotation-pragmas-p.patch b/0003-build-compat-fix-line-offset-in-annotation-pragmas-p.patch deleted file mode 100644 index cbe6c49..0000000 --- a/0003-build-compat-fix-line-offset-in-annotation-pragmas-p.patch +++ /dev/null @@ -1,36 +0,0 @@ -From d6f2b71109f6a589fbc3d5c571c840a6bd142943 Mon Sep 17 00:00:00 2001 -From: Lars Ellenberg -Date: Thu, 22 Aug 2024 16:05:25 +0200 -Subject: [PATCH 03/32] build,compat: fix line offset in annotation pragmas - pointing to patched sources - -I forgot to update the "new position" by the two output pragma lines -for each non-context to context line transition per chunk. - -Offsets would accumultate within the chunk, but reset with the next chunk. - -Pragmas pointing into the "patched" file would be off by two lines -(per such transition within a chunk), pointing to some line 2 (4,6,8) lines -above the actual offending line. - -Noticed during recent compat work when the backward compat cocci rules -where still incomplete. ---- - .../annotate-diff-with-original-file-position-pragmas.pl | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drbd/drbd-kernel-compat/annotate-diff-with-original-file-position-pragmas.pl b/drbd/drbd-kernel-compat/annotate-diff-with-original-file-position-pragmas.pl -index c28265e6dd9d..de95689a6ef0 100644 ---- a/drbd/drbd-kernel-compat/annotate-diff-with-original-file-position-pragmas.pl -+++ b/drbd/drbd-kernel-compat/annotate-diff-with-original-file-position-pragmas.pl -@@ -91,6 +91,7 @@ m{^--- (?:\./)?(\S+)$} and do { - $chunk .= qq{+# $. "$patch_name"\n}; - $chunk .= qq{+# $o_pos "$ABS_NAME"\n}; - $n_count += 2; -+ $n_pos += 2; - $extra_ncount += 2; - $file_line_context_points_to_orig = 1; - $state = ' '; --- -2.35.3 - diff --git a/0004-drbd-fix-exposed_uuid-going-backward.patch b/0004-drbd-fix-exposed_uuid-going-backward.patch deleted file mode 100644 index 0d5529c..0000000 --- a/0004-drbd-fix-exposed_uuid-going-backward.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 2f464b8e8235efe2c5d972cf8054dcc2010b100e Mon Sep 17 00:00:00 2001 -From: Philipp Reisner -Date: Wed, 14 Aug 2024 17:42:44 +0200 -Subject: [PATCH 04/32] drbd: fix exposed_uuid going backward - -When a diskless node in the primary role creates a new current UUID, -it sends it all its UpToDate peers and sets it as its own exposed -UUID. If there is only one UpToDate node in the secondary role and it -sends its current UUID to the diskless primary at about the same time, -then with the following state change, through the function -ensure_expose_data_uuid(), the diskless primary sets its exposed_uuid -back to the previous one. - -Avoid this problem by not accepting a current_uuid update from a peer -when I am primary (authoritative), and I have told the peer the latest -update, and that peer is already on that latest (authoritative) value. ---- - drbd/drbd_main.c | 1 + - drbd/drbd_receiver.c | 10 +++++++++- - 2 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c -index 862438885f35..bc3283b045c9 100644 ---- a/drbd/drbd_main.c -+++ b/drbd/drbd_main.c -@@ -1484,6 +1484,7 @@ int drbd_send_current_uuid(struct drbd_peer_device *peer_device, u64 current_uui - if (!p) - return -EIO; - -+ peer_device->comm_current_uuid = current_uuid; - p->uuid = cpu_to_be64(current_uuid); - p->weak_nodes = cpu_to_be64(weak_nodes); - return drbd_send_command(peer_device, P_CURRENT_UUID, DATA_STREAM); -diff --git a/drbd/drbd_receiver.c b/drbd/drbd_receiver.c -index ee54cf3ac116..985fac8e69b3 100644 ---- a/drbd/drbd_receiver.c -+++ b/drbd/drbd_receiver.c -@@ -5815,7 +5815,15 @@ static int receive_uuids110(struct drbd_connection *connection, struct packet_in - peer_md = device->ldev->md.peers; - spin_lock_irq(&device->ldev->md.uuid_lock); - } -- peer_device->current_uuid = be64_to_cpu(p->current_uuid); -+ -+ if (device->resource->role[NOW] != R_PRIMARY || -+ device->disk_state[NOW] != D_DISKLESS || -+ (peer_device->current_uuid & ~UUID_PRIMARY) != -+ (device->exposed_data_uuid & ~UUID_PRIMARY) || -+ (peer_device->comm_current_uuid & ~UUID_PRIMARY) != -+ (device->exposed_data_uuid & ~UUID_PRIMARY)) -+ peer_device->current_uuid = be64_to_cpu(p->current_uuid); -+ - peer_device->dirty_bits = be64_to_cpu(p->dirty_bits); - peer_device->uuid_flags = be64_to_cpu(p->uuid_flags); - if (peer_device->uuid_flags & UUID_FLAG_HAS_UNALLOC) { --- -2.35.3 - diff --git a/0005-drbd-Proper-locking-around-new_current_uuid-on-a-dis.patch b/0005-drbd-Proper-locking-around-new_current_uuid-on-a-dis.patch deleted file mode 100644 index 715c789..0000000 --- a/0005-drbd-Proper-locking-around-new_current_uuid-on-a-dis.patch +++ /dev/null @@ -1,39 +0,0 @@ -From c7384276634be7c5b49ef0b8d7fa064927a207f8 Mon Sep 17 00:00:00 2001 -From: Philipp Reisner -Date: Wed, 14 Aug 2024 19:42:40 +0200 -Subject: [PATCH 05/32] drbd: Proper locking around new_current_uuid on a - diskless - -Like the current UUID of a diskful node, changing the exposed_uuid of -a diskless node needs to be serialized with the UUID exchange when -establishing new connections. ---- - drbd/drbd_main.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c -index bc3283b045c9..2792b9896271 100644 ---- a/drbd/drbd_main.c -+++ b/drbd/drbd_main.c -@@ -4827,7 +4827,10 @@ void drbd_uuid_new_current(struct drbd_device *device, bool forced) - current_uuid |= UUID_PRIMARY; - else - current_uuid &= ~UUID_PRIMARY; -+ -+ down_write(&device->uuid_sem); - drbd_uuid_set_exposed(device, current_uuid, false); -+ downgrade_write(&device->uuid_sem); - drbd_info(device, "sending new current UUID: %016llX\n", current_uuid); - - weak_nodes = drbd_weak_nodes_device(device); -@@ -4837,6 +4840,7 @@ void drbd_uuid_new_current(struct drbd_device *device, bool forced) - peer_device->current_uuid = current_uuid; - } - } -+ up_read(&device->uuid_sem); - } - } - --- -2.35.3 - diff --git a/0006-build-CycloneDX-fix-bom-ref-add-purl.patch b/0006-build-CycloneDX-fix-bom-ref-add-purl.patch deleted file mode 100644 index da2eb46..0000000 --- a/0006-build-CycloneDX-fix-bom-ref-add-purl.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 18795749745baa4b8b37cb56eb12a57a7bd55da7 Mon Sep 17 00:00:00 2001 -From: Roland Kammerer -Date: Tue, 27 Aug 2024 09:08:31 +0200 -Subject: [PATCH 06/32] build: CycloneDX: fix bom-ref, add purl - ---- - Makefile | 4 ++-- - drbd-kmod.cdx.json.in | 1 + - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/Makefile b/Makefile -index 83a2ed8a42f7..3f58568cc138 100644 ---- a/Makefile -+++ b/Makefile -@@ -238,11 +238,11 @@ drbd-kmod_rhel.spdx drbd-kmod_sles.spdx: - # only call this wrapper from drbd-kmod.cdx.json - .PHONY: cdx-sub - cdx-sub: -- cat $(CDX_FILE).in | jq --args '.metadata.timestamp = "$(CDX_DATE)" | .metadata.component.version = "$(FDIST_VERSION)" | .metadata.component."bom-ref" = "https://github.com/LINBIT/drbd/releases/tag/drbd-$(FDIST_VERSION)"' > $(CDX_FILE) -+ cat $(CDX_FILE).in | jq --args '.metadata.timestamp = "$(CDX_DATE)" | .metadata.component.version = "$(FDIST_VERSION)" | .metadata.component."bom-ref" = "$(PURL)" | .metadata.component.purl = "$(PURL)"' > $(CDX_FILE) - - .PHONY: drbd-kmod.cdx.json - drbd-kmod.cdx.json: -- $(MAKE) -s cdx-sub CDX_DATE="$$(date --utc +%FT%TZ)" CDX_FILE="$@" -+ $(MAKE) -s cdx-sub CDX_DATE="$$(date --utc +%FT%TZ)" PURL="pkg:github/LINBIT/drbd@drbd-$(FDIST_VERSION)" CDX_FILE="$@" - ! grep -q __PLACEHOLDER__ $@ - - # update of .filelist is forced: -diff --git a/drbd-kmod.cdx.json.in b/drbd-kmod.cdx.json.in -index f7a4c4a46aa6..ab4e05a43187 100644 ---- a/drbd-kmod.cdx.json.in -+++ b/drbd-kmod.cdx.json.in -@@ -18,6 +18,7 @@ - "name": "kmod-drbd", - "version": "__PLACEHOLDER__", - "bom-ref": "__PLACEHOLDER__", -+ "purl": "__PLACEHOLDER__", - "licenses": [ - { - "licenses": { --- -2.35.3 - diff --git a/0007-build-Another-update-to-the-spdx-files.patch b/0007-build-Another-update-to-the-spdx-files.patch deleted file mode 100644 index 7fc54f9..0000000 --- a/0007-build-Another-update-to-the-spdx-files.patch +++ /dev/null @@ -1,51 +0,0 @@ -From c4dd27cc69b99e13d4117fa348f968cf2199db6b Mon Sep 17 00:00:00 2001 -From: Philipp Reisner -Date: Wed, 28 Aug 2024 18:43:31 +0200 -Subject: [PATCH 07/32] build: Another update to the spdx files - -Some enterprise customers require these files to contain a -"PackageCopyrightText" tag. Apart from that they require the -SPDX in JSON format. That will come in another commit. ---- - Makefile | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 3f58568cc138..80c20d24ab54 100644 ---- a/Makefile -+++ b/Makefile -@@ -205,6 +205,8 @@ PackageSupplier: Organization: LINBIT HA-Solutions GmbH - PackageDownloadLocation: https://github.com/LINBIT/drbd - FilesAnalyzed: false - PackageLicenseDeclared: GPL-2.0-only -+PackageCopyrightText: 2001-2008, LINBIT Information Technologies GmbH -+2008-$(SPDX_YEAR), LINBIT HA-Solutions GmbH - Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-$(SPDX_PKG_NAME) - endef - -@@ -219,6 +221,7 @@ drbd-kmod_rhel.spdx drbd-kmod_sles.spdx: - SPDX_DATE="$$(date --utc +%FT%TZ)"; \ - SPDX_UUID="$$(cat /proc/sys/kernel/random/uuid)"; \ - SPDX_VERSION="$(REL_VERSION)"; \ -+ SPDX_YEAR="$$(date --utc +%Y)"; \ - case "$@" in \ - drbd-kmod_rhel.spdx) SPDX_PKG_NAME=kmod-drbd;; \ - drbd-kmod_sles.spdx) SPDX_PKG_NAME=drbd-kmp-default;; \ -@@ -228,11 +231,13 @@ drbd-kmod_rhel.spdx drbd-kmod_sles.spdx: - test -n "$$SPDX_DATE"; \ - test -n "$$SPDX_UUID"; \ - test -n "$$SPDX_VERSION"; \ -+ test -n "$$SPDX_YEAR"; \ - $(MAKE) spdx-file SPDX_UUID="$$SPDX_UUID" \ - SPDX_DATE="$$SPDX_DATE" \ - SPDX_FILE_TMP="$@.tmp" \ - SPDX_PKG_NAME="$$SPDX_PKG_NAME" \ -- SPDX_VERSION="$$SPDX_VERSION"; \ -+ SPDX_VERSION="$$SPDX_VERSION" \ -+ SPDX_YEAR="$$SPDX_YEAR"; \ - mv $@.tmp $@; ) - - # only call this wrapper from drbd-kmod.cdx.json --- -2.35.3 - diff --git a/0008-build-generate-spdx.json-not-tag-value-format.patch b/0008-build-generate-spdx.json-not-tag-value-format.patch deleted file mode 100644 index 6d3c19e..0000000 --- a/0008-build-generate-spdx.json-not-tag-value-format.patch +++ /dev/null @@ -1,235 +0,0 @@ -From ca3589743378a7750b9e6a8e19b904d57986cce4 Mon Sep 17 00:00:00 2001 -From: Lars Ellenberg -Date: Wed, 28 Aug 2024 20:00:36 +0200 -Subject: [PATCH 08/32] build: generate spdx.json, not "tag value" format - -Generates .spdx.json files in SPDX-json format instead of tag/value. -This appears to be more machine friendly. - -Use jq with "null" input and \(env.) string interpolation in templates. - -Move all this to a new ./sbom/ subdirectory. ---- - Makefile | 74 ++----------------- - sbom/Makefile | 24 ++++++ - .../drbd-kmod.cdx.json.in | 8 +- - sbom/drbd-kmod.spdx.json.in | 32 ++++++++ - 4 files changed, 68 insertions(+), 70 deletions(-) - create mode 100644 sbom/Makefile - rename drbd-kmod.cdx.json.in => sbom/drbd-kmod.cdx.json.in (84%) - create mode 100644 sbom/drbd-kmod.spdx.json.in - -diff --git a/Makefile b/Makefile -index 80c20d24ab54..37ffcd777d09 100644 ---- a/Makefile -+++ b/Makefile -@@ -92,6 +92,8 @@ ifndef FDIST_VERSION - FDIST_VERSION := $(DIST_VERSION) - endif - -+export REL_VERSION FDIST_VERSION -+ - all: module tools - - .PHONY: all tools module -@@ -189,76 +191,15 @@ drbd/.drbd_git_revision: FORCE - @echo >&2 "Need a git checkout to regenerate $@"; test -s $@ - endif - --export define SPDX_TEMPLATE --SPDXVersion: SPDX-2.3 --DataLicense: CC0-1.0 --SPDXID: SPDXRef-DOCUMENT --DocumentName: drbd kernel module SBOM (software bill of materials) --DocumentNamespace: https://linbit.org/spdx-docs/drbd-kmod-$(SPDX_VERSION)-$(SPDX_UUID) --Creator: Person: Philipp Reisner (philipp.reisner@linbit.com) --Created: $(SPDX_DATE) -- --PackageName: $(SPDX_PKG_NAME) --SPDXID: SPDXRef-Package-$(SPDX_PKG_NAME) --PackageVersion: $(SPDX_VERSION) --PackageSupplier: Organization: LINBIT HA-Solutions GmbH --PackageDownloadLocation: https://github.com/LINBIT/drbd --FilesAnalyzed: false --PackageLicenseDeclared: GPL-2.0-only --PackageCopyrightText: 2001-2008, LINBIT Information Technologies GmbH --2008-$(SPDX_YEAR), LINBIT HA-Solutions GmbH --Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-$(SPDX_PKG_NAME) --endef -- --# only call this wrapper from drbd-kmod_{sles,rhel}.spdx --.PHONY: spdx-file --spdx-file: -- @echo "$$SPDX_TEMPLATE" > $(SPDX_FILE_TMP) -- --.PHONY: drbd-kmod_rhel.spdx drbd-kmod_sles.spdx --drbd-kmod_rhel.spdx drbd-kmod_sles.spdx: -- @set -e; ( truncate -s0 $@.tmp; \ -- SPDX_DATE="$$(date --utc +%FT%TZ)"; \ -- SPDX_UUID="$$(cat /proc/sys/kernel/random/uuid)"; \ -- SPDX_VERSION="$(REL_VERSION)"; \ -- SPDX_YEAR="$$(date --utc +%Y)"; \ -- case "$@" in \ -- drbd-kmod_rhel.spdx) SPDX_PKG_NAME=kmod-drbd;; \ -- drbd-kmod_sles.spdx) SPDX_PKG_NAME=drbd-kmp-default;; \ -- *) false;; \ -- esac; \ -- test -n "$$SPDX_TEMPLATE"; \ -- test -n "$$SPDX_DATE"; \ -- test -n "$$SPDX_UUID"; \ -- test -n "$$SPDX_VERSION"; \ -- test -n "$$SPDX_YEAR"; \ -- $(MAKE) spdx-file SPDX_UUID="$$SPDX_UUID" \ -- SPDX_DATE="$$SPDX_DATE" \ -- SPDX_FILE_TMP="$@.tmp" \ -- SPDX_PKG_NAME="$$SPDX_PKG_NAME" \ -- SPDX_VERSION="$$SPDX_VERSION" \ -- SPDX_YEAR="$$SPDX_YEAR"; \ -- mv $@.tmp $@; ) -- --# only call this wrapper from drbd-kmod.cdx.json --.PHONY: cdx-sub --cdx-sub: -- cat $(CDX_FILE).in | jq --args '.metadata.timestamp = "$(CDX_DATE)" | .metadata.component.version = "$(FDIST_VERSION)" | .metadata.component."bom-ref" = "$(PURL)" | .metadata.component.purl = "$(PURL)"' > $(CDX_FILE) -- --.PHONY: drbd-kmod.cdx.json --drbd-kmod.cdx.json: -- $(MAKE) -s cdx-sub CDX_DATE="$$(date --utc +%FT%TZ)" PURL="pkg:github/LINBIT/drbd@drbd-$(FDIST_VERSION)" CDX_FILE="$@" -- ! grep -q __PLACEHOLDER__ $@ -- - # update of .filelist is forced: - .fdist_version: FORCE - @test -s $@ && test "$$(cat $@)" = "$(FDIST_VERSION)" || echo "$(FDIST_VERSION)" > $@ - - .filelist: .fdist_version FORCE - @$(GIT) ls-files --recurse -- ':!:.git*' $(if $(PRESERVE_DEBIAN),,':!:debian') > $@.new -+ @test -s $@.new # assert there is something in .filelist.new now - @mkdir -p drbd/drbd-kernel-compat/cocci_cache/ - @find drbd/drbd-kernel-compat/cocci_cache/ -type f -not -path '*/\.*' >> $@.new -- @test -s $@.new # assert there is something in .filelist.new now - @mv $@.new $@ - @echo "./.filelist updated." - -@@ -273,9 +214,10 @@ drbd-kmod.cdx.json: - comma := , - backslash_comma := \, - escape_comma = $(subst $(comma),$(backslash_comma),$(1)) --tgz-extra-files := \ -- .fdist_version drbd/.drbd_git_revision .filelist \ -- drbd-kmod_rhel.spdx drbd-kmod_sles.spdx drbd-kmod.cdx.json -+tgz-extra-files := .fdist_version drbd/.drbd_git_revision .filelist -+tgz-extra-files += sbom/drbd-kmod_rhel.spdx.json -+tgz-extra-files += sbom/drbd-kmod_sles.spdx.json -+tgz-extra-files += sbom/drbd-kmod.cdx.json - tgz: - test -s .filelist # .filelist must be present - test -n "$(FDIST_VERSION)" # FDIST_VERSION must be known -@@ -318,7 +260,7 @@ debrelease: - tarball: - $(MAKE) distclean - $(MAKE) check-submods check_all_committed drbd/.drbd_git_revision -- $(MAKE) drbd-kmod_rhel.spdx drbd-kmod_sles.spdx drbd-kmod.cdx.json -+ $(MAKE) -C sbom drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json drbd-kmod.cdx.json - $(MAKE) .filelist - $(MAKE) tgz - -diff --git a/sbom/Makefile b/sbom/Makefile -new file mode 100644 -index 000000000000..757f57e4db60 ---- /dev/null -+++ b/sbom/Makefile -@@ -0,0 +1,24 @@ -+ -+# we inherit some variables from our "parent" Makefile -+THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST)) -+$(foreach v,REL_VERSION FDIST_VERSION,$(if $($(v)),,$(error "Do not use this Makefile ($(THIS_MAKEFILE)) directly! ($(v) missing)))) -+ -+all: drbd-kmod.cdx.json drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json -+ -+export SPDX_VERSION SPDX_DATE SPDX_YEAR SPDX_UUID SPDX_PKG_NAME -+SPDX_VERSION:=$(REL_VERSION) -+SPDX_DATE:=$(shell date --utc +%FT%TZ) -+SPDX_YEAR:=$(firstword $(subst -, ,$(SPDX_DATE))) -+drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json: SPDX_UUID:=$(shell cat /proc/sys/kernel/random/uuid) -+drbd-kmod_rhel.spdx.json: SPDX_PKG_NAME:=kmod-drbd -+drbd-kmod_sles.spdx.json: SPDX_PKG_NAME:=drbd-kmp-default -+drbd-kmod_rhel.spdx.json drbd-kmod_sles.spdx.json: FORCE -+ @rm -f $@; jq -n -f drbd-kmod.spdx.json.in > $@.tmp && mv $@.tmp $@ -+ -+# uses: -+# SPDX_DATE from above and FDIST_VERSION from parent Makefile -+drbd-kmod.cdx.json: FORCE -+ @rm -f $@; jq -n -f drbd-kmod.cdx.json.in > $@.tmp && mv $@.tmp $@ -+ -+.PHONY: FORCE -+FORCE: -diff --git a/drbd-kmod.cdx.json.in b/sbom/drbd-kmod.cdx.json.in -similarity index 84% -rename from drbd-kmod.cdx.json.in -rename to sbom/drbd-kmod.cdx.json.in -index ab4e05a43187..99858e8b9b43 100644 ---- a/drbd-kmod.cdx.json.in -+++ b/sbom/drbd-kmod.cdx.json.in -@@ -2,7 +2,7 @@ - "bomFormat": "CycloneDX", - "specVersion": "1.5", - "metadata": { -- "timestamp": "__PLACEHOLDER__", -+ "timestamp": "\(env.SPDX_DATE)", - "authors": [ - { - "name": "Philipp Reisner", -@@ -16,9 +16,9 @@ - "component": { - "type": "application", - "name": "kmod-drbd", -- "version": "__PLACEHOLDER__", -- "bom-ref": "__PLACEHOLDER__", -- "purl": "__PLACEHOLDER__", -+ "version": "\(env.FDIST_VERSION)", -+ "bom-ref": "pkg:github/LINBIT/drbd@drbd-\(env.FDIST_VERSION)", -+ "purl": "pkg:github/LINBIT/drbd@drbd-\(env.FDIST_VERSION)", - "licenses": [ - { - "licenses": { -diff --git a/sbom/drbd-kmod.spdx.json.in b/sbom/drbd-kmod.spdx.json.in -new file mode 100644 -index 000000000000..07c1003f8834 ---- /dev/null -+++ b/sbom/drbd-kmod.spdx.json.in -@@ -0,0 +1,32 @@ -+{ -+ "SPDXID": "SPDXRef-DOCUMENT", -+ "spdxVersion": "SPDX-2.3", -+ "creationInfo": { -+ "created": "\(env.SPDX_DATE)", -+ "creators": [ -+ "Person: Philipp Reisner (philipp.reisner@linbit.com)" -+ ] -+ }, -+ "name": "drbd kernel module SBOM (software bill of materials)", -+ "dataLicense": "CC0-1.0", -+ "documentNamespace": "https://linbit.org/spdx-docs/drbd-kmod-\(env.SPDX_VERSION)-\(env.SPDX_UUID)", -+ "packages": [ -+ { -+ "SPDXID": "SPDXRef-Package-\(env.SPDX_PKG_NAME)", -+ "copyrightText": "2001-2008, LINBIT Information Technologies GmbH\n2008-\(env.SPDX_YEAR), LINBIT HA-Solutions GmbH", -+ "downloadLocation": "https://github.com/LINBIT/drbd", -+ "filesAnalyzed": false, -+ "licenseDeclared": "GPL-2.0-only", -+ "name": "\(env.SPDX_PKG_NAME)", -+ "supplier": "Organization: LINBIT HA-Solutions GmbH", -+ "versionInfo": "\(env.SPDX_VERSION)" -+ } -+ ], -+ "relationships": [ -+ { -+ "spdxElementId": "SPDXRef-DOCUMENT", -+ "relationshipType": "DESCRIBES", -+ "relatedSpdxElement": "SPDXRef-Package-\(env.SPDX_PKG_NAME)" -+ } -+ ] -+} --- -2.35.3 - diff --git a/0009-compat-fix-gen_patch_names-for-bdev_file_open_by_pat.patch b/0009-compat-fix-gen_patch_names-for-bdev_file_open_by_pat.patch deleted file mode 100644 index 12dfbab..0000000 --- a/0009-compat-fix-gen_patch_names-for-bdev_file_open_by_pat.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 98325293e7d64ffae0e5e70620c5040ab0c76179 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Tue, 13 Aug 2024 12:23:52 +0200 -Subject: [PATCH 09/32] compat: fix gen_patch_names for bdev_file_open_by_path - ---- - drbd/drbd-kernel-compat/gen_patch_names.c | 12 +++++------- - 1 file changed, 5 insertions(+), 7 deletions(-) - -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index a9781bbd04e5..7549ee39afb7 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -564,14 +564,17 @@ int main(int argc, char **argv) - patch(1, "__bio_add_page", true, false, - COMPAT_HAVE___BIO_ADD_PAGE, "present"); - -+ /* blkdev_put is oldest, then bdev_open_by_path, then bdev_file_open_by_path */ - patch(1, "bdev_file_open_by_path", true, false, - COMPAT_HAVE_BDEV_FILE_OPEN_BY_PATH, "present"); -- - #if !defined(COMPAT_HAVE_BDEV_FILE_OPEN_BY_PATH) -+ /* middle ground: bdev_open_by_path */ - patch(1, "bdev_open_by_path", true, false, - COMPAT_HAVE_BDEV_OPEN_BY_PATH, "present"); -- - # if !defined(COMPAT_HAVE_BDEV_OPEN_BY_PATH) -+ /* old: blkdev_get_by_* and blkdev_put */ -+ patch(1, "blkdev_put", true, false, -+ COMPAT_BLKDEV_PUT_HAS_HOLDER, "has_holder"); - patch(1, "blkdev_get_by_path", true, false, - COMPAT_BLKDEV_GET_BY_PATH_HAS_HOLDER_OPS, "has_holder_ops"); - # endif -@@ -586,11 +589,6 @@ int main(int argc, char **argv) - patch(1, "blk_mode_t", true, false, - COMPAT_HAVE_BLK_MODE_T, "present"); - --#if !defined(COMPAT_HAVE_BDEV_OPEN_BY_PATH) -- patch(1, "blkdev_put", true, false, -- COMPAT_BLKDEV_PUT_HAS_HOLDER, "has_holder"); --#endif -- - patch(1, "genl_info_userhdr", true, false, - COMPAT_HAVE_GENL_INFO_USERHDR, "present"); - --- -2.35.3 - diff --git a/0010-compat-fix-nla_nest_start_noflag-test.patch b/0010-compat-fix-nla_nest_start_noflag-test.patch deleted file mode 100644 index 6cdfbd6..0000000 --- a/0010-compat-fix-nla_nest_start_noflag-test.patch +++ /dev/null @@ -1,35 +0,0 @@ -From f6078aa51ed5b776eb2f646553872d576c404c60 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Tue, 13 Aug 2024 12:40:27 +0200 -Subject: [PATCH 10/32] compat: fix nla_nest_start_noflag test -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -GCC complains: - -returning ‘struct nlattr *’ from a function with return type ‘int’ makes - integer from pointer without a cast - -Return the proper type from this function. ---- - drbd/drbd-kernel-compat/tests/have_nla_nest_start_noflag.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drbd/drbd-kernel-compat/tests/have_nla_nest_start_noflag.c b/drbd/drbd-kernel-compat/tests/have_nla_nest_start_noflag.c -index 1d8037c397c5..62ab06c563b7 100644 ---- a/drbd/drbd-kernel-compat/tests/have_nla_nest_start_noflag.c -+++ b/drbd/drbd-kernel-compat/tests/have_nla_nest_start_noflag.c -@@ -1,7 +1,7 @@ - /* {"version": "5.1-rc7", "commit": "ae0be8de9a53cda3505865c11826d8ff0640237c", "comment": "nla_nest_start was renamed to _noflag, and the original version became a wrapper adding a flag", "author": "Michal Kubecek ", "date": "Fri Apr 26 11:13:06 2019 +0200"} */ - #include - --int dummy(struct sk_buff *skb, int attrtype) -+static struct nlattr *dummy(struct sk_buff *skb, int attrtype) - { - return nla_nest_start_noflag(skb, attrtype); - } --- -2.35.3 - diff --git a/0011-compat-fix-blk_alloc_disk-rule.patch b/0011-compat-fix-blk_alloc_disk-rule.patch deleted file mode 100644 index 0f838a2..0000000 --- a/0011-compat-fix-blk_alloc_disk-rule.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 32b84f7b4d071312e5e812eab6b26e4aad2899e4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Mon, 19 Aug 2024 16:19:47 +0200 -Subject: [PATCH 11/32] compat: fix blk_alloc_disk rule - ---- - drbd/drbd-kernel-compat/gen_patch_names.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index 7549ee39afb7..c21a43b39488 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -155,9 +155,10 @@ int main(int argc, char **argv) - - patch(1, "blk_alloc_disk", true, false, - COMPAT_BLK_ALLOC_DISK_TAKES_QUEUE_LIMITS, "takes_queue_limits"); -- -+#if !defined(COMPAT_BLK_ALLOC_DISK_TAKES_QUEUE_LIMITS) - patch(1, "blk_alloc_disk", true, false, - COMPAT_HAVE_BLK_ALLOC_DISK, "present"); -+#endif - - /*******************************************************************************/ - /* --- -2.35.3 - diff --git a/0012-drbd-remove-const-from-function-return-type.patch b/0012-drbd-remove-const-from-function-return-type.patch deleted file mode 100644 index 336b702..0000000 --- a/0012-drbd-remove-const-from-function-return-type.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 392743b95ab0aaff13d5c91eaaab5ae24388384f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Tue, 13 Aug 2024 12:29:35 +0200 -Subject: [PATCH 12/32] drbd: remove const from function return type - -Linux 6.10 enables some compiler flag that errors out with: - -error: type qualifiers ignored on function return type ---- - drbd/drbd_receiver.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drbd/drbd_receiver.c b/drbd/drbd_receiver.c -index 985fac8e69b3..1b9f80de6f41 100644 ---- a/drbd/drbd_receiver.c -+++ b/drbd/drbd_receiver.c -@@ -272,7 +272,7 @@ static const char *drbd_sync_rule_str(enum sync_rule rule) - return sync_rule_names[rule]; - } - --static const struct sync_descriptor strategy_descriptor(enum sync_strategy strategy) -+static struct sync_descriptor strategy_descriptor(enum sync_strategy strategy) - { - if (strategy < 0 || strategy > ARRAY_SIZE(sync_descriptors)) { - WARN_ON(true); --- -2.35.3 - diff --git a/0013-drbd-don-t-set-max_write_zeroes_sectors-in-decide_on.patch b/0013-drbd-don-t-set-max_write_zeroes_sectors-in-decide_on.patch deleted file mode 100644 index fb30d2f..0000000 --- a/0013-drbd-don-t-set-max_write_zeroes_sectors-in-decide_on.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 3672388dc75cbcdb5f3821b5f4354b55333004f5 Mon Sep 17 00:00:00 2001 -From: Christoph Hellwig -Date: Wed, 6 Mar 2024 15:03:30 +0100 -Subject: [PATCH 13/32] drbd: don't set max_write_zeroes_sectors in - decide_on_discard_support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -fixup_write_zeroes always overrides the max_write_zeroes_sectors value -a little further down the callchain, so don't bother to setup a limit -in decide_on_discard_support. - -Signed-off-by: Christoph Hellwig -Reviewed-by: Philipp Reisner -Reviewed-by: Lars Ellenberg -Tested-by: Christoph Böhmwalder -Link: https://lore.kernel.org/r/20240306140332.623759-6-philipp.reisner@linbit.com -Signed-off-by: Jens Axboe -Signed-off-by: Christoph Böhmwalder ---- - drbd/drbd_nl.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/drbd/drbd_nl.c b/drbd/drbd_nl.c -index ef315e02f437..a0c3534d8996 100644 ---- a/drbd/drbd_nl.c -+++ b/drbd/drbd_nl.c -@@ -2070,7 +2070,6 @@ static void decide_on_discard_support(struct drbd_device *device, - blk_queue_discard_granularity(q, 512); - max_discard_sectors = drbd_max_discard_sectors(device->resource); - blk_queue_max_discard_sectors(q, max_discard_sectors); -- blk_queue_max_write_zeroes_sectors(q, max_discard_sectors); - return; - - not_supported: --- -2.35.3 - diff --git a/0014-drbd-split-out-a-drbd_discard_supported-helper.patch b/0014-drbd-split-out-a-drbd_discard_supported-helper.patch deleted file mode 100644 index 158b866..0000000 --- a/0014-drbd-split-out-a-drbd_discard_supported-helper.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 78d5d462c2bdac350921c114caca588c606d7c0b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Mon, 1 Jul 2024 17:56:08 +0200 -Subject: [PATCH 14/32] drbd: split out a drbd_discard_supported helper - -Add a helper to check if discard is supported for a given connection / -backing device combination. - -Similar idea to upstream kernel commit 5eaee6e9c8f9 -("drbd: split out a drbd_discard_supported helper"), but also get rid of -the goto. ---- - drbd/drbd_nl.c | 29 ++++++++++++++++++----------- - 1 file changed, 18 insertions(+), 11 deletions(-) - -diff --git a/drbd/drbd_nl.c b/drbd/drbd_nl.c -index a0c3534d8996..e3f508cd0421 100644 ---- a/drbd/drbd_nl.c -+++ b/drbd/drbd_nl.c -@@ -2044,19 +2044,31 @@ static unsigned int drbd_max_discard_sectors(struct drbd_resource *resource) - return s; - } - --static void decide_on_discard_support(struct drbd_device *device, -+static bool drbd_discard_supported(struct drbd_device *device, - struct drbd_backing_dev *bdev) - { -- struct request_queue *q = device->rq_queue; -- unsigned int max_discard_sectors; -- - if (bdev && !bdev_max_discard_sectors(bdev->backing_bdev)) -- goto not_supported; -+ return false; - - if (!(common_connection_features(device->resource) & DRBD_FF_TRIM)) { - drbd_info(device, - "peer DRBD too old, does not support TRIM: disabling discards\n"); -- goto not_supported; -+ return false; -+ } -+ -+ return true; -+} -+ -+static void decide_on_discard_support(struct drbd_device *device, -+ struct drbd_backing_dev *bdev) -+{ -+ struct request_queue *q = device->rq_queue; -+ unsigned int max_discard_sectors; -+ -+ if (!drbd_discard_supported(device, bdev)) { -+ blk_queue_discard_granularity(q, 0); -+ blk_queue_max_discard_sectors(q, 0); -+ return; - } - - /* -@@ -2070,11 +2082,6 @@ static void decide_on_discard_support(struct drbd_device *device, - blk_queue_discard_granularity(q, 512); - max_discard_sectors = drbd_max_discard_sectors(device->resource); - blk_queue_max_discard_sectors(q, max_discard_sectors); -- return; -- --not_supported: -- blk_queue_discard_granularity(q, 0); -- blk_queue_max_discard_sectors(q, 0); - } - - static void fixup_write_zeroes(struct drbd_device *device, struct request_queue *q) --- -2.35.3 - diff --git a/0015-drbd-atomically-update-queue-limits-in-drbd_reconsid.patch b/0015-drbd-atomically-update-queue-limits-in-drbd_reconsid.patch deleted file mode 100644 index d728d56..0000000 --- a/0015-drbd-atomically-update-queue-limits-in-drbd_reconsid.patch +++ /dev/null @@ -1,194 +0,0 @@ -From 5931286cb71114c0f34e51fc7f357dceec139ca1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Tue, 13 Aug 2024 12:26:02 +0200 -Subject: [PATCH 15/32] drbd: atomically update queue limits in - drbd_reconsider_queue_parameters - -Switch drbd_reconsider_queue_parameters to set up the queue parameters -in an on-stack queue_limits structure and apply the limits atomically. -Remove various helpers that have become so trivial that they can be -folded into drbd_reconsider_queue_parameters. - -Same idea as upstream kernel commit e6dfe748f09e ("drbd: atomically -update queue limits in drbd_reconsider_queue_parameters"), but with some -adaptations to DRBD 9. ---- - drbd/drbd_nl.c | 136 ++++++++++++++++++++++--------------------------- - 1 file changed, 60 insertions(+), 76 deletions(-) - -diff --git a/drbd/drbd_nl.c b/drbd/drbd_nl.c -index e3f508cd0421..7193ba0c77e3 100644 ---- a/drbd/drbd_nl.c -+++ b/drbd/drbd_nl.c -@@ -2018,11 +2018,6 @@ static u32 common_connection_features(struct drbd_resource *resource) - return features; - } - --static void blk_queue_discard_granularity(struct request_queue *q, unsigned int granularity) --{ -- q->limits.discard_granularity = granularity; --} -- - static unsigned int drbd_max_discard_sectors(struct drbd_resource *resource) - { - struct drbd_connection *connection; -@@ -2059,73 +2054,20 @@ static bool drbd_discard_supported(struct drbd_device *device, - return true; - } - --static void decide_on_discard_support(struct drbd_device *device, -- struct drbd_backing_dev *bdev) --{ -- struct request_queue *q = device->rq_queue; -- unsigned int max_discard_sectors; -- -- if (!drbd_discard_supported(device, bdev)) { -- blk_queue_discard_granularity(q, 0); -- blk_queue_max_discard_sectors(q, 0); -- return; -- } -- -- /* -- * We don't care for the granularity, really. -- * -- * Stacking limits below should fix it for the local device. Whether or -- * not it is a suitable granularity on the remote device is not our -- * problem, really. If you care, you need to use devices with similar -- * topology on all peers. -- */ -- blk_queue_discard_granularity(q, 512); -- max_discard_sectors = drbd_max_discard_sectors(device->resource); -- blk_queue_max_discard_sectors(q, max_discard_sectors); --} -- --static void fixup_write_zeroes(struct drbd_device *device, struct request_queue *q) --{ -- /* Fixup max_write_zeroes_sectors after blk_stack_limits(): -- * if we can handle "zeroes" efficiently on the protocol, -- * we want to do that, even if our backend does not announce -- * max_write_zeroes_sectors itself. */ -- -- /* If all peers announce WZEROES support, use it. Otherwise, rather -- * send explicit zeroes than rely on some discard-zeroes-data magic. */ -- if (common_connection_features(device->resource) & DRBD_FF_WZEROES) -- q->limits.max_write_zeroes_sectors = DRBD_MAX_BBIO_SECTORS; -- else -- q->limits.max_write_zeroes_sectors = 0; --} -- --static void fixup_discard_support(struct drbd_device *device, struct request_queue *q) --{ -- unsigned int max_discard = device->rq_queue->limits.max_discard_sectors; -- unsigned int discard_granularity = device->rq_queue->limits.discard_granularity >> SECTOR_SHIFT; -- -- if (discard_granularity > max_discard) { -- blk_queue_discard_granularity(q, 0); -- blk_queue_max_discard_sectors(q, 0); -- } --} -- --void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_backing_dev *bdev) -+static void get_common_queue_limits(struct queue_limits *common_limits, -+ struct drbd_device *device) - { -- struct request_queue * const q = device->rq_queue; -- struct queue_limits common_limits = { 0 }; /* sizeof(struct queue_limits) ~ 110 bytes */ -- struct queue_limits peer_limits = { 0 }; - struct drbd_peer_device *peer_device; -- struct request_queue *b = NULL; -+ struct queue_limits peer_limits = { 0 }; - -- blk_set_stacking_limits(&common_limits); -+ blk_set_stacking_limits(common_limits); - /* This is the workaround for "bio would need to, but cannot, be split" */ -- common_limits.seg_boundary_mask = PAGE_SIZE - 1; -- common_limits.max_hw_sectors = device->device_conf.max_bio_size >> SECTOR_SHIFT; -- common_limits.max_sectors = device->device_conf.max_bio_size >> SECTOR_SHIFT; -- common_limits.physical_block_size = device->device_conf.block_size; -- common_limits.logical_block_size = device->device_conf.block_size; -- common_limits.io_min = device->device_conf.block_size; -+ common_limits->seg_boundary_mask = PAGE_SIZE - 1; -+ common_limits->max_hw_sectors = device->device_conf.max_bio_size >> SECTOR_SHIFT; -+ common_limits->max_sectors = device->device_conf.max_bio_size >> SECTOR_SHIFT; -+ common_limits->physical_block_size = device->device_conf.block_size; -+ common_limits->logical_block_size = device->device_conf.block_size; -+ common_limits->io_min = device->device_conf.block_size; - - rcu_read_lock(); - for_each_peer_device_rcu(peer_device, device) { -@@ -2140,21 +2082,63 @@ void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_ba - peer_limits.io_opt = peer_device->q_limits.io_opt; - peer_limits.max_hw_sectors = peer_device->q_limits.max_bio_size >> SECTOR_SHIFT; - peer_limits.max_sectors = peer_device->q_limits.max_bio_size >> SECTOR_SHIFT; -- blk_stack_limits(&common_limits, &peer_limits, 0); -+ blk_stack_limits(common_limits, &peer_limits, 0); - } - rcu_read_unlock(); -+} -+ -+void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_backing_dev *bdev) -+{ -+ struct request_queue * const q = device->rq_queue; -+ struct queue_limits lim; -+ struct request_queue *b = NULL; -+ -+ lim = queue_limits_start_update(q); -+ get_common_queue_limits(&lim, device); -+ -+ /* -+ * We don't care for the granularity, really. -+ * Stacking limits below should fix it for the local device. Whether or -+ * not it is a suitable granularity on the remote device is not our -+ * problem, really. If you care, you need to use devices with similar -+ * topology on all peers. -+ */ -+ if (drbd_discard_supported(device, bdev)) { -+ lim.discard_granularity = 512; -+ lim.max_hw_discard_sectors = drbd_max_discard_sectors(device->resource); -+ } else { -+ lim.discard_granularity = 0; -+ lim.max_hw_discard_sectors = 0; -+ } - - if (bdev) { - b = bdev->backing_bdev->bd_disk->queue; -- blk_stack_limits(&common_limits, &b->limits, 0); -- disk_update_readahead(device->vdisk); -+ blk_stack_limits(&lim, &b->limits, 0); -+ } -+ -+ /* -+ * If we can handle "zeroes" efficiently on the protocol, -+ * we want to do that, even if our backend does not announce -+ * max_write_zeroes_sectors itself. -+ */ -+ if (common_connection_features(device->resource) & DRBD_FF_WZEROES) -+ lim.max_write_zeroes_sectors = DRBD_MAX_BBIO_SECTORS; -+ else -+ lim.max_write_zeroes_sectors = 0; -+ -+ if ((lim.discard_granularity >> SECTOR_SHIFT) > -+ lim.max_hw_discard_sectors) { -+ /* -+ * discard_granularity is the smallest supported unit of a -+ * discard. If that is larger than the maximum supported discard -+ * size, we need to disable discards altogether. -+ */ -+ lim.discard_granularity = 0; -+ lim.max_hw_discard_sectors = 0; - } -- q->limits = common_limits; -- blk_queue_max_hw_sectors(q, common_limits.max_hw_sectors); -- decide_on_discard_support(device, bdev); - -- fixup_write_zeroes(device, q); -- fixup_discard_support(device, q); -+ if (queue_limits_commit_update(q, &lim)) -+ drbd_err(device, "setting new queue limits failed\n"); - } - - /* Make sure IO is suspended before calling this function(). */ --- -2.35.3 - diff --git a/0016-compat-test-and-patch-for-queue_limits_start_update.patch b/0016-compat-test-and-patch-for-queue_limits_start_update.patch deleted file mode 100644 index dbf7e59..0000000 --- a/0016-compat-test-and-patch-for-queue_limits_start_update.patch +++ /dev/null @@ -1,71 +0,0 @@ -From fef08ee4fac426f5dfbec124bd2bd58fbd390cb2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 22 Aug 2024 12:09:42 +0200 -Subject: [PATCH 16/32] compat: test and patch for queue_limits_start_update - ---- - ...ueue_limits_start_update__no_present.cocci | 20 +++++++++++++++++++ - drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++ - .../tests/have_queue_limits_start_update.c | 8 ++++++++ - 3 files changed, 31 insertions(+) - create mode 100644 drbd/drbd-kernel-compat/cocci/queue_limits_start_update__no_present.cocci - create mode 100644 drbd/drbd-kernel-compat/tests/have_queue_limits_start_update.c - -diff --git a/drbd/drbd-kernel-compat/cocci/queue_limits_start_update__no_present.cocci b/drbd/drbd-kernel-compat/cocci/queue_limits_start_update__no_present.cocci -new file mode 100644 -index 000000000000..4e34f5887181 ---- /dev/null -+++ b/drbd/drbd-kernel-compat/cocci/queue_limits_start_update__no_present.cocci -@@ -0,0 +1,20 @@ -+@@ -+identifier lim; -+identifier q; -+identifier device; -+identifier bdev; -+@@ -+void drbd_reconsider_queue_parameters(struct drbd_device *device, struct drbd_backing_dev *bdev) -+{ -+... -+ lim = -+- queue_limits_start_update(q); -++ q->limits; -+... -+- if (queue_limits_commit_update(q, &lim)) { ... } -++ blk_queue_max_hw_sectors(q, lim.max_hw_sectors); -++ q->limits = lim; -++ if (bdev) -++ disk_update_readahead(device->vdisk); -+... -+} -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index c21a43b39488..13aec5c8bd5f 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -393,6 +393,9 @@ int main(int argc, char **argv) - COMPAT_HAVE_WB_CONGESTED_ENUM, "present"); - #endif - -+ patch(1, "queue_limits_start_update", true, false, -+ COMPAT_HAVE_QUEUE_LIMITS_START_UPDATE, "present"); -+ - patch(1, "disk_update_readahead", true, false, - COMPAT_HAVE_DISK_UPDATE_READAHEAD, "present"); - -diff --git a/drbd/drbd-kernel-compat/tests/have_queue_limits_start_update.c b/drbd/drbd-kernel-compat/tests/have_queue_limits_start_update.c -new file mode 100644 -index 000000000000..a867d1675218 ---- /dev/null -+++ b/drbd/drbd-kernel-compat/tests/have_queue_limits_start_update.c -@@ -0,0 +1,8 @@ -+/* { "version": "v6.9-rc1", "commit": "d690cb8ae14bd377d422b7905b6959c7e7a45b95", "comment": "block: add an API to atomically update queue limits", "author": "Christoph Hellwig ", "date": "Tue Feb 13 08:34:14 2024 +0100" } */ -+ -+#include -+ -+static struct queue_limits foo(struct request_queue *q) -+{ -+ return queue_limits_start_update(q); -+} --- -2.35.3 - diff --git a/0017-compat-specify-which-essential-change-was-not-made.patch b/0017-compat-specify-which-essential-change-was-not-made.patch deleted file mode 100644 index 6187426..0000000 --- a/0017-compat-specify-which-essential-change-was-not-made.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 4352ece8e85da43090be171276a0d45d83c55a00 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 22 Aug 2024 12:25:39 +0200 -Subject: [PATCH 17/32] compat: specify which essential change was not made - ---- - drbd/drbd-kernel-compat/cocci/bdi_congested__yes_present.cocci | 2 +- - drbd/drbd-kernel-compat/cocci/bio_op_shift__yes_present.cocci | 2 +- - .../cocci/blk_queue_max_write_same_sectors__yes_present.cocci | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drbd/drbd-kernel-compat/cocci/bdi_congested__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/bdi_congested__yes_present.cocci -index 8a0260321ab5..fdf6afc8355f 100644 ---- a/drbd/drbd-kernel-compat/cocci/bdi_congested__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/bdi_congested__yes_present.cocci -@@ -21,7 +21,7 @@ struct device_statistics *s; - @ script:python depends on !(add_bdi_read_congested_congested_remote && add_bdi_read_congested_device_to_statistics) @ - @@ - import sys --print('ERROR: A rule making an essential change was not executed!', file=sys.stderr) -+print('ERROR: A rule making an essential change was not executed! (bdi_read_congested)', file=sys.stderr) - print('ERROR: This would not show up as a compiler error, but would still break DRBD.', file=sys.stderr) - print('ERROR: Check bdi_congested__yes_present.cocci', file=sys.stderr) - print('ERROR: As a precaution, the build will be aborted here.', file=sys.stderr) -diff --git a/drbd/drbd-kernel-compat/cocci/bio_op_shift__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/bio_op_shift__yes_present.cocci -index cc02f5b91c2e..3225291f7dbd 100644 ---- a/drbd/drbd-kernel-compat/cocci/bio_op_shift__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/bio_op_shift__yes_present.cocci -@@ -57,7 +57,7 @@ combine_opf(wire_flags_to_bio_op(dpf), - @ script:python depends on !combine_wire_flags @ - @@ - import sys --print('ERROR: A rule making an essential change was not executed!', file=sys.stderr) -+print('ERROR: A rule making an essential change was not executed! (combine_opf)', file=sys.stderr) - print('ERROR: This would not show up as a compiler error, but would still break DRBD.', file=sys.stderr) - print('ERROR: As a precaution, the build will be aborted here.', file=sys.stderr) - sys.exit(1) -diff --git a/drbd/drbd-kernel-compat/cocci/blk_queue_max_write_same_sectors__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/blk_queue_max_write_same_sectors__yes_present.cocci -index 8eb4eef7dfd5..9202ee9c2dc4 100644 ---- a/drbd/drbd-kernel-compat/cocci/blk_queue_max_write_same_sectors__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/blk_queue_max_write_same_sectors__yes_present.cocci -@@ -7,7 +7,7 @@ blk_queue_max_hw_sectors(q, ...); - @ script:python depends on !add_blk_queue_max_write_same_sectors @ - @@ - import sys --print('ERROR: A rule making an essential change was not executed!', file=sys.stderr) -+print('ERROR: A rule making an essential change was not executed! (blk_queue_max_write_same_sectors)', file=sys.stderr) - print('ERROR: This would not show up as a compiler error, but would still break DRBD.', file=sys.stderr) - print('ERROR: Check blk_queue_max_write_same_sectors_yes_present.cocci', file=sys.stderr) - print('ERROR: As a precaution, the build will be aborted here.', file=sys.stderr) --- -2.35.3 - diff --git a/0018-gen_patch_names-reorder-blk_mode_t.patch b/0018-gen_patch_names-reorder-blk_mode_t.patch deleted file mode 100644 index e735fe5..0000000 --- a/0018-gen_patch_names-reorder-blk_mode_t.patch +++ /dev/null @@ -1,57 +0,0 @@ -From b340c96d60065f08397d14360e7f045005c587e8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Fri, 23 Aug 2024 12:30:45 +0200 -Subject: [PATCH 18/32] gen_patch_names: reorder blk_mode_t - -And match against bdev_file_open_by_path. ---- - drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci | 7 +------ - drbd/drbd-kernel-compat/gen_patch_names.c | 6 +++--- - 2 files changed, 4 insertions(+), 9 deletions(-) - -diff --git a/drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci b/drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci -index d1312a093ffe..cde4430478e5 100644 ---- a/drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci -@@ -22,12 +22,7 @@ identifier mode; - @@ - // special case: bdev_open_by_path takes a blk_mode_t, so convert that too. I can't seem to get - // coccinelle to match the "READ | WRITE" condition generically, so just hard code it. --// NOTE: we use blkdev_get_by_path instead of bdev_open_by_path in some compat cases, so support that too. --( --bdev_open_by_path --| --blkdev_get_by_path --) -+bdev_file_open_by_path - (..., - - BLK_OPEN_READ | BLK_OPEN_WRITE - + FMODE_READ | FMODE_WRITE -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index 13aec5c8bd5f..6f62ea5827b7 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -568,6 +568,9 @@ int main(int argc, char **argv) - patch(1, "__bio_add_page", true, false, - COMPAT_HAVE___BIO_ADD_PAGE, "present"); - -+ patch(1, "blk_mode_t", true, false, -+ COMPAT_HAVE_BLK_MODE_T, "present"); -+ - /* blkdev_put is oldest, then bdev_open_by_path, then bdev_file_open_by_path */ - patch(1, "bdev_file_open_by_path", true, false, - COMPAT_HAVE_BDEV_FILE_OPEN_BY_PATH, "present"); -@@ -590,9 +593,6 @@ int main(int argc, char **argv) - patch(1, "block_device_operations_release", true, false, - COMPAT_BLOCK_DEVICE_OPERATIONS_RELEASE_TAKES_SINGLE_ARGUMENT, "takes_single_argument"); - -- patch(1, "blk_mode_t", true, false, -- COMPAT_HAVE_BLK_MODE_T, "present"); -- - patch(1, "genl_info_userhdr", true, false, - COMPAT_HAVE_GENL_INFO_USERHDR, "present"); - --- -2.35.3 - diff --git a/0019-compat-fix-blk_queue_update_readahead-patch.patch b/0019-compat-fix-blk_queue_update_readahead-patch.patch deleted file mode 100644 index 4facc42..0000000 --- a/0019-compat-fix-blk_queue_update_readahead-patch.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 37edd6c75cccba9b151e8b834c83832ae0382484 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 29 Aug 2024 13:27:31 +0200 -Subject: [PATCH 19/32] compat: fix blk_queue_update_readahead patch - -Did not match anymore ---- - .../cocci/blk_queue_update_readahead__no_present.cocci | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drbd/drbd-kernel-compat/cocci/blk_queue_update_readahead__no_present.cocci b/drbd/drbd-kernel-compat/cocci/blk_queue_update_readahead__no_present.cocci -index ed62a3426ad6..2e78f626261d 100644 ---- a/drbd/drbd-kernel-compat/cocci/blk_queue_update_readahead__no_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/blk_queue_update_readahead__no_present.cocci -@@ -1,8 +1,10 @@ - @@ --expression e; --struct request_queue *q, b; -+identifier q, b; - @@ --blk_stack_limits(e, &b->limits, 0); -+struct request_queue *q; -+... -+struct request_queue *b; -+<... - - blk_queue_update_readahead(q); - + if (q->backing_dev_info->ra_pages != - + b->backing_dev_info->ra_pages) { -@@ -12,3 +14,4 @@ blk_stack_limits(e, &b->limits, 0); - + q->backing_dev_info->ra_pages = - + b->backing_dev_info->ra_pages; - + } -+...> -\ No newline at end of file --- -2.35.3 - diff --git a/0020-compat-test-and-patch-for-que_limits-max_hw_discard_.patch b/0020-compat-test-and-patch-for-que_limits-max_hw_discard_.patch deleted file mode 100644 index e6237b4..0000000 --- a/0020-compat-test-and-patch-for-que_limits-max_hw_discard_.patch +++ /dev/null @@ -1,57 +0,0 @@ -From f2a779276e7b0918c8592da8254a044c291f1778 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 29 Aug 2024 16:15:27 +0200 -Subject: [PATCH 20/32] compat: test and patch for - que_limits->max_hw_discard_sectors - ---- - .../queue_limits__no_has_max_hw_discard_sectors.cocci | 5 +++++ - drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++ - .../tests/queue_limits_has_max_hw_discard_sectors.c | 8 ++++++++ - 3 files changed, 16 insertions(+) - create mode 100644 drbd/drbd-kernel-compat/cocci/queue_limits__no_has_max_hw_discard_sectors.cocci - create mode 100644 drbd/drbd-kernel-compat/tests/queue_limits_has_max_hw_discard_sectors.c - -diff --git a/drbd/drbd-kernel-compat/cocci/queue_limits__no_has_max_hw_discard_sectors.cocci b/drbd/drbd-kernel-compat/cocci/queue_limits__no_has_max_hw_discard_sectors.cocci -new file mode 100644 -index 000000000000..bf96b80a003d ---- /dev/null -+++ b/drbd/drbd-kernel-compat/cocci/queue_limits__no_has_max_hw_discard_sectors.cocci -@@ -0,0 +1,5 @@ -+@@ -+struct queue_limits lim; -+@@ -+- lim.max_hw_discard_sectors -++ lim.max_discard_sectors -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index 6f62ea5827b7..5abc32725daf 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -296,6 +296,9 @@ int main(int argc, char **argv) - patch(1, "write_zeroes", true, false, - COMPAT_HAVE_REQ_OP_WRITE_ZEROES, "capable"); - -+ patch(1, "queue_limits", true, false, -+ COMPAT_QUEUE_LIMITS_HAS_MAX_HW_DISCARD_SECTORS, "has_max_hw_discard_sectors"); -+ - patch(1, "bio_bi_opf", true, false, - COMPAT_HAVE_BIO_BI_OPF, "present"); - -diff --git a/drbd/drbd-kernel-compat/tests/queue_limits_has_max_hw_discard_sectors.c b/drbd/drbd-kernel-compat/tests/queue_limits_has_max_hw_discard_sectors.c -new file mode 100644 -index 000000000000..5dcf9c48667b ---- /dev/null -+++ b/drbd/drbd-kernel-compat/tests/queue_limits_has_max_hw_discard_sectors.c -@@ -0,0 +1,8 @@ -+/* { "version": "v6.9-rc1", "commit": "4f563a64732dabb2677c7d1232a8f714a18b41b3", "comment": "lim.max_hw_discard_sectors was added", "author": "Christoph Hellwig ", "date": "Tue Feb 13 08:34:16 2024 +0100" } */ -+ -+#include -+ -+int foo(struct queue_limits *lim) -+{ -+ return lim->max_hw_discard_sectors; -+} --- -2.35.3 - diff --git a/0021-compat-fixup-write_zeroes__no_capable.patch b/0021-compat-fixup-write_zeroes__no_capable.patch deleted file mode 100644 index 0d0a4f9..0000000 --- a/0021-compat-fixup-write_zeroes__no_capable.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 4578726d3b0e5b7c699659c1ecd26194060e7be7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 29 Aug 2024 16:15:47 +0200 -Subject: [PATCH 21/32] compat: fixup write_zeroes__no_capable - -We now access the field directly instead of using this helper ---- - drbd/drbd-kernel-compat/cocci/write_zeroes__no_capable.cocci | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drbd/drbd-kernel-compat/cocci/write_zeroes__no_capable.cocci b/drbd/drbd-kernel-compat/cocci/write_zeroes__no_capable.cocci -index 4fa6d9e249d7..2b060e2abd16 100644 ---- a/drbd/drbd-kernel-compat/cocci/write_zeroes__no_capable.cocci -+++ b/drbd/drbd-kernel-compat/cocci/write_zeroes__no_capable.cocci -@@ -30,5 +30,6 @@ expression e; - +WARN_ON_ONCE(e); /* WRITE_ZEROES not supported on this kernel */ - - @@ -+struct queue_limits lim; - @@ --- blk_queue_max_write_zeroes_sectors(...); -+- lim.max_write_zeroes_sectors = ...; --- -2.35.3 - diff --git a/0022-compat-fixup-queue_flag_discard__yes_present.patch b/0022-compat-fixup-queue_flag_discard__yes_present.patch deleted file mode 100644 index 4ff3367..0000000 --- a/0022-compat-fixup-queue_flag_discard__yes_present.patch +++ /dev/null @@ -1,77 +0,0 @@ -From ce06250eb289e98bf97940104c92751282704783 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Wed, 4 Sep 2024 19:05:06 +0200 -Subject: [PATCH 22/32] compat: fixup queue_flag_discard__yes_present - -blk_queue_discard_granularity does not exist anymore, just use the field -in queue_limits. -Match directly do drbd_reconsider_queue_parameters instead of trying to -guess the right function. ---- - .../queue_flag_discard__yes_present.cocci | 30 ++++++------------- - 1 file changed, 9 insertions(+), 21 deletions(-) - -diff --git a/drbd/drbd-kernel-compat/cocci/queue_flag_discard__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/queue_flag_discard__yes_present.cocci -index cc28c3d02d82..e0ecc697b10a 100644 ---- a/drbd/drbd-kernel-compat/cocci/queue_flag_discard__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/queue_flag_discard__yes_present.cocci -@@ -1,27 +1,19 @@ - @@ --struct request_queue *q; --@@ --( --q->limits.max_discard_sectors = 0; --+ blk_queue_flag_clear(QUEUE_FLAG_DISCARD, q); --| --q->limits.max_discard_sectors = ...; --+ blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); --) -- --@@ --struct request_queue *q; -+struct queue_limits lim; -+identifier q; - @@ -+struct request_queue *q = device->rq_queue; -+... - ( --blk_queue_discard_granularity(q, 0); -+lim.max_hw_discard_sectors = 0; - + blk_queue_flag_clear(QUEUE_FLAG_DISCARD, q); - | --blk_queue_discard_granularity(q, 512); -+lim.max_hw_discard_sectors = ...; - + blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); - ) - - @@ --identifier q, device, fn; -+identifier q, device; - @@ - +static void fixup_discard_if_not_supported(struct request_queue *q) - +{ -@@ -31,18 +23,14 @@ identifier q, device, fn; - + * */ - + if (!blk_queue_discard(q)) { - + blk_queue_max_discard_sectors(q, 0); --+ blk_queue_discard_granularity(q, 0); -++ q->limits.discard_granularity = 0; - + } - +} - --fn (struct drbd_device *device, ...) -+void drbd_reconsider_queue_parameters(struct drbd_device *device, ...) - { - ... - struct request_queue *q = device->rq_queue; - ... --decide_on_discard_support(...); --<+... --blk_stack_limits(...); --...+> - + fixup_discard_if_not_supported(q); - } --- -2.35.3 - diff --git a/0023-drbd-move-flags-to-queue_limits.patch b/0023-drbd-move-flags-to-queue_limits.patch deleted file mode 100644 index 6226093..0000000 --- a/0023-drbd-move-flags-to-queue_limits.patch +++ /dev/null @@ -1,53 +0,0 @@ -From ac4e2f85066d2da306ec0e3fed8db4e945be6f6d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 5 Sep 2024 13:03:07 +0200 -Subject: [PATCH 23/32] drbd: move flags to queue_limits - -Roughly equivalent to the following commits from upstream Linux: - -1122c0c1 block: move cache control settings out of queue->flags -bd4a633b block: move the nonrot flag to queue_limits -1a02f3a7 block: move the stable_writes flag to queue_limits ---- - drbd/drbd_main.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c -index 2792b9896271..407b0a1d1773 100644 ---- a/drbd/drbd_main.c -+++ b/drbd/drbd_main.c -@@ -3886,6 +3886,11 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig - int vnr = adm_ctx->volume; - enum drbd_ret_code err = ERR_NOMEM; - bool locked = false; -+ struct queue_limits lim = { -+ .features = BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA | -+ BLK_FEAT_ROTATIONAL | -+ BLK_FEAT_STABLE_WRITES, -+ }; - - lockdep_assert_held(&resource->conf_update); - -@@ -3948,7 +3953,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig - - init_rwsem(&device->uuid_sem); - -- disk = blk_alloc_disk(NULL, NUMA_NO_NODE); -+ disk = blk_alloc_disk(&lim, NUMA_NO_NODE); - if (IS_ERR(disk)) { - err = PTR_ERR(disk); - goto out_no_disk; -@@ -3967,9 +3972,6 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig - sprintf(disk->disk_name, "drbd%d", minor); - disk->private_data = device; - -- blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, disk->queue); -- blk_queue_write_cache(disk->queue, true, true); -- - device->md_io.page = alloc_page(GFP_KERNEL); - if (!device->md_io.page) - goto out_no_io_page; --- -2.35.3 - diff --git a/0024-compat-test-and-patch-for-queue_limits.features.patch b/0024-compat-test-and-patch-for-queue_limits.features.patch deleted file mode 100644 index f21096a..0000000 --- a/0024-compat-test-and-patch-for-queue_limits.features.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 3c18af1a3e8d67833e3ea8a2d38408501c9ee6be Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Thu, 5 Sep 2024 13:05:59 +0200 -Subject: [PATCH 24/32] compat: test and patch for queue_limits.features - -And fixup compat patches that rely on blk_queue_write_cache being there. -Match to disk->private_data = ... instead. ---- - .../blk_queue_make_request__yes_present.cocci | 3 ++- - .../blk_queue_merge_bvec__yes_present.cocci | 21 +++++++++++----- - .../cocci/congested_fn__yes_present.cocci | 3 ++- - .../queue_limits_features__no_present.cocci | 25 +++++++++++++++++++ - drbd/drbd-kernel-compat/gen_patch_names.c | 15 ++++++----- - .../tests/queue_limits_has_features.c | 8 ++++++ - 6 files changed, 61 insertions(+), 14 deletions(-) - create mode 100644 drbd/drbd-kernel-compat/cocci/queue_limits_features__no_present.cocci - create mode 100644 drbd/drbd-kernel-compat/tests/queue_limits_has_features.c - -diff --git a/drbd/drbd-kernel-compat/cocci/blk_queue_make_request__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/blk_queue_make_request__yes_present.cocci -index 63c65d21cb32..665e10cbaa1a 100644 ---- a/drbd/drbd-kernel-compat/cocci/blk_queue_make_request__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/blk_queue_make_request__yes_present.cocci -@@ -5,12 +5,13 @@ identifier make_request_fn; - + blk_alloc_queue(GFP_KERNEL) - - @@ -+struct gendisk *disk; - identifier rm_blk_alloc_queue.make_request_fn; - @@ - drbd_create_device(...) - { - ... -+ disk->private_data = ...; - + blk_queue_make_request(q, make_request_fn); -- blk_queue_write_cache(...); - ... - } -diff --git a/drbd/drbd-kernel-compat/cocci/blk_queue_merge_bvec__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/blk_queue_merge_bvec__yes_present.cocci -index d4c0d85810e8..bedb09f8b375 100644 ---- a/drbd/drbd-kernel-compat/cocci/blk_queue_merge_bvec__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/blk_queue_merge_bvec__yes_present.cocci -@@ -1,10 +1,10 @@ --@@ -+@ add_drbd_merge_bvec_definition @ - identifier ws; - @@ - +extern int drbd_merge_bvec(struct request_queue *, struct bvec_merge_data *, struct bio_vec *); - extern void do_submit(struct work_struct *ws); - --@@ -+@ add_drbd_merge_bvec @ - @@ - +/* This is called by bio_add_page(). - + * -@@ -44,9 +44,10 @@ extern void do_submit(struct work_struct *ws); - do_submit(...) - { ... } - --@@ -+@ add_blk_queue_merge_bvec @ - symbol true; - identifier q, resource, dev; -+struct gendisk *disk; - @@ - drbd_create_device(...) - { -@@ -68,9 +69,17 @@ struct request_queue *q; - // also want to store it in queuedata for the compat. - dev->rq_queue = q; - + q->queuedata = dev; --<... --blk_queue_write_cache(q, true, true); -+... -+disk->private_data = ...; - + blk_queue_merge_bvec(q, drbd_merge_bvec); --...> -+... - } - -+@ script:python depends on !(add_drbd_merge_bvec_definition && add_drbd_merge_bvec && add_blk_queue_merge_bvec) @ -+@@ -+import sys -+print('ERROR: A rule making an essential change was not executed! (blk_queue_merge_bvec)', file=sys.stderr) -+print('ERROR: This would not show up as a compiler error, but would still break DRBD.', file=sys.stderr) -+print('ERROR: As a precaution, the build will be aborted here.', file=sys.stderr) -+sys.exit(1) -+ -diff --git a/drbd/drbd-kernel-compat/cocci/congested_fn__yes_present.cocci b/drbd/drbd-kernel-compat/cocci/congested_fn__yes_present.cocci -index d0b55c3dffbf..a697311af6bd 100644 ---- a/drbd/drbd-kernel-compat/cocci/congested_fn__yes_present.cocci -+++ b/drbd/drbd-kernel-compat/cocci/congested_fn__yes_present.cocci -@@ -63,14 +63,15 @@ drbd_cleanup(...) - - @@ - identifier dev; -+struct gendisk *disk; - @@ - drbd_create_device(...) - { - ... - struct drbd_device *dev; - ... -+ disk->private_data = ...; - + q->backing_dev_info->congested_fn = drbd_congested; - + q->backing_dev_info->congested_data = dev; -- blk_queue_write_cache(...); - ... - } -diff --git a/drbd/drbd-kernel-compat/cocci/queue_limits_features__no_present.cocci b/drbd/drbd-kernel-compat/cocci/queue_limits_features__no_present.cocci -new file mode 100644 -index 000000000000..b9017351302b ---- /dev/null -+++ b/drbd/drbd-kernel-compat/cocci/queue_limits_features__no_present.cocci -@@ -0,0 +1,25 @@ -+// NOTE this actually encompasses three patches: -+// 1122c0c1 block: move cache control settings out of queue->flags -+// bd4a633b block: move the nonrot flag to queue_limits -+// 1a02f3a7 block: move the stable_writes flag to queue_limits -+// -+// They add "BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA", "BLK_FEAT_ROTATIONAL", and -+// "BLK_FEAT_STABLE_WRITES", respectively. -+// Since these commits are all from the same series, just patch them together. -+@@ -+expression e; -+struct gendisk *disk; -+identifier lim; -+@@ -+-struct queue_limits lim = { -+- .features = e, -+-}; -+... -+blk_alloc_disk( -+- &lim -++ NULL -+ , ...) -+... -+disk->private_data = ...; -++ blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, disk->queue); -++ blk_queue_write_cache(disk->queue, true, true); -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index 5abc32725daf..cc3bad2d84e4 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -153,6 +153,9 @@ int main(int argc, char **argv) - patch(1, "blk_cleanup_disk", false, true, - COMPAT_HAVE_BLK_CLEANUP_DISK, "present"); - -+ patch(1, "queue_limits_features", true, false, -+ COMPAT_QUEUE_LIMITS_HAS_FEATURES, "present"); -+ - patch(1, "blk_alloc_disk", true, false, - COMPAT_BLK_ALLOC_DISK_TAKES_QUEUE_LIMITS, "takes_queue_limits"); - #if !defined(COMPAT_BLK_ALLOC_DISK_TAKES_QUEUE_LIMITS) -@@ -267,13 +270,13 @@ int main(int argc, char **argv) - patch(1, "security_netlink_recv", false, true, - COMPAT_HAVE_SECURITY_NETLINK_RECV, "present"); - --#if defined(COMPAT_HAVE_QUEUE_FLAG_STABLE_WRITES) -- /* in versions >=5.9, there is QUEUE_FLAG_STABLE_WRITES */ --#else -- /* for <5.9 but >=3.9, fall back to BDI_CAP_STABLE_WRITES */ -+ /* -+ * >= 6.10: BLK_FEAT_STABLE_WRITES -+ * 5.9-6.10: QUEUE_FLAG_STABLE_WRITES -+ * <5.9: BDI_CAP_STABLE_WRITES -+ */ - patch(1, "queue_flag_stable_writes", true, false, -- NO, "present"); --#endif -+ COMPAT_HAVE_QUEUE_FLAG_STABLE_WRITES, "present"); - - patch(1, "queue_flag_discard", false, true, - COMPAT_HAVE_QUEUE_FLAG_DISCARD, "present"); -diff --git a/drbd/drbd-kernel-compat/tests/queue_limits_has_features.c b/drbd/drbd-kernel-compat/tests/queue_limits_has_features.c -new file mode 100644 -index 000000000000..e566a34bdda6 ---- /dev/null -+++ b/drbd/drbd-kernel-compat/tests/queue_limits_has_features.c -@@ -0,0 +1,8 @@ -+/* { "version": "v6.10", "commit": "1122c0c1cc71f740fa4d5f14f239194e06a1d5e7", "comment": "features field was introduced", "author": "Christoph Hellwig ", "date": "Mon Jun 17 08:04:40 2024 +0200" } */ -+ -+#include -+ -+unsigned int foo(struct queue_limits lim) -+{ -+ return lim.features; -+} --- -2.35.3 - diff --git a/0025-drbd-Annotate-struct-fifo_buffer-with-__counted_by.patch b/0025-drbd-Annotate-struct-fifo_buffer-with-__counted_by.patch deleted file mode 100644 index be79746..0000000 --- a/0025-drbd-Annotate-struct-fifo_buffer-with-__counted_by.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 85afbf893a6c7cd55e04407731e52d495b6f228f Mon Sep 17 00:00:00 2001 -From: Kees Cook -Date: Fri, 15 Sep 2023 13:03:16 -0700 -Subject: [PATCH 25/32] drbd: Annotate struct fifo_buffer with __counted_by -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Prepare for the coming implementation by GCC and Clang of the __counted_by -attribute. Flexible array members annotated with __counted_by can have -their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS -(for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family -functions). - -As found with Coccinelle[1], add __counted_by for struct fifo_buffer. - -[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci - -Cc: Philipp Reisner -Cc: Lars Ellenberg -Cc: Christoph Böhmwalder -Cc: Jens Axboe -Cc: drbd-dev@lists.linbit.com -Cc: linux-block@vger.kernel.org -Reviewed-by: "Gustavo A. R. Silva" -Link: https://lore.kernel.org/r/20230915200316.never.707-kees@kernel.org -Signed-off-by: Kees Cook ---- - drbd/drbd_int.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drbd/drbd_int.h b/drbd/drbd_int.h -index c18407899f59..182593257c6a 100644 ---- a/drbd/drbd_int.h -+++ b/drbd/drbd_int.h -@@ -746,7 +746,7 @@ struct fifo_buffer { - unsigned int head_index; - unsigned int size; - int total; /* sum of all values */ -- int values[]; -+ int values[] __counted_by(size); - }; - extern struct fifo_buffer *fifo_alloc(unsigned int fifo_size); - --- -2.35.3 - diff --git a/0026-compat-test-and-patch-for-__counted_by.patch b/0026-compat-test-and-patch-for-__counted_by.patch deleted file mode 100644 index 797e68c..0000000 --- a/0026-compat-test-and-patch-for-__counted_by.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 3a1d6d3e2bd0e1506995e316b183cef8abc0034b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Fri, 6 Sep 2024 11:14:43 +0200 -Subject: [PATCH 26/32] compat: test and patch for __counted_by - -Unfortunately, the "attribute name" variable type only works with very -recent coccinelle versions (>=1.1.1). So add a hint about that in the -README. ---- - README.md | 9 ++++----- - .../cocci/counted_by__no_present.cocci | 12 ++++++++++++ - drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++ - drbd/drbd-kernel-compat/tests/have_counted_by.c | 8 ++++++++ - 4 files changed, 27 insertions(+), 5 deletions(-) - create mode 100644 drbd/drbd-kernel-compat/cocci/counted_by__no_present.cocci - create mode 100644 drbd/drbd-kernel-compat/tests/have_counted_by.c - -diff --git a/README.md b/README.md -index ec513d19438e..b63286db0113 100644 ---- a/README.md -+++ b/README.md -@@ -38,7 +38,7 @@ Since version 9.0.20, DRBD has been using a kernel backwards compatibility syste - based on [Coccinelle](https://github.com/coccinelle/coccinelle) semantic patches. - While this has many advantages, it also makes it a little harder for "casual" - developers to build DRBD from the git sources. The problem is that we require a --very recent version of `spatch` (at least 1.0.8 at time of writing), and most -+very recent version of `spatch` (at least 1.1.1 at time of writing), and most - distributions only have relatively old versions in their repositories. - - ## From git -@@ -48,10 +48,9 @@ For users wishing to build DRBD from its git sources, here are a few options: - chances are you won't even have to use any of the compat features, which - means you won't require compatibility patches and in turn don't need spatch - installed. --2. On Ubuntu 18.04 and newer, use a recent spatch version from the -- [Coccinelle PPA](https://launchpad.net/~npalix/+archive/ubuntu/coccinelle). -- This provides (at time of writing) version 1.0.8, which is recent enough to -- build DRBD. -+2. Fedora >=39 packages Coccinelle 1.1.1, which is recent enough to build DRBD. **Warning**: while -+ Ubuntu also ships Coccinelle with supposedly the same version number (1.1.1), this version -+ is *not* able to build DRBD. - 3. Build and install spatch from source. This will also give you a version that - is recent enough to build DRBD. - -diff --git a/drbd/drbd-kernel-compat/cocci/counted_by__no_present.cocci b/drbd/drbd-kernel-compat/cocci/counted_by__no_present.cocci -new file mode 100644 -index 000000000000..40db31bece0c ---- /dev/null -+++ b/drbd/drbd-kernel-compat/cocci/counted_by__no_present.cocci -@@ -0,0 +1,12 @@ -+@@ -+type T; -+identifier s, x; -+attribute name __counted_by; -+@@ -+struct s { -+... -+ T x -+- __counted_by(...) -+ ; -+... -+}; -diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c -index cc3bad2d84e4..72c1e25512ea 100644 ---- a/drbd/drbd-kernel-compat/gen_patch_names.c -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c -@@ -605,6 +605,9 @@ int main(int argc, char **argv) - patch(1, "need_recalc_sigpending", false, true, - COMPAT_NEED_RECALC_SIGPENDING, "need"); - -+ patch(1, "counted_by", true, false, -+ COMPAT_HAVE_COUNTED_BY, "present"); -+ - /* #define BLKDEV_ISSUE_ZEROOUT_EXPORTED */ - /* #define BLKDEV_ZERO_NOUNMAP */ - -diff --git a/drbd/drbd-kernel-compat/tests/have_counted_by.c b/drbd/drbd-kernel-compat/tests/have_counted_by.c -new file mode 100644 -index 000000000000..07fac32aad16 ---- /dev/null -+++ b/drbd/drbd-kernel-compat/tests/have_counted_by.c -@@ -0,0 +1,8 @@ -+/* { "version": "v6.4", "commit": "dd06e72e68bcb4070ef211be100d2896e236c8fb", "comment": "add __counted_by macro", "author": "Kees Cook ", "date": "Wed May 17 12:08:44 2023 -0700" } */ -+ -+#include -+ -+struct foo { -+ int a; -+ int b[] __counted_by(a); -+}; --- -2.35.3 - diff --git a/0027-drbd-fix-function-cast-warnings-in-state-machine.patch b/0027-drbd-fix-function-cast-warnings-in-state-machine.patch deleted file mode 100644 index 36a9c2f..0000000 --- a/0027-drbd-fix-function-cast-warnings-in-state-machine.patch +++ /dev/null @@ -1,100 +0,0 @@ -From fa5329fb2c7e089cbe712acecb2c75ba8887754e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= - -Date: Fri, 6 Sep 2024 15:16:49 +0200 -Subject: [PATCH 27/32] drbd: fix function cast warnings in state machine - -Equivalent to upstream commit fe0b1e9a ("drbd: fix function cast -warnings in state machine"). ---- - drbd/drbd_state.c | 16 ++++++++++------ - drbd/drbd_state_change.h | 8 ++++---- - 2 files changed, 14 insertions(+), 10 deletions(-) - -diff --git a/drbd/drbd_state.c b/drbd/drbd_state.c -index 44f55ee5c939..100e32ba037f 100644 ---- a/drbd/drbd_state.c -+++ b/drbd/drbd_state.c -@@ -3212,10 +3212,11 @@ static union drbd_state state_change_word(struct drbd_state_change *state_change - - int notify_resource_state_change(struct sk_buff *skb, - unsigned int seq, -- struct drbd_state_change *state_change, -+ void *state_change, - enum drbd_notification_type type) - { -- struct drbd_resource_state_change *resource_state_change = state_change->resource; -+ struct drbd_resource_state_change *resource_state_change = -+ ((struct drbd_state_change *)state_change)->resource; - struct drbd_resource *resource = resource_state_change->resource; - struct resource_info resource_info = { - .res_role = resource_state_change->role[NEW], -@@ -3232,9 +3233,10 @@ int notify_resource_state_change(struct sk_buff *skb, - - int notify_connection_state_change(struct sk_buff *skb, - unsigned int seq, -- struct drbd_connection_state_change *connection_state_change, -+ void *state_change, - enum drbd_notification_type type) - { -+ struct drbd_connection_state_change *connection_state_change = state_change; - struct drbd_connection *connection = connection_state_change->connection; - struct connection_info connection_info = { - .conn_connection_state = connection_state_change->cstate[NEW], -@@ -3246,9 +3248,10 @@ int notify_connection_state_change(struct sk_buff *skb, - - int notify_device_state_change(struct sk_buff *skb, - unsigned int seq, -- struct drbd_device_state_change *device_state_change, -+ void *state_change, - enum drbd_notification_type type) - { -+ struct drbd_device_state_change *device_state_change = state_change; - struct drbd_device *device = device_state_change->device; - struct device_info device_info; - device_state_change_to_info(&device_info, device_state_change); -@@ -3258,10 +3261,11 @@ int notify_device_state_change(struct sk_buff *skb, - - int notify_peer_device_state_change(struct sk_buff *skb, - unsigned int seq, -- struct drbd_peer_device_state_change *state_change, -+ void *state_change, - enum drbd_notification_type type) - { -- struct drbd_peer_device *peer_device = state_change->peer_device; -+ struct drbd_peer_device_state_change *peer_device_state_change = state_change; -+ struct drbd_peer_device *peer_device = peer_device_state_change->peer_device; - struct peer_device_info peer_device_info; - peer_device_state_change_to_info(&peer_device_info, state_change); - -diff --git a/drbd/drbd_state_change.h b/drbd/drbd_state_change.h -index 3dc8616dedd4..40687d40b222 100644 ---- a/drbd/drbd_state_change.h -+++ b/drbd/drbd_state_change.h -@@ -69,19 +69,19 @@ extern void forget_state_change(struct drbd_state_change *); - - extern int notify_resource_state_change(struct sk_buff *, - unsigned int, -- struct drbd_state_change *, -+ void *, - enum drbd_notification_type type); - extern int notify_connection_state_change(struct sk_buff *, - unsigned int, -- struct drbd_connection_state_change *, -+ void *, - enum drbd_notification_type type); - extern int notify_device_state_change(struct sk_buff *, - unsigned int, -- struct drbd_device_state_change *, -+ void *, - enum drbd_notification_type type); - extern int notify_peer_device_state_change(struct sk_buff *, - unsigned int, -- struct drbd_peer_device_state_change *, -+ void *, - enum drbd_notification_type type); - - #endif /* DRBD_STATE_CHANGE_H */ --- -2.35.3 - diff --git a/0028-Add-missing-documentation-of-peer_device-parameter-t.patch b/0028-Add-missing-documentation-of-peer_device-parameter-t.patch deleted file mode 100644 index 33b5c5f..0000000 --- a/0028-Add-missing-documentation-of-peer_device-parameter-t.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 11e96ecc0575eb0d6d4e29caaffb70d1e299908d Mon Sep 17 00:00:00 2001 -From: Simon Horman -Date: Tue, 23 Jul 2024 10:41:52 +0100 -Subject: [PATCH 28/32] Add missing documentation of peer_device parameter to - Kernel doc. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -These parameters were added in commit 8164dd6c8ae1 ("drbd: Add peer -device parameter to whole-bitmap I/O handlers") - -Flagged by W=1 builds. - -Signed-off-by: Simon Horman -Link: https://lore.kernel.org/r/20240723-drbd-doc-v1-1-a04d9b7a9688@kernel.org -Signed-off-by: Jens Axboe -Signed-off-by: Christoph Böhmwalder ---- - drbd/drbd_main.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c -index 407b0a1d1773..a216b725e66c 100644 ---- a/drbd/drbd_main.c -+++ b/drbd/drbd_main.c -@@ -5356,6 +5356,7 @@ int drbd_bmio_set_all_n_write(struct drbd_device *device, - /** - * drbd_bmio_set_n_write() - io_fn for drbd_queue_bitmap_io() or drbd_bitmap_io() - * @device: DRBD device. -+ * @peer_device: Peer DRBD device. - * - * Sets all bits in the bitmap towards one peer and writes the whole bitmap to stable storage. - */ -@@ -5408,6 +5409,7 @@ int drbd_bmio_set_allocated_n_write(struct drbd_device *device, - /** - * drbd_bmio_clear_all_n_write() - io_fn for drbd_queue_bitmap_io() or drbd_bitmap_io() - * @device: DRBD device. -+ * @peer_device: Peer DRBD device. - * - * Clears all bits in the bitmap and writes the whole bitmap to stable storage. - */ -@@ -5474,6 +5476,7 @@ void drbd_queue_pending_bitmap_work(struct drbd_device *device) - * @io_fn: IO callback to be called when bitmap IO is possible - * @done: callback to be called after the bitmap IO was performed - * @why: Descriptive text of the reason for doing the IO -+ * @peer_device: Peer DRBD device. - * - * While IO on the bitmap happens we freeze application IO thus we ensure - * that drbd_set_out_of_sync() can not be called. This function MAY ONLY be -@@ -5549,6 +5552,7 @@ void drbd_queue_bitmap_io(struct drbd_device *device, - * @device: DRBD device. - * @io_fn: IO callback to be called when bitmap IO is possible - * @why: Descriptive text of the reason for doing the IO -+ * @peer_device: Peer DRBD device. - * - * freezes application IO while that the actual IO operations runs. This - * functions MAY NOT be called from sender context. --- -2.35.3 - diff --git a/0030-drbd-kref_put-path-when-kernel_accept-fails.patch b/0030-drbd-kref_put-path-when-kernel_accept-fails.patch deleted file mode 100644 index 58c2be7..0000000 --- a/0030-drbd-kref_put-path-when-kernel_accept-fails.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 9fe2be655a793d2f9425b96e53a7e1e7feec067e Mon Sep 17 00:00:00 2001 -From: Joel Colledge -Date: Wed, 18 Sep 2024 15:08:55 +0200 -Subject: [PATCH 30/32] drbd: kref_put() path when kernel_accept() fails - -We need to put the reference that dtt_wait_connect_cond() gets. - -This is an unusual situation. The function dtt_wait_connect_cond() only -returns a path when pending_accepts is positive or there is a socket in -the path->sockets list. So if the code reaches the kernel_accept() call, -we expect it to succeed. However, it has been observed to fail, so we -need to handle that case cleanly. - -Without the kref_put(), it is impossible to rmmod drbd. - -For any error other than -EAGAIN, the error is be passed up and is -logged by conn_connect(). However, when -EAGAIN is returned, -dtt_connect() continues trying to connect and the error from -kernel_accept() leaves no traces in the logs. ---- - drbd/drbd_transport_tcp.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drbd/drbd_transport_tcp.c b/drbd/drbd_transport_tcp.c -index df144fcb4522..d59f68d83c58 100644 ---- a/drbd/drbd_transport_tcp.c -+++ b/drbd/drbd_transport_tcp.c -@@ -625,8 +625,10 @@ retry: - - s_estab = NULL; - err = kernel_accept(listener->s_listen, &s_estab, O_NONBLOCK); -- if (err < 0) -+ if (err < 0) { -+ kref_put(&path->path.kref, drbd_destroy_path); - return err; -+ } - - /* The established socket inherits the sk_state_change callback - from the listening socket. */ --- -2.35.3 - diff --git a/0031-build-fix-typo-in-Makefile.spatch.patch b/0031-build-fix-typo-in-Makefile.spatch.patch deleted file mode 100644 index 52436dd..0000000 --- a/0031-build-fix-typo-in-Makefile.spatch.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 903779df9a65ac04814afb1530423914bdfe305c Mon Sep 17 00:00:00 2001 -From: Lars Ellenberg -Date: Sun, 6 Oct 2024 01:14:19 +0200 -Subject: [PATCH 31/32] build: fix typo in Makefile.spatch - -The variable name should be cached_compat_h, compat_h does not exist. -Noticed when built with `make -j`: -Because of the empty prerequisites, sometimes make would try to build -kernelrelease.txt before the directory was created. ---- - drbd/Makefile.spatch | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drbd/Makefile.spatch b/drbd/Makefile.spatch -index bbcf10dc0603..a5cc774c18b5 100644 ---- a/drbd/Makefile.spatch -+++ b/drbd/Makefile.spatch -@@ -42,7 +42,7 @@ cached_compat_patch := $(cache_dir)/compat.patch - - # Remember which kernel releases this supposedly works for. - # If KERNELRELEASE is not known, will add an empty line (at most once). --$(cache_dir)/kernelrelease.txt: $(compat_h) FORCE -+$(cache_dir)/kernelrelease.txt: $(cached_compat_h) FORCE - $(Q)set -e; \ - grep -sqxFe "$(KERNELRELEASE)" $@ < /dev/null || \ - echo $(KERNELRELEASE) >> $@; --- -2.35.3 - diff --git a/0032-drbd-open-do-not-delay-open-if-already-Primary.patch b/0032-drbd-open-do-not-delay-open-if-already-Primary.patch deleted file mode 100644 index 90900e9..0000000 --- a/0032-drbd-open-do-not-delay-open-if-already-Primary.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 13ada1be201eb14ff8295a17194de8db5cdccd7f Mon Sep 17 00:00:00 2001 -From: Lars Ellenberg -Date: Wed, 2 Oct 2024 14:34:02 +0200 -Subject: [PATCH 32/32] drbd: open: do not delay open() if already Primary - -Since 48376549f (drbd: When a remote state change is active to not touch the open_counts, 2017-10-30) -if a remote state change is pending when someone tries to open() a DRBD volume, -we wait, interruptible, for "auto-promote-timeout", -until that state change is finalized (committed or aborted), -or give up with EAGAIN if the auto-promote timeout is reached. - -auto-promote-timeout by default is much smaller than twopc-timeout, -so we may get spurious open() failures. - -This could be mitigated with auto-promote-timeout > twopc-timeout. - -But we can just ignore the pending state change, -if changing the open_cnt won't make a difference: -if we are already Primary, or we already have openers anyways. - -If -- we have some remote state change pending, -- and we are not Primary already, -- and we do not have any openers, or this is an open with write intent, -we reject NDELAY openers immediately. -Normal openers wait for the state change to be finalized -(or give up after auto-promote-timeout). - -We do not need to wait if: -- there is no remote state change pending, -- or we are already Primary anyways, -- or we are Secondary, this is a read-only open, and we have openers already. - -Note: we may still want to immediately reject NDELAY open if -there is a remote state change pending, even if we have an -open count != 0. These are typically short lived openers -triggered via udev. If they overlap (new open comes in -before previous close), these may still accumulate enough -time to mess with state changes. -For now, I decide to allow them. ---- - drbd/drbd_main.c | 22 ++++++++++++++++++++-- - 1 file changed, 20 insertions(+), 2 deletions(-) - -diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c -index a216b725e66c..258be3b9c10d 100644 ---- a/drbd/drbd_main.c -+++ b/drbd/drbd_main.c -@@ -2583,10 +2583,21 @@ enum ioc_rv { - IOC_ABORT = 2, - }; - -+/* If we are in the middle of a cluster wide state change, we don't want -+ * to change (open_cnt == 0), as that then could cause a failure to commit -+ * some already promised peer auto-promote locally. -+ * So we wait until the pending remote_state_change is finalized, -+ * or give up when the timeout is reached. -+ * -+ * But we don't want to fail an open on a Primary just because it happens -+ * during some unrelated remote state change. -+ * If we are already Primary, or already have an open count != 0, -+ * we don't need to wait, it won't change anything. -+ */ - static enum ioc_rv inc_open_count(struct drbd_device *device, blk_mode_t mode) - { - struct drbd_resource *resource = device->resource; -- enum ioc_rv r = mode & BLK_OPEN_NDELAY ? IOC_ABORT : IOC_SLEEP; -+ enum ioc_rv r; - - if (test_bit(DOWN_IN_PROGRESS, &resource->flags)) - return IOC_ABORT; -@@ -2594,7 +2605,14 @@ static enum ioc_rv inc_open_count(struct drbd_device *device, blk_mode_t mode) - read_lock_irq(&resource->state_rwlock); - if (test_bit(UNREGISTERED, &device->flags)) - r = IOC_ABORT; -- else if (!resource->remote_state_change) { -+ else if (resource->remote_state_change && -+ resource->role[NOW] != R_PRIMARY && -+ (device->open_cnt == 0 || mode & BLK_OPEN_WRITE)) { -+ if (mode & BLK_OPEN_NDELAY) -+ r = IOC_ABORT; -+ else -+ r = IOC_SLEEP; -+ } else { - r = IOC_OK; - device->open_cnt++; - if (mode & BLK_OPEN_WRITE) --- -2.35.3 - diff --git a/boo1231290_fix_drbd_build_error_against_kernel_v6.11.0.patch b/boo1231290_fix_drbd_build_error_against_kernel_v6.11.0.patch deleted file mode 100644 index b81763b..0000000 --- a/boo1231290_fix_drbd_build_error_against_kernel_v6.11.0.patch +++ /dev/null @@ -1,92 +0,0 @@ -Oct 11, 2024. by heming.zhao@suse.com - -This patch includes the following 4 changes for passing the build on v6.11.0. - -------------- -for 'queue_flag_stable_writes__no_present', modifying -drbd-kernel-compat/cocci/queue_flag_stable_writes__no_present.cocci - -upstream kernel: -commit 1a02f3a73f8c670eddeb44bf52a75ae7f67cfc11 -Author: Christoph Hellwig -Date: Mon Jun 17 08:04:44 2024 +0200 - - block: move the stable_writes flag to queue_limits - -------------- -for 'disk_update_readahead__no_present', modifying -drbd-kernel-compat/cocci/disk_update_readahead__no_present.cocci - -upstream kernel: -commit 73781b3b81e76583708a652c853d54d03dce031d -Author: Christoph Hellwig -Date: Wed Jun 26 16:26:27 2024 +0200 - - block: remove disk_update_readahead - --------------- -for 'blk_queue_update_readahead__no_present', modifying -'drbd-kernel-compat/gen_patch_names.c', which bypasses the -testing of COMPAT_HAVE_BLK_QUEUE_UPDATE_READAHEAD. - ---------------- -for 'blk_queue_write_cache__no_present__yes_flush', modifying -drbd-kernel-compat/tests/have_blk_queue_write_cache.c - -upstream kernel: -commit 62e35f942231e372f8e465d8484de66a60221226 -Author: Christoph Hellwig -Date: Thu Jun 27 13:14:03 2024 +0200 - - block: pass a gendisk to the queue_sysfs_entry methods - ---------------- - -diff -Nupr a/drbd/drbd-kernel-compat/cocci/disk_update_readahead__no_present.cocci b/drbd/drbd-kernel-compat/cocci/disk_update_readahead__no_present.cocci ---- a/drbd/drbd-kernel-compat/cocci/disk_update_readahead__no_present.cocci 2024-10-11 09:23:43.340688884 +0800 -+++ b/drbd/drbd-kernel-compat/cocci/disk_update_readahead__no_present.cocci 2024-10-11 09:27:53.755206413 +0800 -@@ -6,5 +6,5 @@ type T; - T q = dev->rq_queue; - <... - - disk_update_readahead(dev->vdisk); --+ blk_queue_update_readahead(q); -++ blk_apply_bdi_limits(dev->vdisk->bdi, &dev->vdisk->queue->limits); - ...> -diff -Nupr a/drbd/drbd-kernel-compat/cocci/queue_flag_stable_writes__no_present.cocci b/drbd/drbd-kernel-compat/cocci/queue_flag_stable_writes__no_present.cocci ---- a/drbd/drbd-kernel-compat/cocci/queue_flag_stable_writes__no_present.cocci 2024-10-11 09:23:25.420604140 +0800 -+++ b/drbd/drbd-kernel-compat/cocci/queue_flag_stable_writes__no_present.cocci 2024-10-11 09:28:33.265393250 +0800 -@@ -2,4 +2,4 @@ - expression q; - @@ - - blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, q); --+ q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; -++ q->limits.features |= BLK_FEAT_STABLE_WRITES; -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 2024-10-11 09:24:54.021023132 +0800 -+++ b/drbd/drbd-kernel-compat/gen_patch_names.c 2024-10-11 09:26:48.508231197 +0800 -@@ -405,6 +405,7 @@ int main(int argc, char **argv) - patch(1, "disk_update_readahead", true, false, - COMPAT_HAVE_DISK_UPDATE_READAHEAD, "present"); - -+#if 0 - #if !defined(COMPAT_HAVE_DISK_UPDATE_READAHEAD) - /* disk_update_readahead is the "new version" of - * blk_queue_update_readahead. we only need to consider compat -@@ -412,6 +413,7 @@ int main(int argc, char **argv) - patch(1, "blk_queue_update_readahead", true, false, - COMPAT_HAVE_BLK_QUEUE_UPDATE_READAHEAD, "present"); - #endif -+#endif - - patch(1, "struct_gendisk", true, false, - COMPAT_STRUCT_GENDISK_HAS_BACKING_DEV_INFO, "has_backing_dev_info"); -diff -Nupr a/drbd/drbd-kernel-compat/tests/have_blk_queue_write_cache.c b/drbd/drbd-kernel-compat/tests/have_blk_queue_write_cache.c ---- a/drbd/drbd-kernel-compat/tests/have_blk_queue_write_cache.c 2024-10-11 09:25:57.557990258 +0800 -+++ b/drbd/drbd-kernel-compat/tests/have_blk_queue_write_cache.c 2024-10-11 09:27:17.571701979 +0800 -@@ -2,5 +2,5 @@ - - void dummy(struct request_queue *q, bool enabled, bool fua) - { -- blk_queue_write_cache(q, enabled, fua); -+ blk_queue_write_cache(q); - } diff --git a/boo1233222_fix_drbd_build_error_against_kernel_v6.11.6.patch b/boo1233222_fix_drbd_build_error_against_kernel_v6.11.6.patch deleted file mode 100644 index 5b01bb7..0000000 --- a/boo1233222_fix_drbd_build_error_against_kernel_v6.11.6.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 80673af5c0cebaeedc1260248466cfd8b268aa0c Mon Sep 17 00:00:00 2001 -From: Su Yue -Date: Tue, 12 Nov 2024 10:14:17 +0800 -Subject: [PATCH] boo1233222_fix_drbd_build_error_against_kernel_v6.11.6 - -This patch fixes build error due to kernel ABI change introduced -in v6.11.6 by - -commit 56440d7ec28d60f8da3bfa09062b3368ff9b16db -Author: Eric Dumazet -Date: Fri Oct 11 17:12:17 2024 +0000 - - genetlink: hold RCU in genlmsg_mcast() - -After the commit, genlmsg_multicast_allns is called without parameter flags. - -Signed-off-by: Su Yue ---- - .../genl_magic_func-genl_register_family_with_ops_groups.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drbd/drbd-headers/linux/genl_magic_func-genl_register_family_with_ops_groups.h b/drbd/drbd-headers/linux/genl_magic_func-genl_register_family_with_ops_groups.h -index b7adc480247e..733cbc788f7f 100644 ---- a/drbd/drbd-headers/linux/genl_magic_func-genl_register_family_with_ops_groups.h -+++ b/drbd/drbd-headers/linux/genl_magic_func-genl_register_family_with_ops_groups.h -@@ -19,7 +19,7 @@ static int CONCAT_(GENL_MAGIC_FAMILY, _genl_multicast_ ## group)( \ - unsigned int group_id = \ - CONCAT_(GENL_MAGIC_FAMILY, _group_ ## group); \ - return genlmsg_multicast_allns(&ZZZ_genl_family, skb, 0, \ -- group_id, flags); \ -+ group_id); \ - } - - #include GENL_MAGIC_INCLUDE_FILE --- -2.47.0 - diff --git a/drbd-9.1.22.tar.gz b/drbd-9.1.22.tar.gz deleted file mode 100644 index a0607da..0000000 --- a/drbd-9.1.22.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a0af3560d6d133f8062d4284dd6a2be8614388bbacd140a0978232fd163c533 -size 1427992 diff --git a/drbd-9.1.23.tar.gz b/drbd-9.1.23.tar.gz new file mode 100644 index 0000000..01c58e4 --- /dev/null +++ b/drbd-9.1.23.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27273c96d68d6399bdc0f9a21581c4ebe67fb387206e55f8727d05595baf1cae +size 1481356 diff --git a/drbd.changes b/drbd.changes index 757a971..ed0fb9a 100644 --- a/drbd.changes +++ b/drbd.changes @@ -1,3 +1,69 @@ +------------------------------------------------------------------- +Fri Dec 11 02:35:00 UTC 2024 - Heming Zhao + +- Update DRBD version from 9.1.22 to 9.1.23 (boo#1234849) + + * Changelog from Linbit: + + 9.1.23 (api:genl2/proto:86-101,118-121/transport:18) + -------- + * Fix a corner case that can happen when DRBD establishes multiple + connections in parallel, which could lead one connection to end up in + an inconsistent replication state of WFBitMapT/Established + * Fix a corner case in which a reconciliation resync ends up in + WFBitMapT/Established + * Restrict protocol compatibility to the most recent 8.4 and 9.0 releases + * Fix a corner case causing a module ref leak on drbd_transport_tcp; + if it hits, you can not rmmod it + * rate-limit resync progress while resync is paused + * resync-target inherits history UUIDs when resync finishes, + this can prevent unexpected "unrelared data" events later + * Updated compatibility code for Linux 6.11 and 6.12 + + * remove patches which already included in the new version: + 0001-drbd-properly-rate-limit-resync-progress-reports.patch + 0002-drbd-inherit-history-UUIDs-from-sync-source-when-res.patch + 0003-build-compat-fix-line-offset-in-annotation-pragmas-p.patch + 0004-drbd-fix-exposed_uuid-going-backward.patch + 0005-drbd-Proper-locking-around-new_current_uuid-on-a-dis.patch + 0006-build-CycloneDX-fix-bom-ref-add-purl.patch + 0007-build-Another-update-to-the-spdx-files.patch + 0008-build-generate-spdx.json-not-tag-value-format.patch + 0009-compat-fix-gen_patch_names-for-bdev_file_open_by_pat.patch + 0010-compat-fix-nla_nest_start_noflag-test.patch + 0011-compat-fix-blk_alloc_disk-rule.patch + 0012-drbd-remove-const-from-function-return-type.patch + 0013-drbd-don-t-set-max_write_zeroes_sectors-in-decide_on.patch + 0014-drbd-split-out-a-drbd_discard_supported-helper.patch + 0015-drbd-atomically-update-queue-limits-in-drbd_reconsid.patch + 0016-compat-test-and-patch-for-queue_limits_start_update.patch + 0017-compat-specify-which-essential-change-was-not-made.patch + 0018-gen_patch_names-reorder-blk_mode_t.patch + 0019-compat-fix-blk_queue_update_readahead-patch.patch + 0020-compat-test-and-patch-for-que_limits-max_hw_discard_.patch + 0021-compat-fixup-write_zeroes__no_capable.patch + 0022-compat-fixup-queue_flag_discard__yes_present.patch + 0023-drbd-move-flags-to-queue_limits.patch + 0024-compat-test-and-patch-for-queue_limits.features.patch + 0025-drbd-Annotate-struct-fifo_buffer-with-__counted_by.patch + 0026-compat-test-and-patch-for-__counted_by.patch + 0027-drbd-fix-function-cast-warnings-in-state-machine.patch + 0028-Add-missing-documentation-of-peer_device-parameter-t.patch + 0030-drbd-kref_put-path-when-kernel_accept-fails.patch + 0031-build-fix-typo-in-Makefile.spatch.patch + 0032-drbd-open-do-not-delay-open-if-already-Primary.patch + + * removed patch which is not needed anymore: + boo1231290_fix_drbd_build_error_against_kernel_v6.11.0.patch + boo1233222_fix_drbd_build_error_against_kernel_v6.11.6.patch + + * update: + drbd_git_revision + drbd.spec + + * add upstream patches to align commit d64ebe7eb7df: + 0001-drbd-Fix-memory-leak.patch + ------------------------------------------------------------------- Mon Nov 11 12:23:17 UTC 2024 - Glass Su diff --git a/drbd.spec b/drbd.spec index 90088d9..53982cb 100644 --- a/drbd.spec +++ b/drbd.spec @@ -24,7 +24,7 @@ %endif %endif Name: drbd -Version: 9.1.22 +Version: 9.1.23 Release: 0 Summary: Linux driver for the "Distributed Replicated Block Device" License: GPL-2.0-or-later @@ -36,44 +36,11 @@ Source3: drbd_git_revision ######################## # upstream patch -Patch0001: 0001-drbd-properly-rate-limit-resync-progress-reports.patch -Patch0002: 0002-drbd-inherit-history-UUIDs-from-sync-source-when-res.patch -Patch0003: 0003-build-compat-fix-line-offset-in-annotation-pragmas-p.patch -Patch0004: 0004-drbd-fix-exposed_uuid-going-backward.patch -Patch0005: 0005-drbd-Proper-locking-around-new_current_uuid-on-a-dis.patch -Patch0006: 0006-build-CycloneDX-fix-bom-ref-add-purl.patch -Patch0007: 0007-build-Another-update-to-the-spdx-files.patch -Patch0008: 0008-build-generate-spdx.json-not-tag-value-format.patch -Patch0009: 0009-compat-fix-gen_patch_names-for-bdev_file_open_by_pat.patch -Patch0010: 0010-compat-fix-nla_nest_start_noflag-test.patch -Patch0011: 0011-compat-fix-blk_alloc_disk-rule.patch -Patch0012: 0012-drbd-remove-const-from-function-return-type.patch -Patch0013: 0013-drbd-don-t-set-max_write_zeroes_sectors-in-decide_on.patch -Patch0014: 0014-drbd-split-out-a-drbd_discard_supported-helper.patch -Patch0015: 0015-drbd-atomically-update-queue-limits-in-drbd_reconsid.patch -Patch0016: 0016-compat-test-and-patch-for-queue_limits_start_update.patch -Patch0017: 0017-compat-specify-which-essential-change-was-not-made.patch -Patch0018: 0018-gen_patch_names-reorder-blk_mode_t.patch -Patch0019: 0019-compat-fix-blk_queue_update_readahead-patch.patch -Patch0020: 0020-compat-test-and-patch-for-que_limits-max_hw_discard_.patch -Patch0021: 0021-compat-fixup-write_zeroes__no_capable.patch -Patch0022: 0022-compat-fixup-queue_flag_discard__yes_present.patch -Patch0023: 0023-drbd-move-flags-to-queue_limits.patch -Patch0024: 0024-compat-test-and-patch-for-queue_limits.features.patch -Patch0025: 0025-drbd-Annotate-struct-fifo_buffer-with-__counted_by.patch -Patch0026: 0026-compat-test-and-patch-for-__counted_by.patch -Patch0027: 0027-drbd-fix-function-cast-warnings-in-state-machine.patch -Patch0028: 0028-Add-missing-documentation-of-peer_device-parameter-t.patch -# 0029-ci-update-build-helpers.patch is fedora special, we ignore it. -Patch0029: 0030-drbd-kref_put-path-when-kernel_accept-fails.patch -Patch0030: 0031-build-fix-typo-in-Makefile.spatch.patch -Patch0031: 0032-drbd-open-do-not-delay-open-if-already-Primary.patch +Patch0001: 0001-drbd-Fix-memory-leak.patch # suse special patch Patch1001: bsc-1025089_fix-resync-finished-with-syncs-have-bits-set.patch Patch1002: suse-coccinelle.patch -Patch1003: boo1231290_fix_drbd_build_error_against_kernel_v6.11.0.patch -Patch1004: boo1233222_fix_drbd_build_error_against_kernel_v6.11.6.patch ######################## #https://github.com/openSUSE/rpmlint-checks/blob/master/KMPPolicyCheck.py diff --git a/drbd_git_revision b/drbd_git_revision index 508cfc7..72b4510 100644 --- a/drbd_git_revision +++ b/drbd_git_revision @@ -1 +1 @@ -GIT-hash: 13ada1be201eb14ff8295a17194de8db5cdccd7f +GIT-hash: d64ebe7eb7df8c622b20bca38f3d7f4c7bb033c9