From: Srinivas Eeda <srinivas.eeda@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [patch 03/11] ocfs2/o2net: incorrect to terminate accepting connections loop upon rejecting an invalid one
Date: Fri, 24 Jan 2014 14:15:13 -0800 [thread overview]
Message-ID: <52E2E5F1.7090601@oracle.com> (raw)
In-Reply-To: <20140124215554.GC24361@wotan.suse.de>
On 01/24/2014 01:55 PM, Mark Fasheh wrote:
> On Fri, Jan 24, 2014 at 12:47:02PM -0800, akpm at linux-foundation.org wrote:
>> From: Tariq Saeed <tariq.x.saeed@oracle.com>
>> Subject: ocfs2/o2net: incorrect to terminate accepting connections loop upon rejecting an invalid one
>>
>> When o2net-accept-one() rejects an illegal connection, it terminates the
>> loop picking up the remaining queued connections. This fix will continue
>> accepting connections till the queue is emtpy.
>>
>> Addresses Orabug 17489469.
> Thanks for sending this, review comments below.
>
>
>> diff -puN fs/ocfs2/cluster/tcp.c~ocfs2-o2net-incorrect-to-terminate-accepting-connections-loop-upon-rejecting-an-invalid-one fs/ocfs2/cluster/tcp.c
>> --- a/fs/ocfs2/cluster/tcp.c~ocfs2-o2net-incorrect-to-terminate-accepting-connections-loop-upon-rejecting-an-invalid-one
>> +++ a/fs/ocfs2/cluster/tcp.c
>> @@ -1826,7 +1826,7 @@ int o2net_register_hb_callbacks(void)
>>
>> /* ------------------------------------------------------------ */
>>
>> -static int o2net_accept_one(struct socket *sock)
>> +static int o2net_accept_one(struct socket *sock, int *more)
>> {
>> int ret, slen;
>> struct sockaddr_in sin;
>> @@ -1837,6 +1837,7 @@ static int o2net_accept_one(struct socke
>> struct o2net_node *nn;
>>
>> BUG_ON(sock == NULL);
>> + *more = 0;
>> ret = sock_create_lite(sock->sk->sk_family, sock->sk->sk_type,
>> sock->sk->sk_protocol, &new_sock);
>> if (ret)
>> @@ -1848,6 +1849,7 @@ static int o2net_accept_one(struct socke
>> if (ret < 0)
>> goto out;
>>
>> + *more = 1;
>> new_sock->sk->sk_allocation = GFP_ATOMIC;
>>
>> ret = o2net_set_nodelay(new_sock);
>> @@ -1949,8 +1951,15 @@ out:
>> static void o2net_accept_many(struct work_struct *work)
>> {
>> struct socket *sock = o2net_listen_sock;
>> - while (o2net_accept_one(sock) == 0)
>> + int more;
>> + int err;
>> +
>> + for (;;) {
>> + err = o2net_accept_one(sock, &more);
>> + if (!more)
>> + break;
> We're throwing out 'err' here and trusting the variable 'more'. However, err
> could be set and more would be 0 regardless of whether there actually are
> more connections to be had. This makes more sense given when 'more' is set:
Hi Mark,
thanks for reviewing this :). Please correct me if I am wrong.
The idea was if "accept" itself fails exit the loop, otherwise continue
scanning all queued connections. For eg: if a connection request from
unknown node followed by known node happens at the same time, we can
ignore the ret value of the first connection request and still continue
accepting the next connection.
ret value appears to be of not much importance other than just for
logging or debugging purpose.
>
> if (err)
> break;
> /* only trust the value of 'more' when err == 0 */
> if (more)
> break;
>
> Thanks,
> --Mark
>
> --
> Mark Fasheh
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/ocfs2-devel
next prev parent reply other threads:[~2014-01-24 22:15 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-24 20:47 [Ocfs2-devel] [patch 03/11] ocfs2/o2net: incorrect to terminate accepting connections loop upon rejecting an invalid one akpm at linux-foundation.org
2014-01-24 21:55 ` Mark Fasheh
2014-01-24 22:15 ` Srinivas Eeda [this message]
2014-01-24 22:22 ` tariq saeed
2014-03-19 21:01 ` Andrew Morton
2014-04-08 3:07 ` Tariq Saeed
2014-04-08 19:42 ` Mark Fasheh
2014-04-08 22:39 ` Tariq Saeed
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=52E2E5F1.7090601@oracle.com \
--to=srinivas.eeda@oracle.com \
--cc=ocfs2-devel@oss.oracle.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).