lkml.org 
[lkml]   [2003]   [Mar]   [11]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateTue, 11 Mar 2003 20:13:09 -0500 (EST)
FromZwane Mwaikambo <>
SubjectRe: [PATCH] (1/8) Eliminate brlock in psnap
On Tue, 11 Mar 2003, Stephen Hemminger wrote:

>  void unregister_snap_client(struct datalink_proto *proto)
>  {
> -	br_write_lock_bh(BR_NETPROTO_LOCK);
> +	static RCU_HEAD(snap_rcu);
> 
> -	list_del(&proto->node);
> -	kfree(proto);
> +	spin_lock_bh(&snap_lock);
> +	list_del_rcu(&proto->node);
> +	spin_unlock_bh(&snap_lock);
> 
> -	br_write_unlock_bh(BR_NETPROTO_LOCK);
> +	call_rcu(&snap_rcu, (void (*)(void *)) kfree, proto);
>  }

Do we need the spin_lock_bh around the list_del_rcu? But also How 
about. This way we don't change the previous characteristic of block till 
done unregistering

struct datalink_proto {
...
	struct completion registration;
};
void __unregister_snap_client(void *__proto)
{
	struct datalink_proto *proto = __proto;
	complete(&proto->registration);
}
unregister_snap_client(struct datalink_proto *proto)
{
	list_del_rcu(&proto->node);
	call_rcu(&snap_rcu, __unregister_snap_client, proto);
	wait_for_completion(&proto->registration);
	kfree(proto);
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:33    [from the cache]
©2003-2008