From patchwork Fri Nov 6 13:41:31 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 37857 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id BD418B7088 for ; Sat, 7 Nov 2009 00:41:40 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757519AbZKFNl3 (ORCPT ); Fri, 6 Nov 2009 08:41:29 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757489AbZKFNl2 (ORCPT ); Fri, 6 Nov 2009 08:41:28 -0500 Received: from yop.chewa.net ([91.121.105.214]:45540 "EHLO yop.chewa.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757160AbZKFNl2 (ORCPT ); Fri, 6 Nov 2009 08:41:28 -0500 Received: by yop.chewa.net (Postfix, from userid 1007) id 33D45365; Fri, 6 Nov 2009 14:41:31 +0100 (CET) From: =?utf-8?q?R=C3=A9mi=20Denis-Courmont?= To: netdev@vger.kernel.org Cc: =?utf-8?q?R=C3=A9mi=20Denis-Courmont?= Subject: [PATCH net-next] Phonet: use rwlock for sockets list Date: Fri, 6 Nov 2009 15:41:31 +0200 Message-Id: <1257514891-18917-1-git-send-email-remi@remlab.net> X-Mailer: git-send-email 1.5.6.5 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Rémi Denis-Courmont Signed-off-by: Rémi Denis-Courmont --- net/phonet/socket.c | 24 ++++++++++++------------ 1 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/phonet/socket.c b/net/phonet/socket.c index 0412beb..ecb5f20 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c @@ -47,10 +47,10 @@ static int pn_socket_release(struct socket *sock) static struct { struct hlist_head hlist; - spinlock_t lock; + rwlock_t lock; } pnsocks = { .hlist = HLIST_HEAD_INIT, - .lock = __SPIN_LOCK_UNLOCKED(pnsocks.lock), + .lock = __RW_LOCK_UNLOCKED(pnsocks.lock), }; /* @@ -65,7 +65,7 @@ struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *spn) u16 obj = pn_sockaddr_get_object(spn); u8 res = spn->spn_resource; - spin_lock_bh(&pnsocks.lock); + read_lock_bh(&pnsocks.lock); sk_for_each(sknode, node, &pnsocks.hlist) { struct pn_sock *pn = pn_sk(sknode); @@ -91,7 +91,7 @@ struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *spn) break; } - spin_unlock_bh(&pnsocks.lock); + read_unlock_bh(&pnsocks.lock); return rval; } @@ -102,7 +102,7 @@ void pn_deliver_sock_broadcast(struct net *net, struct sk_buff *skb) struct hlist_node *node; struct sock *sknode; - spin_lock(&pnsocks.lock); + read_lock(&pnsocks.lock); sk_for_each(sknode, node, &pnsocks.hlist) { struct sk_buff *clone; @@ -117,22 +117,22 @@ void pn_deliver_sock_broadcast(struct net *net, struct sk_buff *skb) sk_receive_skb(sknode, clone, 0); } } - spin_unlock(&pnsocks.lock); + read_unlock(&pnsocks.lock); } void pn_sock_hash(struct sock *sk) { - spin_lock_bh(&pnsocks.lock); + write_lock_bh(&pnsocks.lock); sk_add_node(sk, &pnsocks.hlist); - spin_unlock_bh(&pnsocks.lock); + write_unlock_bh(&pnsocks.lock); } EXPORT_SYMBOL(pn_sock_hash); void pn_sock_unhash(struct sock *sk) { - spin_lock_bh(&pnsocks.lock); + write_lock_bh(&pnsocks.lock); sk_del_node_init(sk); - spin_unlock_bh(&pnsocks.lock); + write_unlock_bh(&pnsocks.lock); } EXPORT_SYMBOL(pn_sock_unhash); @@ -466,7 +466,7 @@ static struct sock *pn_sock_get_next(struct seq_file *seq, struct sock *sk) static void *pn_sock_seq_start(struct seq_file *seq, loff_t *pos) __acquires(pnsocks.lock) { - spin_lock_bh(&pnsocks.lock); + read_lock_bh(&pnsocks.lock); return *pos ? pn_sock_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } @@ -485,7 +485,7 @@ static void *pn_sock_seq_next(struct seq_file *seq, void *v, loff_t *pos) static void pn_sock_seq_stop(struct seq_file *seq, void *v) __releases(pnsocks.lock) { - spin_unlock_bh(&pnsocks.lock); + read_unlock_bh(&pnsocks.lock); } static int pn_sock_seq_show(struct seq_file *seq, void *v)