From: Vlad Yasevich <vladislav.yasevich@hp.com>
To: David Miller <davem@davemloft.net>
Cc: error27@gmail.com, sri@us.ibm.com, yjwei@cn.fujitsu.com,
cascardo@holoscopio.com, linux-sctp@vger.kernel.org,
netdev@vger.kernel.org, kernel-janitors@vger.kernel.org
Subject: Re: [patch] sctp: fix test for end of loop
Date: Wed, 08 Sep 2010 20:34:46 +0000 [thread overview]
Message-ID: <4C87F366.3070002@hp.com> (raw)
In-Reply-To: <20100908.132420.179918700.davem@davemloft.net>
On 09/08/2010 04:24 PM, David Miller wrote:
> From: Dan Carpenter <error27@gmail.com>
> Date: Mon, 6 Sep 2010 14:26:39 +0200
>
>> "new_addr" is the list cursor here and it's always non-NULL.
>>
>> We're trying to test if we exited because the loop ended or we hit the
>> break statement. Really testing !found is enough so long as
>> "new_asoc->peer.transport_addr_list" is not empty and I believe it never
>> is empty at this point. So this is never really a bug with the current
>> code.
>>
>> Signed-off-by: Dan Carpenter <error27@gmail.com>
>
> If you don't mind, I still think the code is confusing after your
> patch even if the result is correct.
>
> What do you think about the following kind of approach instead?
>
> Thanks!
>
> diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
> index 8b28443..3d5bbae7 100644
> --- a/net/sctp/sm_statefuns.c
> +++ b/net/sctp/sm_statefuns.c
> @@ -1241,7 +1241,7 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc,
> sctp_cmd_seq_t *commands)
> {
> struct sctp_transport *new_addr, *addr;
> - int found;
> + int ret = 1;
>
> /* Implementor's Guide - Sectin 5.2.2
> * ...
> @@ -1254,31 +1254,28 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc,
> /* Search through all current addresses and make sure
> * we aren't adding any new ones.
> */
> - new_addr = NULL;
> - found = 0;
> -
> list_for_each_entry(new_addr, &new_asoc->peer.transport_addr_list,
> transports) {
> - found = 0;
> list_for_each_entry(addr, &asoc->peer.transport_addr_list,
> transports) {
> if (sctp_cmp_addr_exact(&new_addr->ipaddr,
> - &addr->ipaddr)) {
> - found = 1;
> - break;
> - }
> + &addr->ipaddr))
> + goto next;
> }
> - if (!found)
> - break;
> - }
>
> - /* If a new address was added, ABORT the sender. */
> - if (!found && new_addr) {
> + /* 'new_addr' could not be found in the transport address
> + * list of 'asoc', abort.
> + */
> sctp_sf_send_restart_abort(&new_addr->ipaddr, init, commands);
> + ret = 0;
> + break;
> +
> + next:
> + ;
> }
>
This would certainly make things clearer as well. It essentially does what I suggested
(moving the abort into the loop once we know we have a new address) and clean up all
the 'found' mess at the same time.
The empty goto tag would give my old profs an apoplexy though. :)
I would ack this.
-vlad
> /* Return success if all addresses were found. */
> - return found;
> + return ret;
> }
>
> /* Populate the verification/tie tags based on overlapping INIT
>
next prev parent reply other threads:[~2010-09-08 20:34 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-06 12:26 [patch] sctp: fix test for end of loop Dan Carpenter
2010-09-07 8:46 ` Shan Wei
2010-09-07 11:31 ` Dan Carpenter
2010-09-08 20:24 ` David Miller
2010-09-08 20:34 ` Vlad Yasevich [this message]
2010-09-08 20:37 ` David Miller
2010-09-08 21:04 ` [Alternative PATCH net-next] " Joe Perches
2010-09-09 13:57 ` Vlad Yasevich
2010-09-09 22:00 ` David Miller
2010-09-08 20:26 ` [patch] " Vlad Yasevich
2010-09-08 20:30 ` David Miller
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=4C87F366.3070002@hp.com \
--to=vladislav.yasevich@hp.com \
--cc=cascardo@holoscopio.com \
--cc=davem@davemloft.net \
--cc=error27@gmail.com \
--cc=kernel-janitors@vger.kernel.org \
--cc=linux-sctp@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=sri@us.ibm.com \
--cc=yjwei@cn.fujitsu.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