[dpdk-dev,1/3] vhost: do not generate signal when sendmsg fails

Message ID 20180306104327.14470-2-tiwei.bie@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Maxime Coquelin
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply patch file failure

Commit Message

Tiwei Bie March 6, 2018, 10:43 a.m. UTC
  Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
 lib/librte_vhost/socket.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Maxime Coquelin March 29, 2018, 12:19 p.m. UTC | #1
Hi Tiwei,

On 03/06/2018 11:43 AM, Tiwei Bie wrote:
> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>

Could you please elaborate a bit more why this is needed?
Is it fixing a real issue or just an improvement?

Thanks!
Maxime
> ---
>   lib/librte_vhost/socket.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
> index 0354740fa..d703d2114 100644
> --- a/lib/librte_vhost/socket.c
> +++ b/lib/librte_vhost/socket.c
> @@ -181,7 +181,7 @@ send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num)
>   	}
>   
>   	do {
> -		ret = sendmsg(sockfd, &msgh, 0);
> +		ret = sendmsg(sockfd, &msgh, MSG_NOSIGNAL);
>   	} while (ret < 0 && errno == EINTR);
>   
>   	if (ret < 0) {
>
  
Tiwei Bie March 29, 2018, 1:25 p.m. UTC | #2
On Thu, Mar 29, 2018 at 02:19:35PM +0200, Maxime Coquelin wrote:
> Hi Tiwei,
> 
> On 03/06/2018 11:43 AM, Tiwei Bie wrote:
> > Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> 
> Could you please elaborate a bit more why this is needed?
> Is it fixing a real issue or just an improvement?

My bad, I really should write a more useful commit log..

I saw your comments on this mail:

http://dpdk.org/ml/archives/dev/2018-March/094201.html

Thank you so much! :-)

It's fixing an issue I met when adding the vDPA support.
SIGPIPE would be generated when sending messages via a
closed slave fd, and it will terminate the process by
default. But as a library, we shouldn't crash the process
in this case, instead we just need to return with an error.
I didn't meet this issue without my vDPA related changes,
so I didn't put a fixline on it. That is to say, I'm
treating it as an improvement.

Below is the commit log for your reference:

------ START HERE ------

vhost: do not generate signal when sendmsg fails

More precisely, do not generate a SIGPIPE signal if the peer
has closed the connection. Otherwise, it will terminate the
process by default. As a library, we should avoid terminating
the application process when error happens and just need to
return with an error.

------ END HERE ------

Thanks again! :-)

Best regards,
Tiwei Bie

> 
> Thanks!
> Maxime
> > ---
> >   lib/librte_vhost/socket.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
> > index 0354740fa..d703d2114 100644
> > --- a/lib/librte_vhost/socket.c
> > +++ b/lib/librte_vhost/socket.c
> > @@ -181,7 +181,7 @@ send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num)
> >   	}
> >   	do {
> > -		ret = sendmsg(sockfd, &msgh, 0);
> > +		ret = sendmsg(sockfd, &msgh, MSG_NOSIGNAL);
> >   	} while (ret < 0 && errno == EINTR);
> >   	if (ret < 0) {
> >
  
Maxime Coquelin March 29, 2018, 1:41 p.m. UTC | #3
On 03/29/2018 03:25 PM, Tiwei Bie wrote:
> On Thu, Mar 29, 2018 at 02:19:35PM +0200, Maxime Coquelin wrote:
>> Hi Tiwei,
>>
>> On 03/06/2018 11:43 AM, Tiwei Bie wrote:
>>> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
>>
>> Could you please elaborate a bit more why this is needed?
>> Is it fixing a real issue or just an improvement?
> 
> My bad, I really should write a more useful commit log..
> 
> I saw your comments on this mail:
> 
> http://dpdk.org/ml/archives/dev/2018-March/094201.html
> 
> Thank you so much! :-)
> 
> It's fixing an issue I met when adding the vDPA support.
> SIGPIPE would be generated when sending messages via a
> closed slave fd, and it will terminate the process by
> default. But as a library, we shouldn't crash the process
> in this case, instead we just need to return with an error.
> I didn't meet this issue without my vDPA related changes,
> so I didn't put a fixline on it. That is to say, I'm
> treating it as an improvement.

Great, thanks for the details!
I'll apply the patch with below commit message.

Maxime
> 
> Below is the commit log for your reference:
> 
> ------ START HERE ------
> 
> vhost: do not generate signal when sendmsg fails
> 
> More precisely, do not generate a SIGPIPE signal if the peer
> has closed the connection. Otherwise, it will terminate the
> process by default. As a library, we should avoid terminating
> the application process when error happens and just need to
> return with an error.
> 
> ------ END HERE ------
> 
> Thanks again! :-)
> 
> Best regards,
> Tiwei Bie
> 
>>
>> Thanks!
>> Maxime
>>> ---
>>>    lib/librte_vhost/socket.c | 2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
>>> index 0354740fa..d703d2114 100644
>>> --- a/lib/librte_vhost/socket.c
>>> +++ b/lib/librte_vhost/socket.c
>>> @@ -181,7 +181,7 @@ send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num)
>>>    	}
>>>    	do {
>>> -		ret = sendmsg(sockfd, &msgh, 0);
>>> +		ret = sendmsg(sockfd, &msgh, MSG_NOSIGNAL);
>>>    	} while (ret < 0 && errno == EINTR);
>>>    	if (ret < 0) {
>>>
  
Maxime Coquelin March 29, 2018, 1:46 p.m. UTC | #4
On 03/06/2018 11:43 AM, Tiwei Bie wrote:
> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> ---
>   lib/librte_vhost/socket.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
> index 0354740fa..d703d2114 100644
> --- a/lib/librte_vhost/socket.c
> +++ b/lib/librte_vhost/socket.c
> @@ -181,7 +181,7 @@ send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num)
>   	}
>   
>   	do {
> -		ret = sendmsg(sockfd, &msgh, 0);
> +		ret = sendmsg(sockfd, &msgh, MSG_NOSIGNAL);
>   	} while (ret < 0 && errno == EINTR);
>   
>   	if (ret < 0) {
> 

Applied to dpdk-next-virtio/master with below commit message

------------------------------------------------------------
More precisely, do not generate a SIGPIPE signal if the peer
has closed the connection. Otherwise, it will terminate the
process by default. As a library, we should avoid terminating
the application process when error happens and just need to
return with an error.
------------------------------------------------------------

Thanks,
Maxime
  
Tiwei Bie March 29, 2018, 1:46 p.m. UTC | #5
On Thu, Mar 29, 2018 at 03:41:23PM +0200, Maxime Coquelin wrote:
> On 03/29/2018 03:25 PM, Tiwei Bie wrote:
> > On Thu, Mar 29, 2018 at 02:19:35PM +0200, Maxime Coquelin wrote:
> > > Hi Tiwei,
> > > 
> > > On 03/06/2018 11:43 AM, Tiwei Bie wrote:
> > > > Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> > > 
> > > Could you please elaborate a bit more why this is needed?
> > > Is it fixing a real issue or just an improvement?
> > 
> > My bad, I really should write a more useful commit log..
> > 
> > I saw your comments on this mail:
> > 
> > http://dpdk.org/ml/archives/dev/2018-March/094201.html
> > 
> > Thank you so much! :-)
> > 
> > It's fixing an issue I met when adding the vDPA support.
> > SIGPIPE would be generated when sending messages via a
> > closed slave fd, and it will terminate the process by
> > default. But as a library, we shouldn't crash the process
> > in this case, instead we just need to return with an error.
> > I didn't meet this issue without my vDPA related changes,
> > so I didn't put a fixline on it. That is to say, I'm
> > treating it as an improvement.
> 
> Great, thanks for the details!
> I'll apply the patch with below commit message.

Thank you very much! :-)

Best regards,
Tiwei Bie

> 
> Maxime
> > 
> > Below is the commit log for your reference:
> > 
> > ------ START HERE ------
> > 
> > vhost: do not generate signal when sendmsg fails
> > 
> > More precisely, do not generate a SIGPIPE signal if the peer
> > has closed the connection. Otherwise, it will terminate the
> > process by default. As a library, we should avoid terminating
> > the application process when error happens and just need to
> > return with an error.
> > 
> > ------ END HERE ------
> > 
> > Thanks again! :-)
> > 
> > Best regards,
> > Tiwei Bie
> > 
> > > 
> > > Thanks!
> > > Maxime
> > > > ---
> > > >    lib/librte_vhost/socket.c | 2 +-
> > > >    1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
> > > > index 0354740fa..d703d2114 100644
> > > > --- a/lib/librte_vhost/socket.c
> > > > +++ b/lib/librte_vhost/socket.c
> > > > @@ -181,7 +181,7 @@ send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num)
> > > >    	}
> > > >    	do {
> > > > -		ret = sendmsg(sockfd, &msgh, 0);
> > > > +		ret = sendmsg(sockfd, &msgh, MSG_NOSIGNAL);
> > > >    	} while (ret < 0 && errno == EINTR);
> > > >    	if (ret < 0) {
> > > >
  

Patch

diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
index 0354740fa..d703d2114 100644
--- a/lib/librte_vhost/socket.c
+++ b/lib/librte_vhost/socket.c
@@ -181,7 +181,7 @@  send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num)
 	}
 
 	do {
-		ret = sendmsg(sockfd, &msgh, 0);
+		ret = sendmsg(sockfd, &msgh, MSG_NOSIGNAL);
 	} while (ret < 0 && errno == EINTR);
 
 	if (ret < 0) {