From: David Howells <dhowells@redhat.com>
To: netdev@vger.kernel.org
Cc: "David Howells" <dhowells@redhat.com>,
"Alexander Duyck" <alexander.duyck@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Willem de Bruijn" <willemdebruijn.kernel@gmail.com>,
"David Ahern" <dsahern@kernel.org>,
"Matthew Wilcox" <willy@infradead.org>,
"Jens Axboe" <axboe@kernel.dk>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
"Philipp Reisner" <philipp.reisner@linbit.com>,
"Lars Ellenberg" <lars.ellenberg@linbit.com>,
"Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>,
drbd-dev@lists.linbit.com, linux-block@vger.kernel.org
Subject: [PATCH net-next v5 10/16] drbd: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage()
Date: Fri, 23 Jun 2023 23:55:07 +0100 [thread overview]
Message-ID: <20230623225513.2732256-11-dhowells@redhat.com> (raw)
In-Reply-To: <20230623225513.2732256-1-dhowells@redhat.com>
Use sendmsg() conditionally with MSG_SPLICE_PAGES in _drbd_send_page()
rather than calling sendpage() or _drbd_no_send_page().
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Philipp Reisner <philipp.reisner@linbit.com>
cc: Lars Ellenberg <lars.ellenberg@linbit.com>
cc: "Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>
cc: Jens Axboe <axboe@kernel.dk>
cc: "David S. Miller" <davem@davemloft.net>
cc: Eric Dumazet <edumazet@google.com>
cc: Jakub Kicinski <kuba@kernel.org>
cc: Paolo Abeni <pabeni@redhat.com>
cc: drbd-dev@lists.linbit.com
cc: linux-block@vger.kernel.org
cc: netdev@vger.kernel.org
---
Notes:
ver #4)
- Don't look at msg.msg_iter after calling sendmsg. There's no guarantee
it has changed.
ver #2)
- Wrap lines at 80.
drivers/block/drbd/drbd_main.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 83987e7a5ef2..ea82d6733313 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1540,6 +1540,8 @@ static int _drbd_send_page(struct drbd_peer_device *peer_device, struct page *pa
int offset, size_t size, unsigned msg_flags)
{
struct socket *socket = peer_device->connection->data.socket;
+ struct msghdr msg = { .msg_flags = msg_flags, };
+ struct bio_vec bvec;
int len = size;
int err = -EIO;
@@ -1549,15 +1551,17 @@ static int _drbd_send_page(struct drbd_peer_device *peer_device, struct page *pa
* put_page(); and would cause either a VM_BUG directly, or
* __page_cache_release a page that would actually still be referenced
* by someone, leading to some obscure delayed Oops somewhere else. */
- if (drbd_disable_sendpage || !sendpage_ok(page))
- return _drbd_no_send_page(peer_device, page, offset, size, msg_flags);
+ if (!drbd_disable_sendpage && sendpage_ok(page))
+ msg.msg_flags |= MSG_NOSIGNAL | MSG_SPLICE_PAGES;
- msg_flags |= MSG_NOSIGNAL;
drbd_update_congested(peer_device->connection);
do {
int sent;
- sent = socket->ops->sendpage(socket, page, offset, len, msg_flags);
+ bvec_set_page(&bvec, page, offset, len);
+ iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, len);
+
+ sent = sock_sendmsg(socket, &msg);
if (sent <= 0) {
if (sent == -EAGAIN) {
if (we_should_drop_the_connection(peer_device->connection, socket))
WARNING: multiple messages have this Message-ID (diff)
From: David Howells <dhowells@redhat.com>
To: netdev@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
David Ahern <dsahern@kernel.org>,
linux-kernel@vger.kernel.org,
Alexander Duyck <alexander.duyck@gmail.com>,
Philipp Reisner <philipp.reisner@linbit.com>,
David Howells <dhowells@redhat.com>,
linux-mm@kvack.org, Eric Dumazet <edumazet@google.com>,
Matthew Wilcox <willy@infradead.org>,
Jakub Kicinski <kuba@kernel.org>,
Lars Ellenberg <lars.ellenberg@linbit.com>,
Paolo Abeni <pabeni@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
drbd-dev@lists.linbit.com
Subject: [Drbd-dev] [PATCH net-next v5 10/16] drbd: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage()
Date: Fri, 23 Jun 2023 23:55:07 +0100 [thread overview]
Message-ID: <20230623225513.2732256-11-dhowells@redhat.com> (raw)
In-Reply-To: <20230623225513.2732256-1-dhowells@redhat.com>
Use sendmsg() conditionally with MSG_SPLICE_PAGES in _drbd_send_page()
rather than calling sendpage() or _drbd_no_send_page().
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Philipp Reisner <philipp.reisner@linbit.com>
cc: Lars Ellenberg <lars.ellenberg@linbit.com>
cc: "Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>
cc: Jens Axboe <axboe@kernel.dk>
cc: "David S. Miller" <davem@davemloft.net>
cc: Eric Dumazet <edumazet@google.com>
cc: Jakub Kicinski <kuba@kernel.org>
cc: Paolo Abeni <pabeni@redhat.com>
cc: drbd-dev@lists.linbit.com
cc: linux-block@vger.kernel.org
cc: netdev@vger.kernel.org
---
Notes:
ver #4)
- Don't look at msg.msg_iter after calling sendmsg. There's no guarantee
it has changed.
ver #2)
- Wrap lines at 80.
drivers/block/drbd/drbd_main.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 83987e7a5ef2..ea82d6733313 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1540,6 +1540,8 @@ static int _drbd_send_page(struct drbd_peer_device *peer_device, struct page *pa
int offset, size_t size, unsigned msg_flags)
{
struct socket *socket = peer_device->connection->data.socket;
+ struct msghdr msg = { .msg_flags = msg_flags, };
+ struct bio_vec bvec;
int len = size;
int err = -EIO;
@@ -1549,15 +1551,17 @@ static int _drbd_send_page(struct drbd_peer_device *peer_device, struct page *pa
* put_page(); and would cause either a VM_BUG directly, or
* __page_cache_release a page that would actually still be referenced
* by someone, leading to some obscure delayed Oops somewhere else. */
- if (drbd_disable_sendpage || !sendpage_ok(page))
- return _drbd_no_send_page(peer_device, page, offset, size, msg_flags);
+ if (!drbd_disable_sendpage && sendpage_ok(page))
+ msg.msg_flags |= MSG_NOSIGNAL | MSG_SPLICE_PAGES;
- msg_flags |= MSG_NOSIGNAL;
drbd_update_congested(peer_device->connection);
do {
int sent;
- sent = socket->ops->sendpage(socket, page, offset, len, msg_flags);
+ bvec_set_page(&bvec, page, offset, len);
+ iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, len);
+
+ sent = sock_sendmsg(socket, &msg);
if (sent <= 0) {
if (sent == -EAGAIN) {
if (we_should_drop_the_connection(peer_device->connection, socket))
next prev parent reply other threads:[~2023-06-23 22:57 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-23 22:54 [PATCH net-next v5 00/16] splice, net: Switch over users of sendpage() and remove it David Howells
2023-06-23 22:54 ` [PATCH net-next v5 01/16] tcp_bpf, smc, tls, espintcp, siw: Reduce MSG_SENDPAGE_NOTLAST usage David Howells
2023-06-23 22:54 ` [PATCH net-next v5 02/16] net: Use sendmsg(MSG_SPLICE_PAGES) not sendpage in skb_send_sock() David Howells
2023-06-23 22:55 ` [PATCH net-next v5 03/16] ceph: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage David Howells
2023-06-25 12:20 ` Ilya Dryomov
2023-06-26 14:00 ` David Howells
2023-06-26 15:41 ` Ilya Dryomov
2023-06-26 16:44 ` David Howells
2023-06-26 15:12 ` David Howells
2023-06-26 15:52 ` Ilya Dryomov
2023-06-23 22:55 ` [PATCH net-next v5 04/16] ceph: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage() David Howells
2023-06-25 12:34 ` Ilya Dryomov
2023-06-26 15:30 ` David Howells
2023-06-26 16:07 ` Ilya Dryomov
2023-06-26 17:01 ` David Howells
2023-06-23 22:55 ` [PATCH net-next v5 05/16] rds: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage David Howells
2023-06-23 22:55 ` [Cluster-devel] [PATCH net-next v5 06/16] dlm: " David Howells
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` [PATCH net-next v5 07/16] nvme-tcp: Use sendmsg(MSG_SPLICE_PAGES) rather then sendpage David Howells
2023-06-23 22:55 ` [PATCH net-next v5 08/16] nvmet-tcp: " David Howells
2023-06-23 22:55 ` [PATCH net-next v5 09/16] smc: Drop smc_sendpage() in favour of smc_sendmsg() + MSG_SPLICE_PAGES David Howells
2023-06-23 22:55 ` David Howells [this message]
2023-06-23 22:55 ` [Drbd-dev] [PATCH net-next v5 10/16] drbd: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage() David Howells
2023-06-23 22:55 ` [PATCH net-next v5 11/16] scsi: iscsi_tcp: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage David Howells
2023-06-27 19:02 ` Chris Leech
2023-06-23 22:55 ` [PATCH net-next v5 12/16] scsi: target: iscsi: " David Howells
2023-06-23 22:55 ` [Ocfs2-devel] [PATCH net-next v5 13/16] ocfs2: Fix use of slab data with sendpage David Howells via Ocfs2-devel
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` [Ocfs2-devel] [PATCH net-next v5 14/16] ocfs2: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage() David Howells via Ocfs2-devel
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` [PATCH net-next v5 15/16] sock: Remove ->sendpage*() in favour of sendmsg(MSG_SPLICE_PAGES) David Howells
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` [PATCH net-next v5 16/16] net: Kill MSG_SENDPAGE_NOTLAST David Howells
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` David Howells
2023-06-23 22:55 ` David Howells
2023-06-24 23:00 ` [PATCH net-next v5 00/16] splice, net: Switch over users of sendpage() and remove it patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230623225513.2732256-11-dhowells@redhat.com \
--to=dhowells@redhat.com \
--cc=alexander.duyck@gmail.com \
--cc=axboe@kernel.dk \
--cc=christoph.boehmwalder@linbit.com \
--cc=davem@davemloft.net \
--cc=drbd-dev@lists.linbit.com \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=lars.ellenberg@linbit.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=philipp.reisner@linbit.com \
--cc=willemdebruijn.kernel@gmail.com \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.