On 01/16/2017 01:41 PM, Ying Xue wrote:
> On 01/11/2017 08:19 PM, Parthasarathy Bhuvaragan wrote:
>> In tipc_conn_sendmsg(), we first queue the request to the outqueue
>> followed by the connection state check. If the connection is not
>> connected, we should not queue this message.
>>
>> In this commit, we reject the messages if the connection state is
>> not CF_CONNECTED.
>>
>> Signed-off-by: Parthasarathy Bhuvaragan
>> <parthasarathy.bhuvara...@ericsson.com>
>
> Acked-by: Ying Xue <ying....@windriver.com>
>
> I curious what will happen if we don't make the change.

Nothing serious, we let queue it into outqueue and then throw
these queued messages at tipc_clean_outqueues() at refcount cleanup.
I always had queued messages before this patch at cleanup.

/Partha
>
>> ---
>>  net/tipc/server.c | 13 +++++++------
>>  1 file changed, 7 insertions(+), 6 deletions(-)
>>
>> diff --git a/net/tipc/server.c b/net/tipc/server.c
>> index e206b8fb826f..fa54a2760ee0 100644
>> --- a/net/tipc/server.c
>> +++ b/net/tipc/server.c
>> @@ -451,6 +451,11 @@ int tipc_conn_sendmsg(struct tipc_server *s, int
>> conid,
>>      if (!con)
>>          return -EINVAL;
>>
>> +    if (!test_bit(CF_CONNECTED, &con->flags)) {
>> +        conn_put(con);
>> +        return 0;
>> +    }
>> +
>>      e = tipc_alloc_entry(data, len);
>>      if (!e) {
>>          conn_put(con);
>> @@ -464,12 +469,8 @@ int tipc_conn_sendmsg(struct tipc_server *s, int
>> conid,
>>      list_add_tail(&e->list, &con->outqueue);
>>      spin_unlock_bh(&con->outqueue_lock);
>>
>> -    if (test_bit(CF_CONNECTED, &con->flags)) {
>> -        if (!queue_work(s->send_wq, &con->swork))
>> -            conn_put(con);
>> -    } else {
>> +    if (!queue_work(s->send_wq, &con->swork))
>>          conn_put(con);
>> -    }
>>      return 0;
>>  }
>>
>> @@ -493,7 +494,7 @@ static void tipc_send_to_sock(struct tipc_conn *con)
>>      int ret;
>>
>>      spin_lock_bh(&con->outqueue_lock);
>> -    while (1) {
>> +    while (test_bit(CF_CONNECTED, &con->flags)) {
>>          e = list_entry(con->outqueue.next, struct outqueue_entry,
>>                     list);
>>          if ((struct list_head *) e == &con->outqueue)
>>
>

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
tipc-discussion mailing list
tipc-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to