diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 19:44:08 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 19:44:08 -0400 |
| commit | 0342cbcfced2ee937d7c8e1c63f3d3082da7c7dc (patch) | |
| tree | fb98291d321a50de2dfd99f9bcaa33274f0c3952 | |
| parent | 391d6276db9fbdedfbc30e1b56390414f0e55988 (diff) | |
| parent | 7f70893173b056df691b2ee7546bb44fd9abae6a (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.c | 14 | ||||
| -rw-r--r-- | block/genhd.c | 10 | ||||
| -rw-r--r-- | drivers/md/linear.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/libfc/fc_rport.c | 14 | ||||
| -rw-r--r-- | include/linux/rculist.h | 2 | ||||
| -rw-r--r-- | ipc/sem.c | 10 | ||||
| -rw-r--r-- | ipc/util.c | 16 | ||||
| -rw-r--r-- | kernel/audit_tree.c | 8 | ||||
| -rw-r--r-- | kernel/sysctl.c | 11 | ||||
| -rw-r--r-- | mm/vmalloc.c | 18 | ||||
| -rw-r--r-- | net/netfilter/xt_RATEEST.c | 8 | ||||
| -rw-r--r-- | security/device_cgroup.c | 10 | ||||
| -rw-r--r-- | security/selinux/netnode.c | 20 | ||||
| -rw-r--r-- | security/selinux/netport.c | 20 |
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 | ||
| 115 | static void sn_irq_info_free(struct rcu_head *head); | ||
| 116 | |||
| 117 | struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *sn_irq_info, | 115 | struct 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 | ||
| 183 | finish_up: | 181 | finish_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 | ||
| 341 | static 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 | |||
| 349 | void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info) | 339 | void 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 | ||
| 1021 | static 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 | ||
| 216 | static 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 | |||
| 222 | static int linear_add(mddev_t *mddev, mdk_rdev_t *rdev) | 216 | static 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 | */ | ||
| 159 | static 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. */ |
| @@ -689,12 +689,6 @@ static int count_semzcnt (struct sem_array * sma, ushort semnum) | |||
| 689 | return semzcnt; | 689 | return semzcnt; |
| 690 | } | 690 | } |
| 691 | 691 | ||
| 692 | static void free_un(struct rcu_head *head) | ||
| 693 | { | ||
| 694 | struct sem_undo *un = container_of(head, struct sem_undo, rcu); | ||
| 695 | kfree(un); | ||
| 696 | } | ||
