From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Dexuan Cui <decui@microsoft.com>
Cc: "gregkh\@linuxfoundation.org" <gregkh@linuxfoundation.org>,
"linux-kernel\@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"driverdev-devel\@linuxdriverproject.org"
<driverdev-devel@linuxdriverproject.org>,
"olaf\@aepfle.de" <olaf@aepfle.de>,
"apw\@canonical.com" <apw@canonical.com>,
"jasowang\@redhat.com" <jasowang@redhat.com>,
Haiyang Zhang <haiyangz@microsoft.com>
Subject: Re: [PATCH] tools: hv: ignore ENOBUFS in the KVP daemon
Date: Wed, 19 Nov 2014 14:05:12 +0100 [thread overview]
Message-ID: <87a93nfiif.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <F792CF86EFE20D4AB8064279AFBA51C613E4F3AA@SIXPRD3002MB028.064d.mgd.msft.net> (Dexuan Cui's message of "Wed, 19 Nov 2014 12:57:24 +0000")
Dexuan Cui <decui@microsoft.com> writes:
>> -----Original Message-----
>> From: Vitaly Kuznetsov [mailto:vkuznets@redhat.com]
>> Sent: Wednesday, November 19, 2014 20:41 PM
>> To: Dexuan Cui
>> Cc: gregkh@linuxfoundation.org; linux-kernel@vger.kernel.org; driverdev-
>> devel@linuxdriverproject.org; olaf@aepfle.de; apw@canonical.com;
>> jasowang@redhat.com; Haiyang Zhang
>> Subject: Re: [PATCH] tools: hv: ignore ENOBUFS in the KVP daemon
>>
>> Dexuan Cui <decui@microsoft.com> writes:
>>
>> >> -----Original Message-----
>> >> From: Vitaly Kuznetsov
>> >> Sent: Wednesday, November 19, 2014 18:50 PM
>> >> To: Dexuan Cui
>> >> Cc: gregkh@linuxfoundation.org; linux-kernel@vger.kernel.org;
>> driverdev-
>> >> devel@linuxdriverproject.org; olaf@aepfle.de; apw@canonical.com;
>> >> jasowang@redhat.com; Haiyang Zhang
>> >> Subject: Re: [PATCH] tools: hv: ignore ENOBUFS in the KVP daemon
>> >>
>> >> Dexuan Cui writes:
>> >>
>> >> > Under high memory pressure and very high KVP R/W test pressure,
>> the netlink
>> >> > recvfrom() may transiently return ENOBUFS to the daemon -- we found
>> this
>> >> > during a 2-week stress test.
>> >> >
>> >> > We'd better not terminate the daemon on this failure, because a
>> typical KVP
>> >> > user can re-try the R/W and hopefully it will succeed next time.
>> >> >
>> >> > diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
>> >> > index 22b0764..9f4b303 100644
>> >> > --- a/tools/hv/hv_kvp_daemon.c
>> >> > +++ b/tools/hv/hv_kvp_daemon.c
>> >> > @@ -1559,8 +1559,15 @@ int main(int argc, char *argv[])
>> >> > addr_p, &addr_l);
>> >> >
>> >> > if (len < 0) {
>> >> > + int saved_errno = errno;
>> >> > syslog(LOG_ERR, "recvfrom failed; pid:%u
>> error:%d %s",
>> >> > addr.nl_pid, errno, strerror(errno));
>> >> > +
>> >> > + if (saved_errno == ENOBUFS) {
>> >>
>> >> is it possible to meet EAGAIN (or EWOULDBLOCK) here as well? I'd
>> suggest
>> >> we ignore these as well in such case. Ignoring ENOMEM here is doubtful,
>> >> I think. But possible.
>> >>
>> >> Vitaly
>> >
>> > I don't think EAGAIN is possible because "man recvfrom" says
>> > "If no messages are available at the socket, the receive calls wait for a
>> > message to arrive, unless the socket is nonblocking (see fcntl(2)), in
>> which
>> > case the value -1 is returned and the external variable errno is set to
>> > EAGAIN or EWOULDBLOCK".
>> >
>> > The same man page mention ENOMEM for recvmsg(), but not recvfrom().
>>
>> Ah, sorry, I though your patch patches the other place: call to
>> netlink_send() which does sendmsg() (and my
>> EAGAIN/EWOULDBLOCK/ENOMEM
>> comment was about it). It could also make sense to patch them both as I
>> think it is possible to hit these as well.
>>
>> > -- Dexuan
>> --
>> Vitaly
>
> OK, I can add this new check:
> (I'll send out the v2 tomorrow in case people have new comments)
>
Thanks!
> --- a/tools/hv/hv_kvp_daemon.c
> +++ b/tools/hv/hv_kvp_daemon.c
> @@ -1770,8 +1770,15 @@ kvp_done:
>
> len = netlink_send(fd, incoming_cn_msg);
> if (len < 0) {
> + int saved_errno = errno;
> syslog(LOG_ERR, "net_link send failed; error: %d %s", errno,
> strerror(errno));
> +
> + if (saved_errno == ENOMEM || saved_errno == EAGAIN) {
Sorry for being pushy, but it seems ENOBUFS is also possible here (at
least man sendmsg mentions it).
> + syslog(LOG_ERR, "send error: ignored");
> + continue;
> + }
> +
> exit(EXIT_FAILURE);
> }
> }
>
> Thanks,
> -- Dexuan
--
Vitaly
next prev parent reply other threads:[~2014-11-19 13:05 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-19 10:50 [PATCH] tools: hv: ignore ENOBUFS in the KVP daemon Dexuan Cui
2014-11-19 10:49 ` Vitaly Kuznetsov
2014-11-19 12:15 ` Dexuan Cui
2014-11-19 12:40 ` Vitaly Kuznetsov
2014-11-19 12:57 ` Dexuan Cui
2014-11-19 13:05 ` Vitaly Kuznetsov [this message]
2014-11-19 13:13 ` Dexuan Cui
2014-11-19 14:39 ` Vitaly Kuznetsov
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=87a93nfiif.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=apw@canonical.com \
--cc=decui@microsoft.com \
--cc=driverdev-devel@linuxdriverproject.org \
--cc=gregkh@linuxfoundation.org \
--cc=haiyangz@microsoft.com \
--cc=jasowang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=olaf@aepfle.de \
/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.