From: Josef Bacik <jbacik@fb.com>
To: <kernel-team@fb.com>, <grub-devel@gnu.org>
Subject: [PATCH] efinet: retransmit if our device is busy
Date: Mon, 31 Aug 2015 13:34:35 -0400 [thread overview]
Message-ID: <1441042475-4916-1-git-send-email-jbacik@fb.com> (raw)
When I fixed the txbuf handling I ripped out the retransmission code since it
was flooding our network when we had the buggy behavior. Turns out this was too
heavy handed as we can still have transient tx timeouts. So instead make sure
we retry our transmission once per timeout. This way we can deal with transient
transmission problems without flooding the box. This fixes an issue we were
seeing in production. Thanks,
Signed-off-by: Josef Bacik <jbacik@fb.com>
---
grub-core/net/drivers/efi/efinet.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
index 692d5ad..c8f80a1 100644
--- a/grub-core/net/drivers/efi/efinet.c
+++ b/grub-core/net/drivers/efi/efinet.c
@@ -38,6 +38,7 @@ send_card_buffer (struct grub_net_card *dev,
grub_efi_simple_network_t *net = dev->efi_net;
grub_uint64_t limit_time = grub_get_time_ms () + 4000;
void *txbuf;
+ int retry = 0;
if (dev->txbusy)
while (1)
@@ -60,6 +61,15 @@ send_card_buffer (struct grub_net_card *dev,
dev->txbusy = 0;
break;
}
+ if (!retry)
+ {
+ st = efi_call_7 (net->transmit, net, 0, dev->last_pkt_size,
+ dev->txbuf, NULL, NULL, NULL);
+ if (st != GRUB_EFI_SUCCESS)
+ return grub_error (GRUB_ERR_IO,
+ N_("couldn't send network packet"));
+ retry = 1;
+ }
if (limit_time < grub_get_time_ms ())
return grub_error (GRUB_ERR_TIMEOUT,
N_("couldn't send network packet"));
--
2.1.0
next reply other threads:[~2015-08-31 17:34 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-31 17:34 Josef Bacik [this message]
2015-09-11 16:49 ` [PATCH] efinet: retransmit if our device is busy Andrei Borzenkov
2015-09-11 19:08 ` Josef Bacik
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=1441042475-4916-1-git-send-email-jbacik@fb.com \
--to=jbacik@fb.com \
--cc=grub-devel@gnu.org \
--cc=kernel-team@fb.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).