[rds-devel] [PATCH 3/5] RDS: Fix panic on unload

Andy Grover andy.grover at oracle.com
Wed May 5 18:42:21 PDT 2010


Hi, please use rds-devel at oss.oracle.com for future questions.

This bug should be reproducible by sending data to the local ib-assigned
ip. This will use the IB transport (not of the loopback transport) and
will create both an active and passive connection on the machine.
Attempting to rmmod the driver after this should reproduce the bug.

Regards -- Andy

On 05/05/2010 06:26 PM, Li Yewang wrote:
> hi Andy 
> 
>    I want to reproduce the oops problem about you fixed.
>  Do you have some reproduction program or reproduction steps about this oops problem?
>  Thanks you.
> 
> Andy Grover さん wrote:
>> Remove explicit destruction of passive connection when destroying
>> active end of the connection. The passive end is also on the
>> device's connection list, and will thus be cleaned up properly.
>> Panic was caused by trying to clean it up twice.
>>
>> Signed-off-by: Andy Grover <andy.grover at oracle.com>
>> ---
>>  net/rds/ib_rdma.c |    5 +----
>>  net/rds/iw_rdma.c |    5 +----
>>  2 files changed, 2 insertions(+), 8 deletions(-)
>>
>> diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c
>> index ef3ab5b..c5e9165 100644
>> --- a/net/rds/ib_rdma.c
>> +++ b/net/rds/ib_rdma.c
>> @@ -187,11 +187,8 @@ void __rds_ib_destroy_conns(struct list_head *list, spinlock_t *list_lock)
>>  	INIT_LIST_HEAD(list);
>>  	spin_unlock_irq(list_lock);
>>  
>> -	list_for_each_entry_safe(ic, _ic, &tmp_list, ib_node) {
>> -		if (ic->conn->c_passive)
>> -			rds_conn_destroy(ic->conn->c_passive);
>> +	list_for_each_entry_safe(ic, _ic, &tmp_list, ib_node)
>>  		rds_conn_destroy(ic->conn);
>> -	}
>>  }
>>  
>>  struct rds_ib_mr_pool *rds_ib_create_mr_pool(struct rds_ib_device *rds_ibdev)
>> diff --git a/net/rds/iw_rdma.c b/net/rds/iw_rdma.c
>> index de4a1b1..b25d785 100644
>> --- a/net/rds/iw_rdma.c
>> +++ b/net/rds/iw_rdma.c
>> @@ -245,11 +245,8 @@ void __rds_iw_destroy_conns(struct list_head *list, spinlock_t *list_lock)
>>  	INIT_LIST_HEAD(list);
>>  	spin_unlock_irq(list_lock);
>>  
>> -	list_for_each_entry_safe(ic, _ic, &tmp_list, iw_node) {
>> -		if (ic->conn->c_passive)
>> -			rds_conn_destroy(ic->conn->c_passive);
>> +	list_for_each_entry_safe(ic, _ic, &tmp_list, iw_node)
>>  		rds_conn_destroy(ic->conn);
>> -	}
>>  }
>>  
>>  static void rds_iw_set_scatterlist(struct rds_iw_scatterlist *sg,
> 
> 




More information about the rds-devel mailing list