aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-07-22 19:44:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-07-22 19:44:08 -0400
commit0342cbcfced2ee937d7c8e1c63f3d3082da7c7dc (patch)
treefb98291d321a50de2dfd99f9bcaa33274f0c3952
parent391d6276db9fbdedfbc30e1b56390414f0e55988 (diff)
parent7f70893173b056df691b2ee7546bb44fd9abae6a (diff)
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: rcu: Fix wrong check in list_splice_init_rcu() net,rcu: Convert call_rcu(xt_rateest_free_rcu) to kfree_rcu() sysctl,rcu: Convert call_rcu(free_head) to kfree vmalloc,rcu: Convert call_rcu(rcu_free_vb) to kfree_rcu() vmalloc,rcu: Convert call_rcu(rcu_free_va) to kfree_rcu() ipc,rcu: Convert call_rcu(ipc_immediate_free) to kfree_rcu() ipc,rcu: Convert call_rcu(free_un) to kfree_rcu() security,rcu: Convert call_rcu(sel_netport_free) to kfree_rcu() security,rcu: Convert call_rcu(sel_netnode_free) to kfree_rcu() ia64,rcu: Convert call_rcu(sn_irq_info_free) to kfree_rcu() block,rcu: Convert call_rcu(disk_free_ptbl_rcu_cb) to kfree_rcu() scsi,rcu: Convert call_rcu(fc_rport_free_rcu) to kfree_rcu() audit_tree,rcu: Convert call_rcu(__put_tree) to kfree_rcu() security,rcu: Convert call_rcu(whitelist_item_free) to kfree_rcu() md,rcu: Convert call_rcu(free_conf) to kfree_rcu()
-rw-r--r--arch/ia64/sn/kernel/irq.c14
-rw-r--r--block/genhd.c10
-rw-r--r--drivers/md/linear.c8
-rw-r--r--drivers/scsi/libfc/fc_rport.c14
-rw-r--r--include/linux/rculist.h2
-rw-r--r--ipc/sem.c10
-rw-r--r--ipc/util.c16
-rw-r--r--kernel/audit_tree.c8
-rw-r--r--kernel/sysctl.c11
-rw-r--r--mm/vmalloc.c18
-rw-r--r--net/netfilter/xt_RATEEST.c8
-rw-r--r--security/device_cgroup.c10
-rw-r--r--security/selinux/netnode.c20
-rw-r--r--security/selinux/netport.c20
14 files changed, 21 insertions, 148 deletions
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
index 81a1f4e6bcd8..485c42d97e83 100644
--- a/arch/ia64/sn/kernel/irq.c
+++ b/arch/ia64/sn/kernel/irq.c
@@ -112,8 +112,6 @@ static void sn_ack_irq(struct irq_data *data)
112 irq_move_irq(data); 112 irq_move_irq(data);
113} 113}
114 114
115static void sn_irq_info_free(struct rcu_head *head);
116
117struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *sn_irq_info, 115struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *sn_irq_info,
118 nasid_t nasid, int slice) 116 nasid_t nasid, int slice)
119{ 117{
@@ -177,7 +175,7 @@ struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *sn_irq_info,
177 spin_lock(&sn_irq_info_lock); 175 spin_lock(&sn_irq_info_lock);
178 list_replace_rcu(&sn_irq_info->list, &new_irq_info->list); 176 list_replace_rcu(&sn_irq_info->list, &new_irq_info->list);
179 spin_unlock(&sn_irq_info_lock); 177 spin_unlock(&sn_irq_info_lock);
180 call_rcu(&sn_irq_info->rcu, sn_irq_info_free); 178 kfree_rcu(sn_irq_info, rcu);
181 179
182 180
183finish_up: 181finish_up:
@@ -338,14 +336,6 @@ static void unregister_intr_pda(struct sn_irq_info *sn_irq_info)
338 rcu_read_unlock(); 336 rcu_read_unlock();
339} 337}
340 338
341static void sn_irq_info_free(struct rcu_head *head)
342{
343 struct sn_irq_info *sn_irq_info;
344
345 sn_irq_info = container_of(head, struct sn_irq_info, rcu);
346 kfree(sn_irq_info);
347}
348
349void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info) 339void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
350{ 340{
351 nasid_t nasid = sn_irq_info->irq_nasid; 341 nasid_t nasid = sn_irq_info->irq_nasid;
@@ -399,7 +389,7 @@ void sn_irq_unfixup(struct pci_dev *pci_dev)
399 spin_unlock(&sn_irq_info_lock); 389 spin_unlock(&sn_irq_info_lock);
400 if (list_empty(sn_irq_lh[sn_irq_info->irq_irq])) 390 if (list_empty(sn_irq_lh[sn_irq_info->irq_irq]))
401 free_irq_vector(sn_irq_info->irq_irq); 391 free_irq_vector(sn_irq_info->irq_irq);
402 call_rcu(&sn_irq_info->rcu, sn_irq_info_free); 392 kfree_rcu(sn_irq_info, rcu);
403 pci_dev_put(pci_dev); 393 pci_dev_put(pci_dev);
404 394
405} 395}
diff --git a/block/genhd.c b/block/genhd.c
index 3608289c8ecd..6024b82e3209 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -1018,14 +1018,6 @@ static const struct attribute_group *disk_attr_groups[] = {
1018 NULL 1018 NULL
1019}; 1019};
1020 1020
1021static void disk_free_ptbl_rcu_cb(struct rcu_head *head)
1022{
1023 struct disk_part_tbl *ptbl =
1024 container_of(head, struct disk_part_tbl, rcu_head);
1025
1026 kfree(ptbl);
1027}
1028
1029/** 1021/**
1030 * disk_replace_part_tbl - replace disk->part_tbl in RCU-safe way 1022 * disk_replace_part_tbl - replace disk->part_tbl in RCU-safe way
1031 * @disk: disk to replace part_tbl for 1023 * @disk: disk to replace part_tbl for
@@ -1046,7 +1038,7 @@ static void disk_replace_part_tbl(struct gendisk *disk,
1046 1038
1047 if (old_ptbl) { 1039 if (old_ptbl) {
1048 rcu_assign_pointer(old_ptbl->last_lookup, NULL); 1040 rcu_assign_pointer(old_ptbl->last_lookup, NULL);
1049 call_rcu(&old_ptbl->rcu_head, disk_free_ptbl_rcu_cb); 1041 kfree_rcu(old_ptbl, rcu_head);
1050 } 1042 }
1051} 1043}
1052 1044
diff --git a/drivers/md/linear.c b/drivers/md/linear.c
index abfb59a61ede..6cd2c313e800 100644
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -213,12 +213,6 @@ static int linear_run (mddev_t *mddev)
213 return md_integrity_register(mddev); 213 return md_integrity_register(mddev);
214} 214}
215 215
216static void free_conf(struct rcu_head *head)
217{
218 linear_conf_t *conf = container_of(head, linear_conf_t, rcu);
219 kfree(conf);
220}
221
222static int linear_add(mddev_t *mddev, mdk_rdev_t *rdev) 216static int linear_add(mddev_t *mddev, mdk_rdev_t *rdev)
223{ 217{
224 /* Adding a drive to a linear array allows the array to grow. 218 /* Adding a drive to a linear array allows the array to grow.
@@ -247,7 +241,7 @@ static int linear_add(mddev_t *mddev, mdk_rdev_t *rdev)
247 md_set_array_sectors(mddev, linear_size(mddev, 0, 0)); 241 md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
248 set_capacity(mddev->gendisk, mddev->array_sectors); 242 set_capacity(mddev->gendisk, mddev->array_sectors);
249 revalidate_disk(mddev->gendisk); 243 revalidate_disk(mddev->gendisk);
250 call_rcu(&oldconf->rcu, free_conf); 244 kfree_rcu(oldconf, rcu);
251 return 0; 245 return 0;
252} 246}
253 247
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 49e1ccca09d5..01e13a2eb93a 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -153,18 +153,6 @@ static struct fc_rport_priv *fc_rport_create(struct fc_lport *lport,
153} 153}
154 154
155/** 155/**
156 * fc_rport_free_rcu() - Free a remote port
157 * @rcu: The rcu_head structure inside the remote port
158 */
159static void fc_rport_free_rcu(struct rcu_head *rcu)
160{
161 struct fc_rport_priv *rdata;
162
163 rdata = container_of(rcu, struct fc_rport_priv, rcu);
164 kfree(rdata);
165}
166
167/**
168 * fc_rport_destroy() - Free a remote port after last reference is released 156 * fc_rport_destroy() - Free a remote port after last reference is released
169 * @kref: The remote port's kref 157 * @kref: The remote port's kref
170 */ 158 */
@@ -173,7 +161,7 @@ static void fc_rport_destroy(struct kref *kref)
173 struct fc_rport_priv *rdata; 161 struct fc_rport_priv *rdata;
174 162
175 rdata = container_of(kref, struct fc_rport_priv, kref); 163 rdata = container_of(kref, struct fc_rport_priv, kref);
176 call_rcu(&rdata->rcu, fc_rport_free_rcu); 164 kfree_rcu(rdata, rcu);
177} 165}
178 166
179/** 167/**
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
index e3beb315517a..d079290843a9 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -183,7 +183,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
183 struct list_head *last = list->prev; 183 struct list_head *last = list->prev;
184 struct list_head *at = head->next; 184 struct list_head *at = head->next;
185 185
186 if (list_empty(head)) 186 if (list_empty(list))
187 return; 187 return;
188 188
189 /* "first" and "last" tracking list, so initialize it. */ 189 /* "first" and "last" tracking list, so initialize it. */
diff --git a/ipc/sem.c b/ipc/sem.c
index 34193ed69fbe..8b929e6a6eda 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -689,12 +689,6 @@ static int count_semzcnt (struct sem_array * sma, ushort semnum)
689 return semzcnt; 689 return semzcnt;
690} 690}
691 691
692static void free_un(struct rcu_head *head)
693{
694 struct sem_undo *un = container_of(head, struct sem_undo, rcu);
695 kfree(un);
696}