Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1294969 > unrolled thread

[PATCH 01/14] Bluetooth: use list_for_each_entry*

Started byGeliang Tang <geliangtang@163.com>
First post2015-12-18 16:40 +0100
Last post2015-12-20 08:20 +0100
Articles 11 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 01/14] Bluetooth: use list_for_each_entry* Geliang Tang <geliangtang@163.com> - 2015-12-18 16:40 +0100
    [PATCH 07/14] batman-adv: use list_for_each_entry_safe Geliang Tang <geliangtang@163.com> - 2015-12-18 16:40 +0100
      Re: [PATCH 07/14] batman-adv: use list_for_each_entry_safe Antonio Quartulli <a@unstable.cc> - 2015-12-21 16:10 +0100
    [PATCH 02/14] sctp: use list_for_each_entry* Geliang Tang <geliangtang@163.com> - 2015-12-18 16:40 +0100
      Re: [PATCH 02/14] sctp: use list_for_each_entry* Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> - 2015-12-18 17:00 +0100
    [PATCH 08/14] caif: use list_for_each_entry_safe Geliang Tang <geliangtang@163.com> - 2015-12-18 16:40 +0100
    [PATCH 10/14] lapb: use list_for_each_entry Geliang Tang <geliangtang@163.com> - 2015-12-18 16:40 +0100
    [PATCH 12/14] net: sched: use list_for_each_entry Geliang Tang <geliangtang@163.com> - 2015-12-18 16:40 +0100
    [PATCH 06/14] libceph: use list_for_each_entry_safe Geliang Tang <geliangtang@163.com> - 2015-12-18 16:50 +0100
    [PATCH 05/14] atm: use list_for_each_entry Geliang Tang <geliangtang@163.com> - 2015-12-18 16:50 +0100
    Re: [PATCH 01/14] Bluetooth: use list_for_each_entry* Marcel Holtmann <marcel@holtmann.org> - 2015-12-20 08:20 +0100

#1294969 — [PATCH 01/14] Bluetooth: use list_for_each_entry*

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:40 +0100
Subject[PATCH 01/14] Bluetooth: use list_for_each_entry*
Message-ID<qH5ip-7rE-3@gated-at.bofh.it>
Use list_for_each_entry*() instead of list_for_each*() to simplify
the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/bluetooth/af_bluetooth.c | 12 ++++++------
 net/bluetooth/cmtp/capi.c    |  8 ++------
 net/bluetooth/hci_core.c     |  8 +++-----
 net/bluetooth/rfcomm/core.c  | 46 ++++++++++++++------------------------------
 4 files changed, 25 insertions(+), 49 deletions(-)

diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
index cb4e8d4..955eda9 100644
--- a/net/bluetooth/af_bluetooth.c
+++ b/net/bluetooth/af_bluetooth.c
@@ -174,13 +174,13 @@ EXPORT_SYMBOL(bt_accept_unlink);
 
 struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock)
 {
-	struct list_head *p, *n;
+	struct bt_sock *s, *n;
 	struct sock *sk;
 
 	BT_DBG("parent %p", parent);
 
-	list_for_each_safe(p, n, &bt_sk(parent)->accept_q) {
-		sk = (struct sock *) list_entry(p, struct bt_sock, accept_q);
+	list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
+		sk = (struct sock *)s;
 
 		lock_sock(sk);
 
@@ -388,11 +388,11 @@ EXPORT_SYMBOL(bt_sock_stream_recvmsg);
 
 static inline unsigned int bt_accept_poll(struct sock *parent)
 {
-	struct list_head *p, *n;
+	struct bt_sock *s, *n;
 	struct sock *sk;
 
-	list_for_each_safe(p, n, &bt_sk(parent)->accept_q) {
-		sk = (struct sock *) list_entry(p, struct bt_sock, accept_q);
+	list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
+		sk = (struct sock *)s;
 		if (sk->sk_state == BT_CONNECTED ||
 		    (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags) &&
 		     sk->sk_state == BT_CONNECT2))
diff --git a/net/bluetooth/cmtp/capi.c b/net/bluetooth/cmtp/capi.c
index 9a503387..46ac686 100644
--- a/net/bluetooth/cmtp/capi.c
+++ b/net/bluetooth/cmtp/capi.c
@@ -100,10 +100,8 @@ static void cmtp_application_del(struct cmtp_session *session, struct cmtp_appli
 static struct cmtp_application *cmtp_application_get(struct cmtp_session *session, int pattern, __u16 value)
 {
 	struct cmtp_application *app;
-	struct list_head *p;
 
-	list_for_each(p, &session->applications) {
-		app = list_entry(p, struct cmtp_application, list);
+	list_for_each_entry(app, &session->applications, list) {
 		switch (pattern) {
 		case CMTP_MSGNUM:
 			if (app->msgnum == value)
@@ -511,14 +509,12 @@ static int cmtp_proc_show(struct seq_file *m, void *v)
 	struct capi_ctr *ctrl = m->private;
 	struct cmtp_session *session = ctrl->driverdata;
 	struct cmtp_application *app;
-	struct list_head *p;
 
 	seq_printf(m, "%s\n\n", cmtp_procinfo(ctrl));
 	seq_printf(m, "addr %s\n", session->name);
 	seq_printf(m, "ctrl %d\n", session->num);
 
-	list_for_each(p, &session->applications) {
-		app = list_entry(p, struct cmtp_application, list);
+	list_for_each_entry(app, &session->applications, list) {
 		seq_printf(m, "appl %d -> %d\n", app->appl, app->mapping);
 	}
 
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 9fb443a..47bcef7 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2713,12 +2713,10 @@ struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *bdaddr_list,
 
 void hci_bdaddr_list_clear(struct list_head *bdaddr_list)
 {
-	struct list_head *p, *n;
+	struct bdaddr_list *b, *n;
 
-	list_for_each_safe(p, n, bdaddr_list) {
-		struct bdaddr_list *b = list_entry(p, struct bdaddr_list, list);
-
-		list_del(p);
+	list_for_each_entry_safe(b, n, bdaddr_list, list) {
+		list_del(&b->list);
 		kfree(b);
 	}
 }
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c
index 29709fb..f7eb02f 100644
--- a/net/bluetooth/rfcomm/core.c
+++ b/net/bluetooth/rfcomm/core.c
@@ -692,11 +692,9 @@ static struct rfcomm_session *rfcomm_session_del(struct rfcomm_session *s)
 
 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
 {
-	struct rfcomm_session *s;
-	struct list_head *p, *n;
+	struct rfcomm_session *s, *n;
 	struct l2cap_chan *chan;
-	list_for_each_safe(p, n, &session_list) {
-		s = list_entry(p, struct rfcomm_session, list);
+	list_for_each_entry_safe(s, n, &session_list, list) {
 		chan = l2cap_pi(s->sock->sk)->chan;
 
 		if ((!bacmp(src, BDADDR_ANY) || !bacmp(&chan->src, src)) &&
@@ -709,16 +707,14 @@ static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
 static struct rfcomm_session *rfcomm_session_close(struct rfcomm_session *s,
 						   int err)
 {
-	struct rfcomm_dlc *d;
-	struct list_head *p, *n;
+	struct rfcomm_dlc *d, *n;
 
 	s->state = BT_CLOSED;
 
 	BT_DBG("session %p state %ld err %d", s, s->state, err);
 
 	/* Close all dlcs */
-	list_for_each_safe(p, n, &s->dlcs) {
-		d = list_entry(p, struct rfcomm_dlc, list);
+	list_for_each_entry_safe(d, n, &s->dlcs, list) {
 		d->state = BT_CLOSED;
 		__rfcomm_dlc_close(d, err);
 	}
@@ -1771,13 +1767,11 @@ static struct rfcomm_session *rfcomm_recv_frame(struct rfcomm_session *s,
 
 static void rfcomm_process_connect(struct rfcomm_session *s)
 {
-	struct rfcomm_dlc *d;
-	struct list_head *p, *n;
+	struct rfcomm_dlc *d, *n;
 
 	BT_DBG("session %p state %ld", s, s->state);
 
-	list_for_each_safe(p, n, &s->dlcs) {
-		d = list_entry(p, struct rfcomm_dlc, list);
+	list_for_each_entry_safe(d, n, &s->dlcs, list) {
 		if (d->state == BT_CONFIG) {
 			d->mtu = s->mtu;
 			if (rfcomm_check_security(d)) {
@@ -1843,14 +1837,11 @@ static int rfcomm_process_tx(struct rfcomm_dlc *d)
 
 static void rfcomm_process_dlcs(struct rfcomm_session *s)
 {
-	struct rfcomm_dlc *d;
-	struct list_head *p, *n;
+	struct rfcomm_dlc *d, *n;
 
 	BT_DBG("session %p state %ld", s, s->state);
 
-	list_for_each_safe(p, n, &s->dlcs) {
-		d = list_entry(p, struct rfcomm_dlc, list);
-
+	list_for_each_entry_safe(d, n, &s->dlcs, list) {
 		if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
 			__rfcomm_dlc_close(d, ETIMEDOUT);
 			continue;
@@ -1985,14 +1976,11 @@ static struct rfcomm_session *rfcomm_check_connection(struct rfcomm_session *s)
 
 static void rfcomm_process_sessions(void)
 {
-	struct list_head *p, *n;
+	struct rfcomm_session *s, *n;
 
 	rfcomm_lock();
 
-	list_for_each_safe(p, n, &session_list) {
-		struct rfcomm_session *s;
-		s = list_entry(p, struct rfcomm_session, list);
-
+	list_for_each_entry_safe(s, n, &session_list, list) {
 		if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) {
 			s->state = BT_DISCONN;
 			rfcomm_send_disc(s, 0);
@@ -2075,15 +2063,12 @@ failed:
 
 static void rfcomm_kill_listener(void)
 {
-	struct rfcomm_session *s;
-	struct list_head *p, *n;
+	struct rfcomm_session *s, *n;
 
 	BT_DBG("");
 
-	list_for_each_safe(p, n, &session_list) {
-		s = list_entry(p, struct rfcomm_session, list);
+	list_for_each_entry_safe(s, n, &session_list, list)
 		rfcomm_session_del(s);
-	}
 }
 
 static int rfcomm_run(void *unused)
@@ -2113,8 +2098,7 @@ static int rfcomm_run(void *unused)
 static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
 {
 	struct rfcomm_session *s;
-	struct rfcomm_dlc *d;
-	struct list_head *p, *n;
+	struct rfcomm_dlc *d, *n;
 
 	BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
 
@@ -2122,9 +2106,7 @@ static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
 	if (!s)
 		return;
 
-	list_for_each_safe(p, n, &s->dlcs) {
-		d = list_entry(p, struct rfcomm_dlc, list);
-
+	list_for_each_entry_safe(d, n, &s->dlcs, list) {
 		if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) {
 			rfcomm_dlc_clear_timer(d);
 			if (status || encrypt == 0x00) {
-- 
2.5.0


--
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/

[toc] | [next] | [standalone]


#1294974 — [PATCH 07/14] batman-adv: use list_for_each_entry_safe

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:40 +0100
Subject[PATCH 07/14] batman-adv: use list_for_each_entry_safe
Message-ID<qH5iq-7rE-39@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry_safe() instead of list_for_each_safe() to
simplify the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/batman-adv/icmp_socket.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c
index bcabb5e..841239c 100644
--- a/net/batman-adv/icmp_socket.c
+++ b/net/batman-adv/icmp_socket.c
@@ -104,25 +104,21 @@ static int batadv_socket_open(struct inode *inode, struct file *file)
 
 static int batadv_socket_release(struct inode *inode, struct file *file)
 {
-	struct batadv_socket_client *socket_client = file->private_data;
-	struct batadv_socket_packet *socket_packet;
-	struct list_head *list_pos, *list_pos_tmp;
+	struct batadv_socket_client *client = file->private_data;
+	struct batadv_socket_packet *packet, *tmp;
 
-	spin_lock_bh(&socket_client->lock);
+	spin_lock_bh(&client->lock);
 
 	/* for all packets in the queue ... */
-	list_for_each_safe(list_pos, list_pos_tmp, &socket_client->queue_list) {
-		socket_packet = list_entry(list_pos,
-					   struct batadv_socket_packet, list);
-
-		list_del(list_pos);
-		kfree(socket_packet);
+	list_for_each_entry_safe(packet, tmp, &client->queue_list, list) {
+		list_del(&packet->list);
+		kfree(packet);
 	}
 
-	batadv_socket_client_hash[socket_client->index] = NULL;
-	spin_unlock_bh(&socket_client->lock);
+	batadv_socket_client_hash[client->index] = NULL;
+	spin_unlock_bh(&client->lock);
 
-	kfree(socket_client);
+	kfree(client);
 	module_put(THIS_MODULE);
 
 	return 0;
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1296030 — Re: [PATCH 07/14] batman-adv: use list_for_each_entry_safe

FromAntonio Quartulli <a@unstable.cc>
Date2015-12-21 16:10 +0100
SubjectRe: [PATCH 07/14] batman-adv: use list_for_each_entry_safe
Message-ID<qIag2-84I-25@gated-at.bofh.it>
In reply to#1294974

[Multipart message — attachments visible in raw view] — view raw

Hi Geliang,

>  static int batadv_socket_release(struct inode *inode, struct file *file)
>  {
> -	struct batadv_socket_client *socket_client = file->private_data;
> -	struct batadv_socket_packet *socket_packet;
> -	struct list_head *list_pos, *list_pos_tmp;
> +	struct batadv_socket_client *client = file->private_data;
> +	struct batadv_socket_packet *packet, *tmp;
>  

[...]


> +	list_for_each_entry_safe(packet, tmp, &client->queue_list, list) {

I guess you renamed those variables to make sure that the statement
above would fit in 80 chars.. in that case the patch looks good.


Acked-by: Antonio Quartulli <a@unstable.cc>


-- 
Antonio Quartulli

[toc] | [prev] | [next] | [standalone]


#1294976 — [PATCH 02/14] sctp: use list_for_each_entry*

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:40 +0100
Subject[PATCH 02/14] sctp: use list_for_each_entry*
Message-ID<qH5ip-7rE-19@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry*() instead of list_for_each*() to simplify
the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/sctp/associola.c     | 24 +++++++++------------
 net/sctp/chunk.c         | 16 ++++++--------
 net/sctp/outqueue.c      | 56 +++++++++++++++++++-----------------------------
 net/sctp/protocol.c      | 12 ++++-------
 net/sctp/sm_make_chunk.c | 11 +++++-----
 net/sctp/sm_sideeffect.c |  8 +++----
 net/sctp/socket.c        |  7 ++----
 7 files changed, 52 insertions(+), 82 deletions(-)

diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 559afd0..a7065ca 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -324,8 +324,7 @@ fail:
 void sctp_association_free(struct sctp_association *asoc)
 {
 	struct sock *sk = asoc->base.sk;
-	struct sctp_transport *transport;
-	struct list_head *pos, *temp;
+	struct sctp_transport *transport, *temp;
 	int i;
 
 	/* Only real associations count against the endpoint, so
@@ -380,9 +379,9 @@ void sctp_association_free(struct sctp_association *asoc)
 	kfree(asoc->peer.peer_hmacs);
 
 	/* Release the transport structures. */
-	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
-		transport = list_entry(pos, struct sctp_transport, transports);
-		list_del_rcu(pos);
+	list_for_each_entry_safe(transport, temp,
+				 &asoc->peer.transport_addr_list, transports) {
+		list_del_rcu(&transport->transports);
 		sctp_transport_free(transport);
 	}
 
@@ -718,12 +717,10 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
 void sctp_assoc_del_peer(struct sctp_association *asoc,
 			 const union sctp_addr *addr)
 {
-	struct list_head	*pos;
-	struct list_head	*temp;
-	struct sctp_transport	*transport;
+	struct sctp_transport	*transport, *temp;
 
-	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
-		transport = list_entry(pos, struct sctp_transport, transports);
+	list_for_each_entry_safe(transport, temp,
+				 &asoc->peer.transport_addr_list, transports) {
 		if (sctp_cmp_addr_exact(addr, &transport->ipaddr)) {
 			/* Do book keeping for removing the peer and free it. */
 			sctp_assoc_rm_peer(asoc, transport);
@@ -1090,8 +1087,7 @@ void sctp_assoc_migrate(struct sctp_association *assoc, struct sock *newsk)
 void sctp_assoc_update(struct sctp_association *asoc,
 		       struct sctp_association *new)
 {
-	struct sctp_transport *trans;
-	struct list_head *pos, *temp;
+	struct sctp_transport *trans, *temp;
 
 	/* Copy in new parameters of peer. */
 	asoc->c = new->c;
@@ -1103,8 +1099,8 @@ void sctp_assoc_update(struct sctp_association *asoc,
 			 asoc->peer.i.initial_tsn, GFP_ATOMIC);
 
 	/* Remove any peer addresses not present in the new association. */
-	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
-		trans = list_entry(pos, struct sctp_transport, transports);
+	list_for_each_entry_safe(trans, temp,
+				 &asoc->peer.transport_addr_list, transports) {
 		if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr)) {
 			sctp_assoc_rm_peer(asoc, trans);
 			continue;
diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c
index a338091..b024109 100644
--- a/net/sctp/chunk.c
+++ b/net/sctp/chunk.c
@@ -86,8 +86,7 @@ void sctp_datamsg_free(struct sctp_datamsg *msg)
 /* Final destructruction of datamsg memory. */
 static void sctp_datamsg_destroy(struct sctp_datamsg *msg)
 {
-	struct list_head *pos, *temp;
-	struct sctp_chunk *chunk;
+	struct sctp_chunk *chunk, *temp;
 	struct sctp_sock *sp;
 	struct sctp_ulpevent *ev;
 	struct sctp_association *asoc = NULL;
@@ -97,9 +96,8 @@ static void sctp_datamsg_destroy(struct sctp_datamsg *msg)
 	notify = msg->send_failed ? -1 : 0;
 
 	/* Release all references. */
-	list_for_each_safe(pos, temp, &msg->chunks) {
-		list_del_init(pos);
-		chunk = list_entry(pos, struct sctp_chunk, frag_list);
+	list_for_each_entry_safe(chunk, temp, &msg->chunks, frag_list) {
+		list_del_init(&chunk->frag_list);
 		/* Check whether we _really_ need to notify. */
 		if (notify < 0) {
 			asoc = chunk->asoc;
@@ -169,9 +167,8 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
 	int max, whole, i, offset, over, err;
 	int len, first_len;
 	int max_data;
-	struct sctp_chunk *chunk;
+	struct sctp_chunk *chunk, *temp;
 	struct sctp_datamsg *msg;
-	struct list_head *pos, *temp;
 	size_t msg_len = iov_iter_count(from);
 	__u8 frag;
 
@@ -334,9 +331,8 @@ errout_chunk_free:
 	sctp_chunk_free(chunk);
 
 errout:
-	list_for_each_safe(pos, temp, &msg->chunks) {
-		list_del_init(pos);
-		chunk = list_entry(pos, struct sctp_chunk, frag_list);
+	list_for_each_entry_safe(chunk, temp, &msg->chunks, frag_list) {
+		list_del_init(&chunk->frag_list);
 		sctp_chunk_free(chunk);
 	}
 	sctp_datamsg_put(msg);
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 7e8f0a1..f72a443 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -214,7 +214,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
 static void __sctp_outq_teardown(struct sctp_outq *q)
 {
 	struct sctp_transport *transport;
-	struct list_head *lchunk, *temp;
+	struct list_head *lchunk;
 	struct sctp_chunk *chunk, *tmp;
 
 	/* Throw away unacknowledged chunks. */
@@ -230,28 +230,22 @@ static void __sctp_outq_teardown(struct sctp_outq *q)
 	}
 
 	/* Throw away chunks that have been gap ACKed.  */
-	list_for_each_safe(lchunk, temp, &q->sacked) {
-		list_del_init(lchunk);
-		chunk = list_entry(lchunk, struct sctp_chunk,
-				   transmitted_list);
+	list_for_each_entry_safe(chunk, tmp, &q->sacked, transmitted_list) {
+		list_del_init(&chunk->transmitted_list);
 		sctp_chunk_fail(chunk, q->error);
 		sctp_chunk_free(chunk);
 	}
 
 	/* Throw away any chunks in the retransmit queue. */
-	list_for_each_safe(lchunk, temp, &q->retransmit) {
-		list_del_init(lchunk);
-		chunk = list_entry(lchunk, struct sctp_chunk,
-				   transmitted_list);
+	list_for_each_entry_safe(chunk, tmp, &q->retransmit, transmitted_list) {
+		list_del_init(&chunk->transmitted_list);
 		sctp_chunk_fail(chunk, q->error);
 		sctp_chunk_free(chunk);
 	}
 
 	/* Throw away any chunks that are in the abandoned queue. */
-	list_for_each_safe(lchunk, temp, &q->abandoned) {
-		list_del_init(lchunk);
-		chunk = list_entry(lchunk, struct sctp_chunk,
-				   transmitted_list);
+	list_for_each_entry_safe(chunk, tmp, &q->abandoned, transmitted_list) {
+		list_del_init(&chunk->transmitted_list);
 		sctp_chunk_fail(chunk, q->error);
 		sctp_chunk_free(chunk);
 	}
@@ -376,18 +370,16 @@ void sctp_retransmit_mark(struct sctp_outq *q,
 			  struct sctp_transport *transport,
 			  __u8 reason)
 {
-	struct list_head *lchunk, *ltemp;
-	struct sctp_chunk *chunk;
+	struct sctp_chunk *chunk, *temp;
 
 	/* Walk through the specified transmitted queue.  */
-	list_for_each_safe(lchunk, ltemp, &transport->transmitted) {
-		chunk = list_entry(lchunk, struct sctp_chunk,
-				   transmitted_list);
-
+	list_for_each_entry_safe(chunk, temp, &transport->transmitted,
+				 transmitted_list) {
 		/* If the chunk is abandoned, move it to abandoned list. */
 		if (sctp_chunk_abandoned(chunk)) {
-			list_del_init(lchunk);
-			sctp_insert_list(&q->abandoned, lchunk);
+			list_del_init(&chunk->transmitted_list);
+			sctp_insert_list(&q->abandoned,
+					 &chunk->transmitted_list);
 
 			/* If this chunk has not been previousely acked,
 			 * stop considering it 'outstanding'.  Our peer
@@ -447,8 +439,9 @@ void sctp_retransmit_mark(struct sctp_outq *q,
 			/* Move the chunk to the retransmit queue. The chunks
 			 * on the retransmit queue are always kept in order.
 			 */
-			list_del_init(lchunk);
-			sctp_insert_list(&q->retransmit, lchunk);
+			list_del_init(&chunk->transmitted_list);
+			sctp_insert_list(&q->retransmit,
+					 &chunk->transmitted_list);
 		}
 	}
 
@@ -1125,8 +1118,8 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
 	struct sctp_association *asoc = q->asoc;
 	struct sctp_sackhdr *sack = chunk->subh.sack_hdr;
 	struct sctp_transport *transport;
-	struct sctp_chunk *tchunk = NULL;
-	struct list_head *lchunk, *transport_list, *temp;
+	struct sctp_chunk *tchunk = NULL, *temp;
+	struct list_head *transport_list;
 	sctp_sack_variable_t *frags = sack->variable;
 	__u32 sack_ctsn, ctsn, tsn;
 	__u32 highest_tsn, highest_new_tsn;
@@ -1235,9 +1228,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
 	ctsn = asoc->ctsn_ack_point;
 
 	/* Throw away stuff rotting on the sack queue.  */
-	list_for_each_safe(lchunk, temp, &q->sacked) {
-		tchunk = list_entry(lchunk, struct sctp_chunk,
-				    transmitted_list);
+	list_for_each_entry_safe(tchunk, temp, &q->sacked, transmitted_list) {
 		tsn = ntohl(tchunk->subh.data_hdr->tsn);
 		if (TSN_lte(tsn, ctsn)) {
 			list_del_init(&tchunk->transmitted_list);
@@ -1689,8 +1680,7 @@ static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn)
 	int nskips = 0;
 	int skip_pos = 0;
 	__u32 tsn;
-	struct sctp_chunk *chunk;
-	struct list_head *lchunk, *temp;
+	struct sctp_chunk *chunk, *temp;
 
 	if (!asoc->peer.prsctp_capable)
 		return;
@@ -1725,16 +1715,14 @@ static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn)
 	 * In this example, the data sender successfully advanced the
 	 * "Advanced.Peer.Ack.Point" from 102 to 104 locally.
 	 */
-	list_for_each_safe(lchunk, temp, &q->abandoned) {
-		chunk = list_entry(lchunk, struct sctp_chunk,
-					transmitted_list);
+	list_for_each_entry_safe(chunk, temp, &q->abandoned, transmitted_list) {
 		tsn = ntohl(chunk->subh.data_hdr->tsn);
 
 		/* Remove any chunks in the abandoned queue that are acked by
 		 * the ctsn.
 		 */
 		if (TSN_lte(tsn, ctsn)) {
-			list_del_init(lchunk);
+			list_del_init(&chunk->transmitted_list);
 			sctp_chunk_free(chunk);
 		} else {
 			if (TSN_lte(tsn, asoc->adv_peer_ack_point+1)) {
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index 010aced..bd41095 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -166,13 +166,11 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
 static void sctp_get_local_addr_list(struct net *net)
 {
 	struct net_device *dev;
-	struct list_head *pos;
 	struct sctp_af *af;
 
 	rcu_read_lock();
 	for_each_netdev_rcu(net, dev) {
-		list_for_each(pos, &sctp_address_families) {
-			af = list_entry(pos, struct sctp_af, list);
+		list_for_each_entry(af, &sctp_address_families, list) {
 			af->copy_addrlist(&net->sctp.local_addr_list, dev);
 		}
 	}
@@ -182,12 +180,10 @@ static void sctp_get_local_addr_list(struct net *net)
 /* Free the existing local addresses.  */
 static void sctp_free_local_addr_list(struct net *net)
 {
-	struct sctp_sockaddr_entry *addr;
-	struct list_head *pos, *temp;
+	struct sctp_sockaddr_entry *addr, *temp;
 
-	list_for_each_safe(pos, temp, &net->sctp.local_addr_list) {
-		addr = list_entry(pos, struct sctp_sockaddr_entry, list);
-		list_del(pos);
+	list_for_each_entry_safe(addr, temp, &net->sctp.local_addr_list, list) {
+		list_del(&addr->list);
 		kfree(addr);
 	}
 }
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
index 763e06a..819bbc4 100644
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -2293,8 +2293,7 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
 {
 	struct net *net = sock_net(asoc->base.sk);
 	union sctp_params param;
-	struct sctp_transport *transport;
-	struct list_head *pos, *temp;
+	struct sctp_transport *transport, *temp;
 	struct sctp_af *af;
 	union sctp_addr addr;
 	char *cookie;
@@ -2358,8 +2357,8 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
 	}
 
 	/* Walk list of transports, removing transports in the UNKNOWN state. */
-	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
-		transport = list_entry(pos, struct sctp_transport, transports);
+	list_for_each_entry_safe(transport, temp,
+				 &asoc->peer.transport_addr_list, transports) {
 		if (transport->state == SCTP_UNKNOWN) {
 			sctp_assoc_rm_peer(asoc, transport);
 		}
@@ -2461,8 +2460,8 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
 
 clean_up:
 	/* Release the transport structures. */
-	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
-		transport = list_entry(pos, struct sctp_transport, transports);
+	list_for_each_entry_safe(transport, temp,
+				 &asoc->peer.transport_addr_list, transports) {
 		if (transport->state != SCTP_ACTIVE)
 			sctp_assoc_rm_peer(asoc, transport);
 	}
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
index 05cd164..7521e56 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
@@ -953,12 +953,10 @@ static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq,
  */
 static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
 {
-	struct sctp_transport *t;
-	struct list_head *pos;
-	struct list_head *temp;
+	struct sctp_transport *t, *temp;
 
-	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
-		t = list_entry(pos, struct sctp_transport, transports);
+	list_for_each_entry_safe(t, temp, &asoc->peer.transport_addr_list,
+				 transports) {
 		if (!sctp_cmp_addr_exact(&t->ipaddr,
 					 &asoc->peer.primary_addr)) {
 			sctp_assoc_rm_peer(asoc, t);
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 106bb09..9272e7b 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -1474,8 +1474,7 @@ static void sctp_close(struct sock *sk, long timeout)
 {
 	struct net *net = sock_net(sk);
 	struct sctp_endpoint *ep;
-	struct sctp_association *asoc;
-	struct list_head *pos, *temp;
+	struct sctp_association *asoc, *temp;
 	unsigned int data_was_unread;
 
 	pr_debug("%s: sk:%p, timeout:%ld\n", __func__, sk, timeout);
@@ -1491,9 +1490,7 @@ static void sctp_close(struct sock *sk, long timeout)
 	data_was_unread += sctp_queue_purge_ulpevents(&sctp_sk(sk)->pd_lobby);
 
 	/* Walk all associations on an endpoint.  */
-	list_for_each_safe(pos, temp, &ep->asocs) {
-		asoc = list_entry(pos, struct sctp_association, asocs);
-
+	list_for_each_entry_safe(asoc, temp, &ep->asocs, asocs) {
 		if (sctp_style(sk, TCP)) {
 			/* A closed association can still be in the list if
 			 * it belongs to a TCP-style listening socket that is
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1294991 — Re: [PATCH 02/14] sctp: use list_for_each_entry*

FromMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Date2015-12-18 17:00 +0100
SubjectRe: [PATCH 02/14] sctp: use list_for_each_entry*
Message-ID<qH5BM-7yD-15@gated-at.bofh.it>
In reply to#1294976
On Fri, Dec 18, 2015 at 11:33:26PM +0800, Geliang Tang wrote:
> Use list_for_each_entry*() instead of list_for_each*() to simplify
> the code.
> 
> Signed-off-by: Geliang Tang <geliangtang@163.com>

Nice, thanks
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

> ---
>  net/sctp/associola.c     | 24 +++++++++------------
>  net/sctp/chunk.c         | 16 ++++++--------
>  net/sctp/outqueue.c      | 56 +++++++++++++++++++-----------------------------
>  net/sctp/protocol.c      | 12 ++++-------
>  net/sctp/sm_make_chunk.c | 11 +++++-----
>  net/sctp/sm_sideeffect.c |  8 +++----
>  net/sctp/socket.c        |  7 ++----
>  7 files changed, 52 insertions(+), 82 deletions(-)
> 
> diff --git a/net/sctp/associola.c b/net/sctp/associola.c
> index 559afd0..a7065ca 100644
> --- a/net/sctp/associola.c
> +++ b/net/sctp/associola.c
> @@ -324,8 +324,7 @@ fail:
>  void sctp_association_free(struct sctp_association *asoc)
>  {
>  	struct sock *sk = asoc->base.sk;
> -	struct sctp_transport *transport;
> -	struct list_head *pos, *temp;
> +	struct sctp_transport *transport, *temp;
>  	int i;
>  
>  	/* Only real associations count against the endpoint, so
> @@ -380,9 +379,9 @@ void sctp_association_free(struct sctp_association *asoc)
>  	kfree(asoc->peer.peer_hmacs);
>  
>  	/* Release the transport structures. */
> -	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
> -		transport = list_entry(pos, struct sctp_transport, transports);
> -		list_del_rcu(pos);
> +	list_for_each_entry_safe(transport, temp,
> +				 &asoc->peer.transport_addr_list, transports) {
> +		list_del_rcu(&transport->transports);
>  		sctp_transport_free(transport);
>  	}
>  
> @@ -718,12 +717,10 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
>  void sctp_assoc_del_peer(struct sctp_association *asoc,
>  			 const union sctp_addr *addr)
>  {
> -	struct list_head	*pos;
> -	struct list_head	*temp;
> -	struct sctp_transport	*transport;
> +	struct sctp_transport	*transport, *temp;
>  
> -	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
> -		transport = list_entry(pos, struct sctp_transport, transports);
> +	list_for_each_entry_safe(transport, temp,
> +				 &asoc->peer.transport_addr_list, transports) {
>  		if (sctp_cmp_addr_exact(addr, &transport->ipaddr)) {
>  			/* Do book keeping for removing the peer and free it. */
>  			sctp_assoc_rm_peer(asoc, transport);
> @@ -1090,8 +1087,7 @@ void sctp_assoc_migrate(struct sctp_association *assoc, struct sock *newsk)
>  void sctp_assoc_update(struct sctp_association *asoc,
>  		       struct sctp_association *new)
>  {
> -	struct sctp_transport *trans;
> -	struct list_head *pos, *temp;
> +	struct sctp_transport *trans, *temp;
>  
>  	/* Copy in new parameters of peer. */
>  	asoc->c = new->c;
> @@ -1103,8 +1099,8 @@ void sctp_assoc_update(struct sctp_association *asoc,
>  			 asoc->peer.i.initial_tsn, GFP_ATOMIC);
>  
>  	/* Remove any peer addresses not present in the new association. */
> -	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
> -		trans = list_entry(pos, struct sctp_transport, transports);
> +	list_for_each_entry_safe(trans, temp,
> +				 &asoc->peer.transport_addr_list, transports) {
>  		if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr)) {
>  			sctp_assoc_rm_peer(asoc, trans);
>  			continue;
> diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c
> index a338091..b024109 100644
> --- a/net/sctp/chunk.c
> +++ b/net/sctp/chunk.c
> @@ -86,8 +86,7 @@ void sctp_datamsg_free(struct sctp_datamsg *msg)
>  /* Final destructruction of datamsg memory. */
>  static void sctp_datamsg_destroy(struct sctp_datamsg *msg)
>  {
> -	struct list_head *pos, *temp;
> -	struct sctp_chunk *chunk;
> +	struct sctp_chunk *chunk, *temp;
>  	struct sctp_sock *sp;
>  	struct sctp_ulpevent *ev;
>  	struct sctp_association *asoc = NULL;
> @@ -97,9 +96,8 @@ static void sctp_datamsg_destroy(struct sctp_datamsg *msg)
>  	notify = msg->send_failed ? -1 : 0;
>  
>  	/* Release all references. */
> -	list_for_each_safe(pos, temp, &msg->chunks) {
> -		list_del_init(pos);
> -		chunk = list_entry(pos, struct sctp_chunk, frag_list);
> +	list_for_each_entry_safe(chunk, temp, &msg->chunks, frag_list) {
> +		list_del_init(&chunk->frag_list);
>  		/* Check whether we _really_ need to notify. */
>  		if (notify < 0) {
>  			asoc = chunk->asoc;
> @@ -169,9 +167,8 @@ struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *asoc,
>  	int max, whole, i, offset, over, err;
>  	int len, first_len;
>  	int max_data;
> -	struct sctp_chunk *chunk;
> +	struct sctp_chunk *chunk, *temp;
>  	struct sctp_datamsg *msg;
> -	struct list_head *pos, *temp;
>  	size_t msg_len = iov_iter_count(from);
>  	__u8 frag;
>  
> @@ -334,9 +331,8 @@ errout_chunk_free:
>  	sctp_chunk_free(chunk);
>  
>  errout:
> -	list_for_each_safe(pos, temp, &msg->chunks) {
> -		list_del_init(pos);
> -		chunk = list_entry(pos, struct sctp_chunk, frag_list);
> +	list_for_each_entry_safe(chunk, temp, &msg->chunks, frag_list) {
> +		list_del_init(&chunk->frag_list);
>  		sctp_chunk_free(chunk);
>  	}
>  	sctp_datamsg_put(msg);
> diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
> index 7e8f0a1..f72a443 100644
> --- a/net/sctp/outqueue.c
> +++ b/net/sctp/outqueue.c
> @@ -214,7 +214,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
>  static void __sctp_outq_teardown(struct sctp_outq *q)
>  {
>  	struct sctp_transport *transport;
> -	struct list_head *lchunk, *temp;
> +	struct list_head *lchunk;
>  	struct sctp_chunk *chunk, *tmp;
>  
>  	/* Throw away unacknowledged chunks. */
> @@ -230,28 +230,22 @@ static void __sctp_outq_teardown(struct sctp_outq *q)
>  	}
>  
>  	/* Throw away chunks that have been gap ACKed.  */
> -	list_for_each_safe(lchunk, temp, &q->sacked) {
> -		list_del_init(lchunk);
> -		chunk = list_entry(lchunk, struct sctp_chunk,
> -				   transmitted_list);
> +	list_for_each_entry_safe(chunk, tmp, &q->sacked, transmitted_list) {
> +		list_del_init(&chunk->transmitted_list);
>  		sctp_chunk_fail(chunk, q->error);
>  		sctp_chunk_free(chunk);
>  	}
>  
>  	/* Throw away any chunks in the retransmit queue. */
> -	list_for_each_safe(lchunk, temp, &q->retransmit) {
> -		list_del_init(lchunk);
> -		chunk = list_entry(lchunk, struct sctp_chunk,
> -				   transmitted_list);
> +	list_for_each_entry_safe(chunk, tmp, &q->retransmit, transmitted_list) {
> +		list_del_init(&chunk->transmitted_list);
>  		sctp_chunk_fail(chunk, q->error);
>  		sctp_chunk_free(chunk);
>  	}
>  
>  	/* Throw away any chunks that are in the abandoned queue. */
> -	list_for_each_safe(lchunk, temp, &q->abandoned) {
> -		list_del_init(lchunk);
> -		chunk = list_entry(lchunk, struct sctp_chunk,
> -				   transmitted_list);
> +	list_for_each_entry_safe(chunk, tmp, &q->abandoned, transmitted_list) {
> +		list_del_init(&chunk->transmitted_list);
>  		sctp_chunk_fail(chunk, q->error);
>  		sctp_chunk_free(chunk);
>  	}
> @@ -376,18 +370,16 @@ void sctp_retransmit_mark(struct sctp_outq *q,
>  			  struct sctp_transport *transport,
>  			  __u8 reason)
>  {
> -	struct list_head *lchunk, *ltemp;
> -	struct sctp_chunk *chunk;
> +	struct sctp_chunk *chunk, *temp;
>  
>  	/* Walk through the specified transmitted queue.  */
> -	list_for_each_safe(lchunk, ltemp, &transport->transmitted) {
> -		chunk = list_entry(lchunk, struct sctp_chunk,
> -				   transmitted_list);
> -
> +	list_for_each_entry_safe(chunk, temp, &transport->transmitted,
> +				 transmitted_list) {
>  		/* If the chunk is abandoned, move it to abandoned list. */
>  		if (sctp_chunk_abandoned(chunk)) {
> -			list_del_init(lchunk);
> -			sctp_insert_list(&q->abandoned, lchunk);
> +			list_del_init(&chunk->transmitted_list);
> +			sctp_insert_list(&q->abandoned,
> +					 &chunk->transmitted_list);
>  
>  			/* If this chunk has not been previousely acked,
>  			 * stop considering it 'outstanding'.  Our peer
> @@ -447,8 +439,9 @@ void sctp_retransmit_mark(struct sctp_outq *q,
>  			/* Move the chunk to the retransmit queue. The chunks
>  			 * on the retransmit queue are always kept in order.
>  			 */
> -			list_del_init(lchunk);
> -			sctp_insert_list(&q->retransmit, lchunk);
> +			list_del_init(&chunk->transmitted_list);
> +			sctp_insert_list(&q->retransmit,
> +					 &chunk->transmitted_list);
>  		}
>  	}
>  
> @@ -1125,8 +1118,8 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
>  	struct sctp_association *asoc = q->asoc;
>  	struct sctp_sackhdr *sack = chunk->subh.sack_hdr;
>  	struct sctp_transport *transport;
> -	struct sctp_chunk *tchunk = NULL;
> -	struct list_head *lchunk, *transport_list, *temp;
> +	struct sctp_chunk *tchunk = NULL, *temp;
> +	struct list_head *transport_list;
>  	sctp_sack_variable_t *frags = sack->variable;
>  	__u32 sack_ctsn, ctsn, tsn;
>  	__u32 highest_tsn, highest_new_tsn;
> @@ -1235,9 +1228,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
>  	ctsn = asoc->ctsn_ack_point;
>  
>  	/* Throw away stuff rotting on the sack queue.  */
> -	list_for_each_safe(lchunk, temp, &q->sacked) {
> -		tchunk = list_entry(lchunk, struct sctp_chunk,
> -				    transmitted_list);
> +	list_for_each_entry_safe(tchunk, temp, &q->sacked, transmitted_list) {
>  		tsn = ntohl(tchunk->subh.data_hdr->tsn);
>  		if (TSN_lte(tsn, ctsn)) {
>  			list_del_init(&tchunk->transmitted_list);
> @@ -1689,8 +1680,7 @@ static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn)
>  	int nskips = 0;
>  	int skip_pos = 0;
>  	__u32 tsn;
> -	struct sctp_chunk *chunk;
> -	struct list_head *lchunk, *temp;
> +	struct sctp_chunk *chunk, *temp;
>  
>  	if (!asoc->peer.prsctp_capable)
>  		return;
> @@ -1725,16 +1715,14 @@ static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn)
>  	 * In this example, the data sender successfully advanced the
>  	 * "Advanced.Peer.Ack.Point" from 102 to 104 locally.
>  	 */
> -	list_for_each_safe(lchunk, temp, &q->abandoned) {
> -		chunk = list_entry(lchunk, struct sctp_chunk,
> -					transmitted_list);
> +	list_for_each_entry_safe(chunk, temp, &q->abandoned, transmitted_list) {
>  		tsn = ntohl(chunk->subh.data_hdr->tsn);
>  
>  		/* Remove any chunks in the abandoned queue that are acked by
>  		 * the ctsn.
>  		 */
>  		if (TSN_lte(tsn, ctsn)) {
> -			list_del_init(lchunk);
> +			list_del_init(&chunk->transmitted_list);
>  			sctp_chunk_free(chunk);
>  		} else {
>  			if (TSN_lte(tsn, asoc->adv_peer_ack_point+1)) {
> diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
> index 010aced..bd41095 100644
> --- a/net/sctp/protocol.c
> +++ b/net/sctp/protocol.c
> @@ -166,13 +166,11 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
>  static void sctp_get_local_addr_list(struct net *net)
>  {
>  	struct net_device *dev;
> -	struct list_head *pos;
>  	struct sctp_af *af;
>  
>  	rcu_read_lock();
>  	for_each_netdev_rcu(net, dev) {
> -		list_for_each(pos, &sctp_address_families) {
> -			af = list_entry(pos, struct sctp_af, list);
> +		list_for_each_entry(af, &sctp_address_families, list) {
>  			af->copy_addrlist(&net->sctp.local_addr_list, dev);
>  		}
>  	}
> @@ -182,12 +180,10 @@ static void sctp_get_local_addr_list(struct net *net)
>  /* Free the existing local addresses.  */
>  static void sctp_free_local_addr_list(struct net *net)
>  {
> -	struct sctp_sockaddr_entry *addr;
> -	struct list_head *pos, *temp;
> +	struct sctp_sockaddr_entry *addr, *temp;
>  
> -	list_for_each_safe(pos, temp, &net->sctp.local_addr_list) {
> -		addr = list_entry(pos, struct sctp_sockaddr_entry, list);
> -		list_del(pos);
> +	list_for_each_entry_safe(addr, temp, &net->sctp.local_addr_list, list) {
> +		list_del(&addr->list);
>  		kfree(addr);
>  	}
>  }
> diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
> index 763e06a..819bbc4 100644
> --- a/net/sctp/sm_make_chunk.c
> +++ b/net/sctp/sm_make_chunk.c
> @@ -2293,8 +2293,7 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
>  {
>  	struct net *net = sock_net(asoc->base.sk);
>  	union sctp_params param;
> -	struct sctp_transport *transport;
> -	struct list_head *pos, *temp;
> +	struct sctp_transport *transport, *temp;
>  	struct sctp_af *af;
>  	union sctp_addr addr;
>  	char *cookie;
> @@ -2358,8 +2357,8 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
>  	}
>  
>  	/* Walk list of transports, removing transports in the UNKNOWN state. */
> -	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
> -		transport = list_entry(pos, struct sctp_transport, transports);
> +	list_for_each_entry_safe(transport, temp,
> +				 &asoc->peer.transport_addr_list, transports) {
>  		if (transport->state == SCTP_UNKNOWN) {
>  			sctp_assoc_rm_peer(asoc, transport);
>  		}
> @@ -2461,8 +2460,8 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
>  
>  clean_up:
>  	/* Release the transport structures. */
> -	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
> -		transport = list_entry(pos, struct sctp_transport, transports);
> +	list_for_each_entry_safe(transport, temp,
> +				 &asoc->peer.transport_addr_list, transports) {
>  		if (transport->state != SCTP_ACTIVE)
>  			sctp_assoc_rm_peer(asoc, transport);
>  	}
> diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
> index 05cd164..7521e56 100644
> --- a/net/sctp/sm_sideeffect.c
> +++ b/net/sctp/sm_sideeffect.c
> @@ -953,12 +953,10 @@ static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq,
>   */
>  static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
>  {
> -	struct sctp_transport *t;
> -	struct list_head *pos;
> -	struct list_head *temp;
> +	struct sctp_transport *t, *temp;
>  
> -	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
> -		t = list_entry(pos, struct sctp_transport, transports);
> +	list_for_each_entry_safe(t, temp, &asoc->peer.transport_addr_list,
> +				 transports) {
>  		if (!sctp_cmp_addr_exact(&t->ipaddr,
>  					 &asoc->peer.primary_addr)) {
>  			sctp_assoc_rm_peer(asoc, t);
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index 106bb09..9272e7b 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -1474,8 +1474,7 @@ static void sctp_close(struct sock *sk, long timeout)
>  {
>  	struct net *net = sock_net(sk);
>  	struct sctp_endpoint *ep;
> -	struct sctp_association *asoc;
> -	struct list_head *pos, *temp;
> +	struct sctp_association *asoc, *temp;
>  	unsigned int data_was_unread;
>  
>  	pr_debug("%s: sk:%p, timeout:%ld\n", __func__, sk, timeout);
> @@ -1491,9 +1490,7 @@ static void sctp_close(struct sock *sk, long timeout)
>  	data_was_unread += sctp_queue_purge_ulpevents(&sctp_sk(sk)->pd_lobby);
>  
>  	/* Walk all associations on an endpoint.  */
> -	list_for_each_safe(pos, temp, &ep->asocs) {
> -		asoc = list_entry(pos, struct sctp_association, asocs);
> -
> +	list_for_each_entry_safe(asoc, temp, &ep->asocs, asocs) {
>  		if (sctp_style(sk, TCP)) {
>  			/* A closed association can still be in the list if
>  			 * it belongs to a TCP-style listening socket that is
> -- 
> 2.5.0
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
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/

[toc] | [prev] | [next] | [standalone]


#1294978 — [PATCH 08/14] caif: use list_for_each_entry_safe

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:40 +0100
Subject[PATCH 08/14] caif: use list_for_each_entry_safe
Message-ID<qH5ir-7rE-49@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry_safe() instead of list_for_each_safe() to
simplify the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/caif/chnl_net.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
index 67a4a36..d3db77c 100644
--- a/net/caif/chnl_net.c
+++ b/net/caif/chnl_net.c
@@ -140,13 +140,10 @@ static int delete_device(struct chnl_net *dev)
 
 static void close_work(struct work_struct *work)
 {
-	struct chnl_net *dev = NULL;
-	struct list_head *list_node;
-	struct list_head *_tmp;
+	struct chnl_net *dev = NULL, *tmp;
 
 	rtnl_lock();
-	list_for_each_safe(list_node, _tmp, &chnl_net_list) {
-		dev = list_entry(list_node, struct chnl_net, list_field);
+	list_for_each_entry_safe(dev, tmp, &chnl_net_list, list_field) {
 		if (dev->state == CAIF_SHUTDOWN)
 			dev_close(dev->netdev);
 	}
@@ -535,14 +532,11 @@ static int __init chnl_init_module(void)
 
 static void __exit chnl_exit_module(void)
 {
-	struct chnl_net *dev = NULL;
-	struct list_head *list_node;
-	struct list_head *_tmp;
+	struct chnl_net *dev = NULL, *tmp;
 	rtnl_link_unregister(&ipcaif_link_ops);
 	rtnl_lock();
-	list_for_each_safe(list_node, _tmp, &chnl_net_list) {
-		dev = list_entry(list_node, struct chnl_net, list_field);
-		list_del(list_node);
+	list_for_each_entry_safe(dev, tmp, &chnl_net_list, list_field) {
+		list_del(&dev->list_field);
 		delete_device(dev);
 	}
 	rtnl_unlock();
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1294980 — [PATCH 10/14] lapb: use list_for_each_entry

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:40 +0100
Subject[PATCH 10/14] lapb: use list_for_each_entry
Message-ID<qH5iq-7rE-47@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry() instead of list_for_each() to simplify
the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/lapb/lapb_iface.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/net/lapb/lapb_iface.c b/net/lapb/lapb_iface.c
index fc60d9d..49abba7 100644
--- a/net/lapb/lapb_iface.c
+++ b/net/lapb/lapb_iface.c
@@ -86,11 +86,9 @@ static void __lapb_insert_cb(struct lapb_cb *lapb)
 
 static struct lapb_cb *__lapb_devtostruct(struct net_device *dev)
 {
-	struct list_head *entry;
 	struct lapb_cb *lapb, *use = NULL;
 
-	list_for_each(entry, &lapb_list) {
-		lapb = list_entry(entry, struct lapb_cb, node);
+	list_for_each_entry(lapb, &lapb_list, node) {
 		if (lapb->dev == dev) {
 			use = lapb;
 			break;
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1294981 — [PATCH 12/14] net: sched: use list_for_each_entry

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:40 +0100
Subject[PATCH 12/14] net: sched: use list_for_each_entry
Message-ID<qH5ir-7rE-57@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry() instead of list_for_each() to simplify
the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/sched/sch_htb.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 15ccd7f..5f7aa74 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -948,10 +948,9 @@ static unsigned int htb_drop(struct Qdisc *sch)
 	int prio;
 
 	for (prio = TC_HTB_NUMPRIO - 1; prio >= 0; prio--) {
-		struct list_head *p;
-		list_for_each(p, q->drops + prio) {
-			struct htb_class *cl = list_entry(p, struct htb_class,
-							  un.leaf.drop_list);
+		struct htb_class *cl;
+
+		list_for_each_entry(cl, q->drops + prio, un.leaf.drop_list) {
 			unsigned int len;
 			if (cl->un.leaf.q->ops->drop &&
 			    (len = cl->un.leaf.q->ops->drop(cl->un.leaf.q))) {
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1294983 — [PATCH 06/14] libceph: use list_for_each_entry_safe

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:50 +0100
Subject[PATCH 06/14] libceph: use list_for_each_entry_safe
Message-ID<qH5s5-7vm-7@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry_safe() instead of list_for_each_safe() to
simplify the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/ceph/messenger.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 9981039..c664b7f 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -3361,9 +3361,8 @@ static void ceph_msg_free(struct ceph_msg *m)
 static void ceph_msg_release(struct kref *kref)
 {
 	struct ceph_msg *m = container_of(kref, struct ceph_msg, kref);
-	LIST_HEAD(data);
-	struct list_head *links;
-	struct list_head *next;
+	LIST_HEAD(head);
+	struct ceph_msg_data *data, *next;
 
 	dout("%s %p\n", __func__, m);
 	WARN_ON(!list_empty(&m->list_head));
@@ -3376,12 +3375,9 @@ static void ceph_msg_release(struct kref *kref)
 		m->middle = NULL;
 	}
 
-	list_splice_init(&m->data, &data);
-	list_for_each_safe(links, next, &data) {
-		struct ceph_msg_data *data;
-
-		data = list_entry(links, struct ceph_msg_data, links);
-		list_del_init(links);
+	list_splice_init(&m->data, &head);
+	list_for_each_entry_safe(data, next, &head, links) {
+		list_del_init(&data->links);
 		ceph_msg_data_destroy(data);
 	}
 	m->data_length = 0;
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1294987 — [PATCH 05/14] atm: use list_for_each_entry

FromGeliang Tang <geliangtang@163.com>
Date2015-12-18 16:50 +0100
Subject[PATCH 05/14] atm: use list_for_each_entry
Message-ID<qH5s6-7vm-21@gated-at.bofh.it>
In reply to#1294969
Use list_for_each_entry() instead of list_for_each() to simplify
the code.

Signed-off-by: Geliang Tang <geliangtang@163.com>
---
 net/atm/ioctl.c     | 5 ++---
 net/atm/resources.c | 8 ++------
 2 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/net/atm/ioctl.c b/net/atm/ioctl.c
index bbd3b63..9feb293 100644
--- a/net/atm/ioctl.c
+++ b/net/atm/ioctl.c
@@ -53,7 +53,7 @@ static int do_vcc_ioctl(struct socket *sock, unsigned int cmd,
 	struct sock *sk = sock->sk;
 	struct atm_vcc *vcc;
 	int error;
-	struct list_head *pos;
+	struct atm_ioctl *ic;
 	void __user *argp = (void __user *)arg;
 
 	vcc = ATM_SD(sock);
@@ -163,8 +163,7 @@ static int do_vcc_ioctl(struct socket *sock, unsigned int cmd,
 	error = -ENOIOCTLCMD;
 
 	mutex_lock(&ioctl_mutex);
-	list_for_each(pos, &ioctl_list) {
-		struct atm_ioctl *ic = list_entry(pos, struct atm_ioctl, list);
+	list_for_each_entry(ic, &ioctl_list, list) {
 		if (try_module_get(ic->owner)) {
 			error = ic->ioctl(sock, cmd, arg);
 			module_put(ic->owner);
diff --git a/net/atm/resources.c b/net/atm/resources.c
index 0447d5d..413d919 100644
--- a/net/atm/resources.c
+++ b/net/atm/resources.c
@@ -51,10 +51,8 @@ static struct atm_dev *__alloc_atm_dev(const char *type)
 static struct atm_dev *__atm_dev_lookup(int number)
 {
 	struct atm_dev *dev;
-	struct list_head *p;
 
-	list_for_each(p, &atm_devs) {
-		dev = list_entry(p, struct atm_dev, dev_list);
+	list_for_each_entry(dev, &atm_devs, dev_list) {
 		if (dev->number == number) {
 			atm_dev_hold(dev);
 			return dev;
@@ -238,10 +236,8 @@ int atm_dev_ioctl(unsigned int cmd, void __user *arg, int compat)
 			return -ENOMEM;
 		}
 		tmp_p = tmp_buf;
-		list_for_each(p, &atm_devs) {
-			dev = list_entry(p, struct atm_dev, dev_list);
+		list_for_each_entry(dev, &atm_devs, dev_list)
 			*tmp_p++ = dev->number;
-		}
 		mutex_unlock(&atm_dev_mutex);
 		error = ((copy_to_user(buf, tmp_buf, size)) ||
 			 put_user(size, iobuf_len))
-- 
2.5.0


--
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/

[toc] | [prev] | [next] | [standalone]


#1295532

FromMarcel Holtmann <marcel@holtmann.org>
Date2015-12-20 08:20 +0100
Message-ID<qHGrD-5XC-17@gated-at.bofh.it>
In reply to#1294969
Hi Geliang,

> Use list_for_each_entry*() instead of list_for_each*() to simplify
> the code.
> 
> Signed-off-by: Geliang Tang <geliangtang@163.com>
> ---
> net/bluetooth/af_bluetooth.c | 12 ++++++------
> net/bluetooth/cmtp/capi.c    |  8 ++------
> net/bluetooth/hci_core.c     |  8 +++-----
> net/bluetooth/rfcomm/core.c  | 46 ++++++++++++++------------------------------
> 4 files changed, 25 insertions(+), 49 deletions(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel

--
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/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web