From 172292f7b4037f5601fff88796b7e0fae5df8bdf62d960e7c345e78c165e8da5 Mon Sep 17 00:00:00 2001 From: heming zhao Date: Mon, 20 Nov 2023 11:51:25 +0000 Subject: [PATCH] Accepting request 1127654 from home:gsu:branches:network:ha-clustering:Factory - drbd: fix build error against kernel v6.6.1 (boo#1217078) * add upstream patches + 0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch + 0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch + 0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch * remove patch which are already included in upstream patches: - bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch OBS-URL: https://build.opensuse.org/request/show/1127654 OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/drbd?expand=0&rev=147 --- ...ve-sendpage-in-favour-of-sendmsg-MSG.patch | 107 ++++++++++ ...lace-fmode_t-with-a-block-specific-t.patch | 183 ++++++++++++++++++ ...-remove-userhdr-from-struct-genl_inf.patch | 96 +++++++++ ...ix-build-error-against-kernel-v6.5.4.patch | 86 -------- drbd.changes | 11 ++ drbd.spec | 8 +- 6 files changed, 403 insertions(+), 88 deletions(-) create mode 100644 0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch create mode 100644 0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch create mode 100644 0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch delete mode 100644 bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch diff --git a/0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch b/0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch new file mode 100644 index 0000000..33b16e8 --- /dev/null +++ b/0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch @@ -0,0 +1,107 @@ +From a000a5577210929ca808fe19719186cb7e917f44 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Moritz=20WanzenBug=20Wanzenb=C3=B6ck?= + +Date: Wed, 13 Sep 2023 13:30:57 +0200 +Subject: [PATCH] compat: sock: Remove ->sendpage*() in favour of + sendmsg(MSG_SPLICE_PAGES) + +See also upstream Linux kernel commits +dc97391e6610 ("sock: Remove ->sendpage*() in favour of sendmsg(MSG_SPLICE_PAGES)") +eeac7405c735 ("drbd: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage()") +4b9c2edaf728 ("drbd: swap bvec_set_page len and offset") + +Original message: + +Remove ->sendpage() and ->sendpage_locked(). sendmsg() with +MSG_SPLICE_PAGES should be used instead. This allows multiple pages and +multipage folios to be passed through. +--- + .../cocci/msg_splice_pages__no_present.cocci | 16 ++++++++++++++++ + drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++ + .../tests/have_msg_splice_pages.c | 7 +++++++ + drbd/drbd_transport_tcp.c | 8 ++++++-- + 4 files changed, 32 insertions(+), 2 deletions(-) + create mode 100644 drbd/drbd-kernel-compat/cocci/msg_splice_pages__no_present.cocci + create mode 100644 drbd/drbd-kernel-compat/tests/have_msg_splice_pages.c + +diff --git a/drbd/drbd-kernel-compat/cocci/msg_splice_pages__no_present.cocci b/drbd/drbd-kernel-compat/cocci/msg_splice_pages__no_present.cocci +new file mode 100644 +index 000000000000..0fdf77e43737 +--- /dev/null ++++ b/drbd/drbd-kernel-compat/cocci/msg_splice_pages__no_present.cocci +@@ -0,0 +1,16 @@ ++@@ ++expression flags; ++@@ ++ flags ++- | MSG_SPLICE_PAGES ++ ++@@ ++identifier bvec, page, len, offset, msg, socket; ++@@ ++- struct bio_vec bvec; ++ ... ++ int sent; ++- bvec_set_page(&bvec, page, len, offset); ++- iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, len); ++- sent = sock_sendmsg(socket, &msg); +++ sent = socket->ops->sendpage(socket, page, offset, len, msg.msg_flags); +diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c +index 608be8b4f099..6a96c5b89f11 100644 +--- a/drbd/drbd-kernel-compat/gen_patch_names.c ++++ b/drbd/drbd-kernel-compat/gen_patch_names.c +@@ -127,6 +127,9 @@ int main(int argc, char **argv) + patch(1, "bvec_kmap_local", true, false, + COMPAT_HAVE_BVEC_KMAP_LOCAL, "present"); + ++ patch(1, "msg_splice_pages", true, false, ++ COMPAT_HAVE_MSG_SPLICE_PAGES, "present"); ++ + patch(1, "struct_bvec_iter", true, false, + COMPAT_HAVE_STRUCT_BVEC_ITER, "present"); + +diff --git a/drbd/drbd-kernel-compat/tests/have_msg_splice_pages.c b/drbd/drbd-kernel-compat/tests/have_msg_splice_pages.c +new file mode 100644 +index 000000000000..0bb23ef6d39a +--- /dev/null ++++ b/drbd/drbd-kernel-compat/tests/have_msg_splice_pages.c +@@ -0,0 +1,7 @@ ++/* { "version": "v6.5-rc1", "commit": "dc97391e661009eab46783030d2404c9b6e6f2e7", "comment": "sock: Remove ->sendpage*() in favour of sendmsg(MSG_SPLICE_PAGES)", "author": "David Howells ", "date": "Fri Jun 23 23:55:12 2023 +0100" } */ ++#include ++ ++int foo(void) ++{ ++ return MSG_SPLICE_PAGES; ++} +diff --git a/drbd/drbd_transport_tcp.c b/drbd/drbd_transport_tcp.c +index ca60833f73d7..5dcba50dd0eb 100644 +--- a/drbd/drbd_transport_tcp.c ++++ b/drbd/drbd_transport_tcp.c +@@ -1193,18 +1193,22 @@ static int dtt_send_page(struct drbd_transport *transport, enum drbd_stream stre + struct drbd_tcp_transport *tcp_transport = + container_of(transport, struct drbd_tcp_transport, transport); + struct socket *socket = tcp_transport->stream[stream]; ++ struct msghdr msg = { .msg_flags = msg_flags | MSG_NOSIGNAL | MSG_SPLICE_PAGES }; ++ struct bio_vec bvec; + int len = size; + int err = -EIO; + + if (!socket) + return -ENOTCONN; + +- msg_flags |= MSG_NOSIGNAL; + dtt_update_congested(tcp_transport); + do { + int sent; + +- sent = socket->ops->sendpage(socket, page, offset, len, msg_flags); ++ bvec_set_page(&bvec, page, len, offset); ++ iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, len); ++ ++ sent = sock_sendmsg(socket, &msg); + if (sent <= 0) { + if (sent == -EAGAIN) { + if (drbd_stream_send_timed_out(transport, stream)) +-- +2.42.1 + diff --git a/0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch b/0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch new file mode 100644 index 0000000..82ef213 --- /dev/null +++ b/0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch @@ -0,0 +1,183 @@ +From 2d3c3fd6546174a0452c9bbd64d4f4193c0c39e2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Moritz=20WanzenBug=20Wanzenb=C3=B6ck?= + +Date: Wed, 13 Sep 2023 11:26:35 +0200 +Subject: [PATCH] compat: block: replace fmode_t with a block-specific type for + block open flags + +See also upstream Linux kernel commit +05bdb9965305 ("block: replace fmode_t with a block-specific type for block open flags" + +Original message: + +The only overlap between the block open flags mapped into the fmode_t and +other uses of fmode_t are FMODE_READ and FMODE_WRITE. Define a new +blk_mode_t instead for use in blkdev_get_by_{dev,path}, ->open and +->ioctl and stop abusing fmode_t. +--- + .../cocci/blk_mode_t__no_present.cocci | 19 ++++++++++++++ + drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++ + .../tests/have_blk_mode_t.c | 4 +++ + drbd/drbd_main.c | 26 +++++++++---------- + 4 files changed, 39 insertions(+), 13 deletions(-) + create mode 100644 drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci + create mode 100644 drbd/drbd-kernel-compat/tests/have_blk_mode_t.c + +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 +new file mode 100644 +index 000000000000..030723c817de +--- /dev/null ++++ b/drbd/drbd-kernel-compat/cocci/blk_mode_t__no_present.cocci +@@ -0,0 +1,19 @@ ++@@ ++identifier fn; ++identifier mode; ++@@ ++ fn ( ++ ..., ++- blk_mode_t mode +++ fmode_t mode ++ ) { ++ <... ++( ++- BLK_OPEN_WRITE +++ FMODE_WRITE ++| ++- BLK_OPEN_NDELAY +++ FMODE_NDELAY ++) ++ ...> ++ } +diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c +index 6a96c5b89f11..e4a65a3c451e 100644 +--- a/drbd/drbd-kernel-compat/gen_patch_names.c ++++ b/drbd/drbd-kernel-compat/gen_patch_names.c +@@ -571,6 +571,9 @@ 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"); ++ + /* #define BLKDEV_ISSUE_ZEROOUT_EXPORTED */ + /* #define BLKDEV_ZERO_NOUNMAP */ + +diff --git a/drbd/drbd-kernel-compat/tests/have_blk_mode_t.c b/drbd/drbd-kernel-compat/tests/have_blk_mode_t.c +new file mode 100644 +index 000000000000..e063bdc30f43 +--- /dev/null ++++ b/drbd/drbd-kernel-compat/tests/have_blk_mode_t.c +@@ -0,0 +1,4 @@ ++/* { "version": "v6.5-rc1", "commit": "05bdb9965305bbfdae79b31d22df03d1e2cfcb22", "comment": "block: replace fmode_t with a block-specific type for block open flags", "author": "Christoph Hellwig ", "date": "Thu Jun 8 13:02:55 2023 +0200" } */ ++#include ++ ++void foo(blk_mode_t mode) {} +diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c +index 0719229f210e..f9560bdff63f 100644 +--- a/drbd/drbd_main.c ++++ b/drbd/drbd_main.c +@@ -52,7 +52,7 @@ + #include "drbd_meta_data.h" + #include "drbd_dax_pmem.h" + +-static int drbd_open(struct gendisk *gd, fmode_t mode); ++static int drbd_open(struct gendisk *gd, blk_mode_t mode); + static void drbd_release(struct gendisk *gd); + static void md_sync_timer_fn(struct timer_list *t); + static int w_bitmap_io(struct drbd_work *w, int unused); +@@ -2566,10 +2566,10 @@ enum ioc_rv { + IOC_ABORT = 2, + }; + +-static enum ioc_rv inc_open_count(struct drbd_device *device, fmode_t mode) ++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 & FMODE_NDELAY ? IOC_ABORT : IOC_SLEEP; ++ enum ioc_rv r = mode & BLK_OPEN_NDELAY ? IOC_ABORT : IOC_SLEEP; + + if (test_bit(DOWN_IN_PROGRESS, &resource->flags)) + return IOC_ABORT; +@@ -2580,7 +2580,7 @@ static enum ioc_rv inc_open_count(struct drbd_device *device, fmode_t mode) + else if (!resource->remote_state_change) { + r = IOC_OK; + device->open_cnt++; +- if (mode & FMODE_WRITE) ++ if (mode & BLK_OPEN_WRITE) + device->writable = true; + } + read_unlock_irq(&resource->state_rwlock); +@@ -2646,7 +2646,7 @@ out: + spin_unlock(&device->openers_lock); + } + +-static int drbd_open(struct gendisk *gd, fmode_t mode) ++static int drbd_open(struct gendisk *gd, blk_mode_t mode) + { + struct drbd_device *device = gd->private_data; + struct drbd_resource *resource = device->resource; +@@ -2655,7 +2655,7 @@ static int drbd_open(struct gendisk *gd, fmode_t mode) + int err = 0; + + /* Fail read-only open from systemd-udev (version <= 238) */ +- if (!(mode & FMODE_WRITE) && !drbd_allow_oos) { ++ if (!(mode & BLK_OPEN_WRITE) && !drbd_allow_oos) { + char comm[TASK_COMM_LEN]; + get_task_comm(comm, current); + if (!strcmp("systemd-udevd", comm)) +@@ -2664,7 +2664,7 @@ static int drbd_open(struct gendisk *gd, fmode_t mode) + + /* Fail read-write open early, + * in case someone explicitly set us read-only (blockdev --setro) */ +- if (bdev_read_only(gd->part0) && (mode & FMODE_WRITE)) ++ if (bdev_read_only(gd->part0) && (mode & BLK_OPEN_WRITE)) + return -EACCES; + + if (resource->fail_io[NOW]) +@@ -2693,14 +2693,14 @@ static int drbd_open(struct gendisk *gd, fmode_t mode) + This avoids split brain when the drbd volume gets opened + temporarily by udev while it scans for PV signatures. */ + +- if (mode & FMODE_WRITE) { ++ if (mode & BLK_OPEN_WRITE) { + if (resource->role[NOW] == R_SECONDARY) { +- rv = try_to_promote(device, timeout, (mode & FMODE_NDELAY)); ++ rv = try_to_promote(device, timeout, (mode & BLK_OPEN_NDELAY)); + if (rv < SS_SUCCESS) + drbd_info(resource, "Auto-promote failed: %s (%d)\n", + drbd_set_st_err_str(rv), rv); + } +- } else if ((mode & FMODE_NDELAY) == 0) { ++ } else if ((mode & BLK_OPEN_NDELAY) == 0) { + /* Double check peers + * + * Some services may try to first open ro, and only if that +@@ -2720,14 +2720,14 @@ static int drbd_open(struct gendisk *gd, fmode_t mode) + } + } + } else if (resource->role[NOW] != R_PRIMARY && +- !(mode & FMODE_WRITE) && !drbd_allow_oos) { ++ !(mode & BLK_OPEN_WRITE) && !drbd_allow_oos) { + err = -EMEDIUMTYPE; + goto out; + } + + if (test_bit(UNREGISTERED, &device->flags)) { + err = -ENODEV; +- } else if (mode & FMODE_WRITE) { ++ } else if (mode & BLK_OPEN_WRITE) { + if (resource->role[NOW] != R_PRIMARY) + err = -EROFS; + } else /* READ access only */ { +@@ -2741,7 +2741,7 @@ out: + mutex_unlock(&resource->open_release); + if (err) { + drbd_release(gd); +- if (err == -EAGAIN && !(mode & FMODE_NDELAY)) ++ if (err == -EAGAIN && !(mode & BLK_OPEN_NDELAY)) + err = -EMEDIUMTYPE; + } + +-- +2.42.1 + diff --git a/0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch b/0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch new file mode 100644 index 0000000..490b1e3 --- /dev/null +++ b/0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch @@ -0,0 +1,96 @@ +From 1412792a443ddc696fd1c8981a6cc544272f54bf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Moritz=20WanzenBug=20Wanzenb=C3=B6ck?= + +Date: Wed, 13 Sep 2023 15:46:12 +0200 +Subject: [PATCH] compat: genetlink: remove userhdr from struct genl_info + +See also upstream Linux kernel commit +bffcc6882a1b ("genetlink: remove userhdr from struct genl_info") + +Original message: + +Only three families use info->userhdr today and going forward +we discourage using fixed headers in new families. +So having the pointer to user header in struct genl_info +is an overkill. Compute the header pointer at runtime. +--- + .../cocci/genl_info_userhdr__no_present.cocci | 5 +++++ + drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++ + drbd/drbd-kernel-compat/tests/have_genl_info_userhdr.c | 7 +++++++ + drbd/drbd_nl.c | 6 +++--- + 4 files changed, 18 insertions(+), 3 deletions(-) + create mode 100644 drbd/drbd-kernel-compat/cocci/genl_info_userhdr__no_present.cocci + create mode 100644 drbd/drbd-kernel-compat/tests/have_genl_info_userhdr.c + +diff --git a/drbd/drbd-kernel-compat/cocci/genl_info_userhdr__no_present.cocci b/drbd/drbd-kernel-compat/cocci/genl_info_userhdr__no_present.cocci +new file mode 100644 +index 000000000000..75e787797068 +--- /dev/null ++++ b/drbd/drbd-kernel-compat/cocci/genl_info_userhdr__no_present.cocci +@@ -0,0 +1,5 @@ ++@@ ++expression info; ++@@ ++- genl_info_userhdr(info) +++ info->userhdr +diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c +index e4a65a3c451e..b136acf3148a 100644 +--- a/drbd/drbd-kernel-compat/gen_patch_names.c ++++ b/drbd/drbd-kernel-compat/gen_patch_names.c +@@ -574,6 +574,9 @@ int main(int argc, char **argv) + 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"); ++ + /* #define BLKDEV_ISSUE_ZEROOUT_EXPORTED */ + /* #define BLKDEV_ZERO_NOUNMAP */ + +diff --git a/drbd/drbd-kernel-compat/tests/have_genl_info_userhdr.c b/drbd/drbd-kernel-compat/tests/have_genl_info_userhdr.c +new file mode 100644 +index 000000000000..3c69dacce244 +--- /dev/null ++++ b/drbd/drbd-kernel-compat/tests/have_genl_info_userhdr.c +@@ -0,0 +1,7 @@ ++/* { "version": "v6.6-rc1", "commit": "bffcc6882a1bb2be8c9420184966f4c2c822078e", "comment": "genetlink: remove userhdr from struct genl_info", "author": "Jakub Kicinski ", "date": "Mon Aug 14 14:47:16 2023 -0700" } */ ++#include ++ ++void *foo(struct genl_info *info) ++{ ++ return genl_info_userhdr(info); ++} +diff --git a/drbd/drbd_nl.c b/drbd/drbd_nl.c +index 71ed4272614e..538c31202e4b 100644 +--- a/drbd/drbd_nl.c ++++ b/drbd/drbd_nl.c +@@ -203,7 +203,7 @@ static struct drbd_path *first_path(struct drbd_connection *connection) + static int drbd_adm_prepare(struct drbd_config_context *adm_ctx, + struct sk_buff *skb, struct genl_info *info, unsigned flags) + { +- struct drbd_genlmsghdr *d_in = info->userhdr; ++ struct drbd_genlmsghdr *d_in = genl_info_userhdr(info); + const u8 cmd = info->genlhdr->cmd; + int err; + +@@ -2106,7 +2106,7 @@ static void drbd_try_suspend_al(struct drbd_device *device) + + static bool should_set_defaults(struct genl_info *info) + { +- unsigned flags = ((struct drbd_genlmsghdr*)info->userhdr)->flags; ++ unsigned int flags = ((struct drbd_genlmsghdr *)genl_info_userhdr(info))->flags; + return 0 != (flags & DRBD_GENL_F_SET_DEFAULTS); + } + +@@ -6279,7 +6279,7 @@ out_no_unlock: + int drbd_adm_new_minor(struct sk_buff *skb, struct genl_info *info) + { + struct drbd_config_context adm_ctx; +- struct drbd_genlmsghdr *dh = info->userhdr; ++ struct drbd_genlmsghdr *dh = genl_info_userhdr(info); + struct device_conf device_conf; + struct drbd_resource *resource; + struct drbd_device *device; +-- +2.42.1 + diff --git a/bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch b/bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch deleted file mode 100644 index 3fd25e5..0000000 --- a/bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch +++ /dev/null @@ -1,86 +0,0 @@ -Author: Heming Zhao -Date: Thu Sep 28 11:12:00 2023 +0800 -Subject: drbd: fix build error against kernel v6.5.4 - -Below two upstream commits broken drbd v9.1 building - -(belonging to v6.5-rc1) -``` -commit dc97391e661009eab46783030d2404c9b6e6f2e7 -Author: David Howells -Date: Fri Jun 23 23:55:12 2023 +0100 - - sock: Remove ->sendpage*() in favour of sendmsg(MSG_SPLICE_PAGES) - - -commit 0733ad8002916b9dbbbcfe6e92ad44d2657de1c1 -Author: Christoph Hellwig -Date: Thu Jun 8 13:02:58 2023 +0200 - - fs: remove the now unused FMODE_* flags -``` - -This patch fix the build error. - ---- - -diff -Nupr a/drbd/drbd_main.c b/drbd/drbd_main.c ---- a/drbd/drbd_main.c 2023-09-26 11:08:57.142974614 +0800 -+++ b/drbd/drbd_main.c 2023-09-26 11:07:53.646071680 +0800 -@@ -2569,7 +2569,7 @@ enum ioc_rv { - static enum ioc_rv inc_open_count(struct drbd_device *device, fmode_t mode) - { - struct drbd_resource *resource = device->resource; -- enum ioc_rv r = mode & FMODE_NDELAY ? IOC_ABORT : IOC_SLEEP; -+ enum ioc_rv r = mode & BLK_OPEN_NDELAY ? IOC_ABORT : IOC_SLEEP; - - if (test_bit(DOWN_IN_PROGRESS, &resource->flags)) - return IOC_ABORT; -@@ -2695,12 +2695,12 @@ static int drbd_open(struct gendisk *gd, - - if (mode & FMODE_WRITE) { - if (resource->role[NOW] == R_SECONDARY) { -- rv = try_to_promote(device, timeout, (mode & FMODE_NDELAY)); -+ rv = try_to_promote(device, timeout, (mode & BLK_OPEN_NDELAY)); - if (rv < SS_SUCCESS) - drbd_info(resource, "Auto-promote failed: %s (%d)\n", - drbd_set_st_err_str(rv), rv); - } -- } else if ((mode & FMODE_NDELAY) == 0) { -+ } else if ((mode & BLK_OPEN_NDELAY) == 0) { - /* Double check peers - * - * Some services may try to first open ro, and only if that -@@ -2741,7 +2741,7 @@ out: - mutex_unlock(&resource->open_release); - if (err) { - drbd_release(gd); -- if (err == -EAGAIN && !(mode & FMODE_NDELAY)) -+ if (err == -EAGAIN && !(mode & BLK_OPEN_NDELAY)) - err = -EMEDIUMTYPE; - } - -diff -Nupr a/drbd/drbd_transport_tcp.c b/drbd/drbd_transport_tcp.c ---- a/drbd/drbd_transport_tcp.c 2023-09-26 11:09:04.016333505 +0800 -+++ b/drbd/drbd_transport_tcp.c 2023-09-26 11:07:59.132758771 +0800 -@@ -1193,6 +1193,8 @@ static int dtt_send_page(struct drbd_tra - struct drbd_tcp_transport *tcp_transport = - container_of(transport, struct drbd_tcp_transport, transport); - struct socket *socket = tcp_transport->stream[stream]; -+ struct msghdr msghdr = { .msg_flags = MSG_SPLICE_PAGES|msg_flags, }; -+ struct bio_vec bvec; - int len = size; - int err = -EIO; - -@@ -1204,7 +1206,10 @@ static int dtt_send_page(struct drbd_tra - do { - int sent; - -- sent = socket->ops->sendpage(socket, page, offset, len, msg_flags); -+ //sent = socket->ops->sendpage(socket, page, offset, len, msg_flags); -+ bvec_set_page(&bvec, page, offset, len); -+ iov_iter_bvec(&msghdr.msg_iter, ITER_SOURCE, &bvec, 1, len); -+ sent = sock_sendmsg(socket, &msghdr); - if (sent <= 0) { - if (sent == -EAGAIN) { - if (drbd_stream_send_timed_out(transport, stream)) diff --git a/drbd.changes b/drbd.changes index 70dd531..3922b4d 100644 --- a/drbd.changes +++ b/drbd.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------ +Tue Nov 13 11:56:00 UTC 2023 - Glass Su + +- drbd: fix build error against kernel v6.6.1 (boo#1217078) + * add upstream patches + + 0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch + + 0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch + + 0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch + * remove patch which are already included in upstream patches: + - bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch + ------------------------------------------------------------------ Tue Sep 26 03:35:00 UTC 2023 - Heming Zhao diff --git a/drbd.spec b/drbd.spec index 72cddd3..5a78526 100644 --- a/drbd.spec +++ b/drbd.spec @@ -56,10 +56,12 @@ Patch0017: 0017-drbd-propagate-exposed-UUIDs-only-into-established-c.patch Patch0018: 0018-drbd-rework-autopromote.patch Patch0019: 0019-compat-block-remove-the-unused-mode-argument-to-rele.patch Patch0020: 0020-drbd-do-not-allow-auto-demote-to-be-interrupted-by-s.patch +Patch0021: 0021-compat-sock-Remove-sendpage-in-favour-of-sendmsg-MSG.patch +Patch0022: 0022-compat-block-replace-fmode_t-with-a-block-specific-t.patch +Patch0023: 0023-compat-genetlink-remove-userhdr-from-struct-genl_inf.patch # suse special patch Patch1001: bsc-1025089_fix-resync-finished-with-syncs-have-bits-set.patch Patch1002: suse-coccinelle.patch -Patch1003: bsc-1215699_fix-build-error-against-kernel-v6.5.4.patch ######################## #https://github.com/openSUSE/rpmlint-checks/blob/master/KMPPolicyCheck.py @@ -115,9 +117,11 @@ installed kernel. %patch0018 -p1 %patch0019 -p1 %patch0020 -p1 +%patch0021 -p1 +%patch0022 -p1 +%patch0023 -p1 %patch1001 -p1 %patch1002 -p1 -%patch1003 -p1 mkdir source cp -a drbd/. source/. || :