Re: [ClusterLabs] Antw: Re: Antw: Re: [Cluster-devel] DLM connection channel switch take too long time (> 5mins)
On 03/13/2018 03:09 PM, Ulrich Windl wrote: Guoqing Jiangschrieb am 13.03.2018 um 05:00 in Nachricht <87a8e0e7-63f3-2329-6598-1fa80b1b1...@suse.com>: On 03/08/2018 07:24 PM, Ulrich Windl wrote: Hi! What surprises me most is that a connect(...O_NONBLOCK) actually blocks: EINPROGRESS The socket is non-blocking and the connection cannot be com- pleted immediately. Maybe it is because that the socket is created by sock_create_kern, and O_NONBLOCK flag is not worked since __sctp_connect has the following description. /* in-kernel sockets don't generally have a file allocated to them * if all they do is call sock_create_kern(). */ if (sk->sk_socket->file) f_flags = sk->sk_socket->file->f_flags; timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK); But O_NONBLOCK is still passed to sock_sndtimeo() (unless the intention was "f_flags & ~O_NONBLOCK"). If I am not reading wrong, the O_NONBLOCK doesn't have effective above since f_flags is still 0. So, in this case, timeo is set to sk->sk_sndtimeo. In sctp_wait_for_connect you also can see nonblock is only work when timeo is set to 0. if (!*timeo_p) goto do_nonblock; Thanks, Guoqing ___ Users mailing list: Users@clusterlabs.org https://lists.clusterlabs.org/mailman/listinfo/users Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf Bugs: http://bugs.clusterlabs.org
[ClusterLabs] Antw: Re: Antw: Re: [Cluster-devel] DLM connection channel switch take too long time (> 5mins)
>>> Guoqing Jiangschrieb am 13.03.2018 um 05:00 in Nachricht <87a8e0e7-63f3-2329-6598-1fa80b1b1...@suse.com>: > > On 03/08/2018 07:24 PM, Ulrich Windl wrote: >> Hi! >> >> What surprises me most is that a connect(...O_NONBLOCK) actually blocks: >> >> EINPROGRESS >>The socket is non-blocking and the connection cannot be > com- >>pleted immediately. >> > > Maybe it is because that the socket is created by sock_create_kern, and > O_NONBLOCK flag is not worked since __sctp_connect has the following > description. > > /* in-kernel sockets don't generally have a file allocated to them > * if all they do is call sock_create_kern(). > */ > if (sk->sk_socket->file) > f_flags = sk->sk_socket->file->f_flags; > > timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK); But O_NONBLOCK is still passed to sock_sndtimeo() (unless the intention was "f_flags & ~O_NONBLOCK"). > > Thanks, > Guoqing > ___ > Users mailing list: Users@clusterlabs.org > https://lists.clusterlabs.org/mailman/listinfo/users > > Project Home: http://www.clusterlabs.org > Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf > Bugs: http://bugs.clusterlabs.org ___ Users mailing list: Users@clusterlabs.org https://lists.clusterlabs.org/mailman/listinfo/users Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf Bugs: http://bugs.clusterlabs.org