All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johann Baudy <johaahn@gmail.com>
To: netdev@vger.kernel.org
Cc: David Miller <davem@davemloft.net>
Subject: [PATCH] sendfile() and UDP socket
Date: Sun, 14 Sep 2008 12:25:56 +0200	[thread overview]
Message-ID: <1221387956.9204.7.camel@fry> (raw)

Hi All,

Sendfile() over UDP socket are currently limited to ~ 64KBytes file (max cork.length).
Indeed, if you run sendfile() with a file size > 64KBytes over UDP socket, system call will stop and return ~64KBytes without sending anything on the network.
This patch is pushing ongoing frames when frames buffer is full, to prevent overflow.

Signed-off-by: Johann Baudy <johann.baudy@gmail.com>

 net/ipv4/udp.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 8e42fbb..64e0857 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -743,7 +743,22 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,
 		 size_t size, int flags)
 {
 	struct udp_sock *up = udp_sk(sk);
+	struct inet_sock *inet = inet_sk(sk);
 	int ret;
+	int fragheaderlen;
+	struct ip_options *opt = NULL;
+
+	lock_sock(sk);
+	if (inet->cork.flags & IPCORK_OPT)
+		opt = inet->cork.opt;
+	fragheaderlen = sizeof(struct iphdr) + (opt ? opt->optlen : 0);
+
+	if (inet->cork.length + size >= 0xFFFF - fragheaderlen) {
+		ret = udp_push_pending_frames(sk);
+		if (ret)
+			goto out;
+	}
+	release_sock(sk);
 
 	if (!up->pending) {
 		struct msghdr msg = {	.msg_flags = flags|MSG_MORE };



             reply	other threads:[~2008-09-14 10:25 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-14 10:25 Johann Baudy [this message]
2008-09-16  4:17 ` [PATCH] sendfile() and UDP socket Simon Horman
2008-09-16  4:24   ` Simon Horman
2008-09-16 12:01 ` Hirokazu Takahashi
2008-09-18 17:31   ` Rémi Denis-Courmont
2008-09-19 12:28     ` Hirokazu Takahashi
2008-09-19 13:14       ` Rémi Denis-Courmont
2008-09-21  8:04 ` David Miller
2008-09-22  0:21   ` Evgeniy Polyakov
2008-09-22  0:44     ` David Miller
2008-09-22  1:08       ` Evgeniy Polyakov
2008-09-22  2:07         ` David Miller
2008-09-22  4:19           ` Evgeniy Polyakov
2008-09-22  4:27             ` David Miller
2008-09-22  4:40               ` Evgeniy Polyakov
2008-09-22  5:06                 ` David Miller
2008-09-22  5:49                   ` Evgeniy Polyakov
2008-09-22  6:54                     ` David Miller
2008-09-22  7:04                       ` Evgeniy Polyakov
2008-09-23  4:54                         ` Herbert Xu
2008-09-23  6:27                           ` Evgeniy Polyakov
2008-09-23  7:01                             ` Herbert Xu
2008-09-23  7:07                               ` Evgeniy Polyakov
2008-09-24  4:53                               ` Bill Fink
     [not found]                                 ` <7e0dd21a0810140009k49c8876ax66f744d0a3a4931b@mail.gmail.com>
2008-10-14  7:10                                   ` Johann Baudy
2008-09-25 13:03             ` Using skb_get() to recycle skbs Ram.Natarajan
2008-09-25 14:28               ` Evgeniy Polyakov
  -- strict thread matches above, loose matches on Subject: below --
2008-09-10 12:39 [PATCH] sendfile() and UDP socket Johann Baudy
2008-09-10 20:16 ` David Miller

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=1221387956.9204.7.camel@fry \
    --to=johaahn@gmail.com \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.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.