diff options
-rw-r--r-- | drivers/mtd/mtd_blkdevs.c | 32 | ||||
-rw-r--r-- | drivers/mtd/mtdcore.c | 6 | ||||
-rw-r--r-- | drivers/mtd/mtdpart.c | 23 |
3 files changed, 19 insertions, 42 deletions
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index a0ada45672d8..9ff007c4962c 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c | |||
@@ -210,7 +210,7 @@ static struct block_device_operations mtd_blktrans_ops = { | |||
210 | int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) | 210 | int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) |
211 | { | 211 | { |
212 | struct mtd_blktrans_ops *tr = new->tr; | 212 | struct mtd_blktrans_ops *tr = new->tr; |
213 | struct list_head *this; | 213 | struct mtd_blktrans_dev *d; |
214 | int last_devnum = -1; | 214 | int last_devnum = -1; |
215 | struct gendisk *gd; | 215 | struct gendisk *gd; |
216 | 216 | ||
@@ -219,8 +219,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) | |||
219 | BUG(); | 219 | BUG(); |
220 | } | 220 | } |
221 | 221 | ||
222 | list_for_each(this, &tr->devs) { | 222 | list_for_each_entry(d, &tr->devs, list) { |
223 | struct mtd_blktrans_dev *d = list_entry(this, struct mtd_blktrans_dev, list); | ||
224 | if (new->devnum == -1) { | 223 | if (new->devnum == -1) { |
225 | /* Use first free number */ | 224 | /* Use first free number */ |
226 | if (d->devnum != last_devnum+1) { | 225 | if (d->devnum != last_devnum+1) { |
@@ -307,33 +306,24 @@ int del_mtd_blktrans_dev(struct mtd_blktrans_dev *old) | |||
307 | 306 | ||
308 | static void blktrans_notify_remove(struct mtd_info *mtd) | 307 | static void blktrans_notify_remove(struct mtd_info *mtd) |
309 | { | 308 | { |
310 | struct list_head *this, *this2, *next; | 309 | struct mtd_blktrans_ops *tr; |
311 | 310 | struct mtd_blktrans_dev *dev, *next; | |
312 | list_for_each(this, &blktrans_majors) { | ||
313 | struct mtd_blktrans_ops *tr = list_entry(this, struct mtd_blktrans_ops, list); | ||
314 | |||
315 | list_for_each_safe(this2, next, &tr->devs) { | ||
316 | struct mtd_blktrans_dev *dev = list_entry(this2, struct mtd_blktrans_dev, list); | ||
317 | 311 | ||
312 | list_for_each_entry(tr, &blktrans_majors, list) | ||
313 | list_for_each_entry_safe(dev, next, &tr->devs, list) | ||
318 | if (dev->mtd == mtd) | 314 | if (dev->mtd == mtd) |
319 | tr->remove_dev(dev); | 315 | tr->remove_dev(dev); |
320 | } | ||
321 | } | ||
322 | } | 316 | } |
323 | 317 | ||
324 | static void blktrans_notify_add(struct mtd_info *mtd) | 318 | static void blktrans_notify_add(struct mtd_info *mtd) |
325 | { | 319 | { |
326 | struct list_head *this; | 320 | struct mtd_blktrans_ops *tr; |
327 | 321 | ||
328 | if (mtd->type == MTD_ABSENT) | 322 | if (mtd->type == MTD_ABSENT) |
329 | return; | 323 | return; |
330 | 324 | ||
331 | list_for_each(this, &blktrans_majors) { | 325 | list_for_each_entry(tr, &blktrans_majors, list) |
332 | struct mtd_blktrans_ops *tr = list_entry(this, struct mtd_blktrans_ops, list); | ||
333 | |||
334 | tr->add_mtd(tr, mtd); | 326 | tr->add_mtd(tr, mtd); |
335 | } | ||
336 | |||
337 | } | 327 | } |
338 | 328 | ||
339 | static struct mtd_notifier blktrans_notifier = { | 329 | static struct mtd_notifier blktrans_notifier = { |
@@ -404,7 +394,7 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr) | |||
404 | 394 | ||
405 | int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr) | 395 | int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr) |
406 | { | 396 | { |
407 | struct list_head *this, *next; | 397 | struct mtd_blktrans_dev *dev, *next; |
408 | 398 | ||
409 | mutex_lock(&mtd_table_mutex); | 399 | mutex_lock(&mtd_table_mutex); |
410 | 400 | ||
@@ -414,10 +404,8 @@ int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr) | |||
414 | /* Remove it from the list of active majors */ | 404 | /* Remove it from the list of active majors */ |
415 | list_del(&tr->list); | 405 | list_del(&tr->list); |
416 | 406 | ||
417 | list_for_each_safe(this, next, &tr->devs) { | 407 | list_for_each_entry_safe(dev, next, &tr->devs, list) |
418 | struct mtd_blktrans_dev *dev = list_entry(this, struct mtd_blktrans_dev, list); | ||
419 | tr->remove_dev(dev); | 408 | tr->remove_dev(dev); |
420 | } | ||
421 | 409 | ||
422 | blk_cleanup_queue(tr->blkcore_priv->rq); | 410 | blk_cleanup_queue(tr->blkcore_priv->rq); |
423 | unregister_blkdev(tr->major, tr->name); | 411 | unregister_blkdev(tr->major, tr->name); |
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 4373790401d3..a9d246949820 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c | |||
@@ -70,9 +70,8 @@ int add_mtd_device(struct mtd_info *mtd) | |||
70 | DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name); | 70 | DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name); |
71 | /* No need to get a refcount on the module containing | 71 | /* No need to get a refcount on the module containing |
72 | the notifier, since we hold the mtd_table_mutex */ | 72 | the notifier, since we hold the mtd_table_mutex */ |
73 | list_for_each_entry(not, &mtd_notifiers, list) { | 73 | list_for_each_entry(not, &mtd_notifiers, list) |
74 | not->add(mtd); | 74 | not->add(mtd); |
75 | } | ||
76 | 75 | ||
77 | mutex_unlock(&mtd_table_mutex); | 76 | mutex_unlock(&mtd_table_mutex); |
78 | /* We _know_ we aren't being removed, because | 77 | /* We _know_ we aren't being removed, because |
@@ -114,9 +113,8 @@ int del_mtd_device (struct mtd_info *mtd) | |||
114 | 113 | ||
115 | /* No need to get a refcount on the module containing | 114 | /* No need to get a refcount on the module containing |
116 | the notifier, since we hold the mtd_table_mutex */ | 115 | the notifier, since we hold the mtd_table_mutex */ |
117 | list_for_each_entry(not, &mtd_notifiers, list) { | 116 | list_for_each_entry(not, &mtd_notifiers, list) |
118 | not->remove(mtd); | 117 | not->remove(mtd); |
119 | } | ||
120 | 118 | ||
121 | mtd_table[mtd->index] = NULL; | 119 | mtd_table[mtd->index] = NULL; |
122 | 120 | ||
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 11b803cc405b..56a760a736a9 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c | |||
@@ -300,22 +300,15 @@ static int part_block_markbad (struct mtd_info *mtd, loff_t ofs) | |||
300 | 300 | ||
301 | int del_mtd_partitions(struct mtd_info *master) | 301 | int del_mtd_partitions(struct mtd_info *master) |
302 | { | 302 | { |
303 | struct list_head *node; | 303 | struct mtd_part *slave, *next; |
304 | struct mtd_part *slave; | ||
305 | 304 | ||
306 | for (node = mtd_partitions.next; | 305 | list_for_each_entry_safe(slave, next, &mtd_partitions, list) |
307 | node != &mtd_partitions; | ||
308 | node = node->next) { | ||
309 | slave = list_entry(node, struct mtd_part, list); | ||
310 | if (slave->master == master) { | 306 | if (slave->master == master) { |
311 | struct list_head *prev = node->prev; | 307 | list_del(&slave->list); |
312 | __list_del(prev, node->next); | ||
313 | if(slave->registered) | 308 | if(slave->registered) |
314 | del_mtd_device(&slave->mtd); | 309 | del_mtd_device(&slave->mtd); |
315 | kfree(slave); | 310 | kfree(slave); |
316 | node = prev; | ||
317 | } | 311 | } |
318 | } | ||
319 | 312 | ||
320 | return 0; | 313 | return 0; |
321 | } | 314 | } |
@@ -511,18 +504,16 @@ static LIST_HEAD(part_parsers); | |||
511 | 504 | ||
512 | static struct mtd_part_parser *get_partition_parser(const char *name) | 505 | static struct mtd_part_parser *get_partition_parser(const char *name) |
513 | { | 506 | { |
514 | struct list_head *this; | 507 | struct mtd_part_parser *p, *ret = NULL; |
515 | void *ret = NULL; | ||
516 | spin_lock(&part_parser_lock); | ||
517 | 508 | ||
518 | list_for_each(this, &part_parsers) { | 509 | spin_lock(&part_parser_lock); |
519 | struct mtd_part_parser *p = list_entry(this, struct mtd_part_parser, list); | ||
520 | 510 | ||
511 | list_for_each_entry(p, &part_parsers, list) | ||
521 | if (!strcmp(p->name, name) && try_module_get(p->owner)) { | 512 | if (!strcmp(p->name, name) && try_module_get(p->owner)) { |
522 | ret = p; | 513 | ret = p; |
523 | break; | 514 | break; |
524 | } | 515 | } |
525 | } | 516 | |
526 | spin_unlock(&part_parser_lock); | 517 | spin_unlock(&part_parser_lock); |
527 | 518 | ||
528 | return ret; | 519 | return ret; |