From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1aViJO-0006IY-BU for mharc-grub-devel@gnu.org; Tue, 16 Feb 2016 11:17:14 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37736) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aViJI-000682-CC for grub-devel@gnu.org; Tue, 16 Feb 2016 11:17:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aViJF-0002o2-4A for grub-devel@gnu.org; Tue, 16 Feb 2016 11:17:08 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:24362) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aViJE-0002ns-Mt for grub-devel@gnu.org; Tue, 16 Feb 2016 11:17:05 -0500 Received: from pps.filterd (m0089730.ppops.net [127.0.0.1]) by m0089730.ppops.net (8.15.0.59/8.15.0.59) with SMTP id u1GG8ttN008907; Tue, 16 Feb 2016 08:17:02 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fb.com; h=subject : to : references : cc : from : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=facebook; bh=WxaN307o7lApNmb/exrbaYFQ23brhE/Cjef3IQWxfCY=; b=XJ024ZRk8vUUWACTkridCVKFTltpu4txn/h2jTLuRx4ZnYRVJXAZe3UdcUCo3vkD9FJ3 eQMKluc/8CiAuAHo0o5eRmsNtSywwFjtQ8VedU1oghSpmyzaNwLvByGhd97YxUlHYvoN aFw9EBSF5A6E4iFjK9Y3+hv/cnd5oU+8XHM= Received: from mail.thefacebook.com ([199.201.64.23]) by m0089730.ppops.net with ESMTP id 2120uravxw-1 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Tue, 16 Feb 2016 08:17:02 -0800 Received: from localhost.localdomain (192.168.54.13) by mail.thefacebook.com (192.168.16.12) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 16 Feb 2016 08:16:58 -0800 Subject: Re: [PATCH 10/14] dns: poll card between each dns request To: Andrei Borzenkov , The development of GNU GRUB References: <1455139268-3241273-1-git-send-email-jbacik@fb.com> <1455139268-3241273-11-git-send-email-jbacik@fb.com> From: Josef Bacik Message-ID: <56C34B79.9070009@fb.com> Date: Tue, 16 Feb 2016 11:16:57 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [192.168.54.13] X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-02-16_09:, , signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.153.30 Cc: Kernel Team X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Feb 2016 16:17:12 -0000 On 02/15/2016 01:45 AM, Andrei Borzenkov wrote: > On Thu, Feb 11, 2016 at 12:21 AM, Josef Bacik wrote: >> If we have dns servers that we prefer to get AAAA records from we'll send a >> packet and immediately check data.naddresses to see if we got a response. If we >> didn't we'll then send a request for an A record, and _then_ we'll poll the >> card. So if the DNS server doesn't respond between us sending the packet and >> checking data.naddresses we'll send a request for the A record and then poll the >> card. Instead we need to make sure we poll after we issue each request to make >> sure we give the server enough time to respond to our initial request. >> >> Signed-off-by: Josef Bacik >> --- >> grub-core/net/dns.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c >> index 82a3307..86e609b 100644 >> --- a/grub-core/net/dns.c >> +++ b/grub-core/net/dns.c >> @@ -587,12 +587,12 @@ grub_net_dns_lookup (const char *name, >> grub_errno = GRUB_ERR_NONE; >> err = err2; >> } >> + grub_net_poll_cards (200, &data.stop); > > One consideration is that it will increase timeouts in case of > non-responsive servers, as now they are processed sequentially. > > But more importantly, this is still hit and miss - we rely on delivery > order which is non-deterministic. We really need to ask for all and > filter on receiving side. Two possible implementations are > > 1. Keep track of IPv4 and IPv6 answers separately; if non-preferred > answer is received, continue to wait for preferred one until timeout. > > 2. Queries for both A and AAAA in the same packet and filter out answers. > > The 2 looks better. It avoids extra timeouts (at least if we assume > that all DNS servers are equally authoritative) because as soon as we > get any response we can stop polling. > > This will also indirectly fix another reported issue as we now can > ignore any duplicate packet. > > Would you consider implementing it? > Yeah that sounds reasonable, I'll take a crack at it in a few days. Thanks, Josef