aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/tcm_fc
diff options
context:
space:
mode:
authorSasha Levin <sasha.levin@oracle.com>2013-02-27 20:06:00 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 22:10:24 -0500
commitb67bfe0d42cac56c512dd5da4b1b347a23f4b70a (patch)
tree3d465aea12b97683f26ffa38eba8744469de9997 /drivers/target/tcm_fc
parent1e142b29e210b5dfb2deeb6ce2210b60af16d2a6 (diff)
hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived list_for_each_entry(pos, head, member) The hlist ones were greedy and wanted an extra parameter: hlist_for_each_entry(tpos, pos, head, member) Why did they need an extra pos parameter? I'm not quite sure. Not only they don't really need it, it also prevents the iterator from looking exactly like the list iterator, which is unfortunate. Besides the semantic patch, there was some manual work required: - Fix up the actual hlist iterators in linux/list.h - Fix up the declaration of other iterators based on the hlist ones. - A very small amount of places were using the 'node' parameter, this was modified to use 'obj->member' instead. - Coccinelle didn't handle the hlist_for_each_entry_safe iterator properly, so those had to be fixed up manually. The semantic patch which is mostly the work of Peter Senna Tschudin is here: @@ iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host; type T; expression a,c,d,e; identifier b; statement S; @@ -T b; <+... when != b ( hlist_for_each_entry(a, - b, c, d) S | hlist_for_each_entry_continue(a, - b, c) S | hlist_for_each_entry_from(a, - b, c) S | hlist_for_each_entry_rcu(a, - b, c, d) S | hlist_for_each_entry_rcu_bh(a, - b, c, d) S | hlist_for_each_entry_continue_rcu_bh(a, - b, c) S | for_each_busy_worker(a, c, - b, d) S | ax25_uid_for_each(a, - b, c) S | ax25_for_each(a, - b, c) S | inet_bind_bucket_for_each(a, - b, c) S | sctp_for_each_hentry(a, - b, c) S | sk_for_each(a, - b, c) S | sk_for_each_rcu(a, - b, c) S | sk_for_each_from -(a, b) +(a) S + sk_for_each_from(a) S | sk_for_each_safe(a, - b, c, d) S | sk_for_each_bound(a, - b, c) S | hlist_for_each_entry_safe(a, - b, c, d, e) S | hlist_for_each_entry_continue_rcu(a, - b, c) S | nr_neigh_for_each(a, - b, c) S | nr_neigh_for_each_safe(a, - b, c, d) S | nr_node_for_each(a, - b, c) S | nr_node_for_each_safe(a, - b, c, d) S | - for_each_gfn_sp(a, c, d, b) S + for_each_gfn_sp(a, c, d) S | - for_each_gfn_indirect_valid_sp(a, c, d, b) S + for_each_gfn_indirect_valid_sp(a, c, d) S | for_each_host(a, - b, c) S | for_each_host_safe(a, - b, c, d) S | for_each_mesh_entry(a, - b, c, d) S ) ...+> [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c] [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c] [akpm@linux-foundation.org: checkpatch fixes] [akpm@linux-foundation.org: fix warnings] [akpm@linux-foudnation.org: redo intrusive kvm changes] Tested-by: Peter Senna Tschudin <peter.senna@gmail.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Cc: Wu Fengguang <fengguang.wu@intel.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Gleb Natapov <gleb@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/target/tcm_fc')
-rw-r--r--drivers/target/tcm_fc/tfc_sess.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
index 6659dd36e806..113f33598b9f 100644
--- a/drivers/target/tcm_fc/tfc_sess.c
+++ b/drivers/target/tcm_fc/tfc_sess.c
@@ -169,7 +169,6 @@ static struct ft_sess *ft_sess_get(struct fc_lport *lport, u32 port_id)
169{ 169{
170 struct ft_tport *tport; 170 struct ft_tport *tport;
171 struct hlist_head *head; 171 struct hlist_head *head;
172 struct hlist_node *pos;
173 struct ft_sess *sess; 172 struct ft_sess *sess;
174 173
175 rcu_read_lock(); 174 rcu_read_lock();
@@ -178,7 +177,7 @@ static struct ft_sess *ft_sess_get(struct fc_lport *lport, u32 port_id)
178 goto out; 177 goto out;
179 178
180 head = &tport->hash[ft_sess_hash(port_id)]; 179 head = &tport->hash[ft_sess_hash(port_id)];
181 hlist_for_each_entry_rcu(sess, pos, head, hash) { 180 hlist_for_each_entry_rcu(sess, head, hash) {
182 if (sess->port_id == port_id) { 181 if (sess->port_id == port_id) {
183 kref_get(&sess->kref); 182 kref_get(&sess->kref);
184 rcu_read_unlock(); 183 rcu_read_unlock();
@@ -201,10 +200,9 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id,
201{ 200{
202 struct ft_sess *sess; 201 struct ft_sess *sess;
203 struct hlist_head *head; 202 struct hlist_head *head;
204 struct hlist_node *pos;
205 203
206 head = &tport->hash[ft_sess_hash(port_id)]; 204 head = &tport->hash[ft_sess_hash(port_id)];
207 hlist_for_each_entry_rcu(sess, pos, head, hash) 205 hlist_for_each_entry_rcu(sess, head, hash)
208 if (sess->port_id == port_id) 206 if (sess->port_id == port_id)
209 return sess; 207 return sess;
210 208
@@ -253,11 +251,10 @@ static void ft_sess_unhash(struct ft_sess *sess)
253static struct ft_sess *ft_sess_delete(struct ft_tport *tport, u32 port_id) 251static struct ft_sess *ft_sess_delete(struct ft_tport *tport, u32 port_id)
254{ 252{
255 struct hlist_head *head; 253 struct hlist_head *head;
256 struct hlist_node *pos;
257 struct ft_sess *sess; 254 struct ft_sess *sess;
258 255
259 head = &tport->hash[ft_sess_hash(port_id)]; 256 head = &tport->hash[ft_sess_hash(port_id)];
260 hlist_for_each_entry_rcu(sess, pos, head, hash) { 257 hlist_for_each_entry_rcu(sess, head, hash) {
261 if (sess->port_id == port_id) { 258 if (sess->port_id == port_id) {
262 ft_sess_unhash(sess); 259 ft_sess_unhash(sess);
263 return sess; 260 return sess;
@@ -273,12 +270,11 @@ static struct ft_sess *ft_sess_delete(struct ft_tport *tport, u32 port_id)
273static void ft_sess_delete_all(struct ft_tport *tport) 270static void ft_sess_delete_all(struct ft_tport *tport)
274{ 271{
275 struct hlist_head *head; 272 struct hlist_head *head;
276 struct hlist_node *pos;
277 struct ft_sess *sess; 273 struct ft_sess *sess;
278 274
279 for (head = tport->hash; 275 for (head = tport->hash;
280 head < &tport->hash[FT_SESS_HASH_SIZE]; head++) { 276 head < &tport->hash[FT_SESS_HASH_SIZE]; head++) {
281 hlist_for_each_entry_rcu(sess, pos, head, hash) { 277 hlist_for_each_entry_rcu(sess, head, hash) {
282 ft_sess_unhash(sess); 278 ft_sess_unhash(sess);
283 transport_deregister_session_configfs(sess->se_sess); 279 transport_deregister_session_configfs(sess->se_sess);
284 ft_sess_put(sess); /* release from table */ 280 ft_sess_put(sess); /* release from table */