diff options
Diffstat (limited to 'block')
-rw-r--r-- | block/as-iosched.c | 2 | ||||
-rw-r--r-- | block/genhd.c | 53 | ||||
-rw-r--r-- | block/ll_rw_blk.c | 9 |
3 files changed, 58 insertions, 6 deletions
diff --git a/block/as-iosched.c b/block/as-iosched.c index 640aa839d63f..109e91b91ffa 100644 --- a/block/as-iosched.c +++ b/block/as-iosched.c | |||
@@ -1306,7 +1306,7 @@ static void as_exit_queue(elevator_t *e) | |||
1306 | struct as_data *ad = e->elevator_data; | 1306 | struct as_data *ad = e->elevator_data; |
1307 | 1307 | ||
1308 | del_timer_sync(&ad->antic_timer); | 1308 | del_timer_sync(&ad->antic_timer); |
1309 | kblockd_flush(); | 1309 | kblockd_flush_work(&ad->antic_work); |
1310 | 1310 | ||
1311 | BUG_ON(!list_empty(&ad->fifo_list[REQ_SYNC])); | 1311 | BUG_ON(!list_empty(&ad->fifo_list[REQ_SYNC])); |
1312 | BUG_ON(!list_empty(&ad->fifo_list[REQ_ASYNC])); | 1312 | BUG_ON(!list_empty(&ad->fifo_list[REQ_ASYNC])); |
diff --git a/block/genhd.c b/block/genhd.c index b5664440896c..93a2cf654597 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -213,6 +213,59 @@ struct gendisk *get_gendisk(dev_t dev, int *part) | |||
213 | return kobj ? to_disk(kobj) : NULL; | 213 | return kobj ? to_disk(kobj) : NULL; |
214 | } | 214 | } |
215 | 215 | ||
216 | /* | ||
217 | * print a full list of all partitions - intended for places where the root | ||
218 | * filesystem can't be mounted and thus to give the victim some idea of what | ||
219 | * went wrong | ||
220 | */ | ||
221 | void __init printk_all_partitions(void) | ||
222 | { | ||
223 | int n; | ||
224 | struct gendisk *sgp; | ||
225 | |||
226 | mutex_lock(&block_subsys_lock); | ||
227 | /* For each block device... */ | ||
228 | list_for_each_entry(sgp, &block_subsys.list, kobj.entry) { | ||
229 | char buf[BDEVNAME_SIZE]; | ||
230 | /* | ||
231 | * Don't show empty devices or things that have been surpressed | ||
232 | */ | ||
233 | if (get_capacity(sgp) == 0 || | ||
234 | (sgp->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) | ||
235 | continue; | ||
236 | |||
237 | /* | ||
238 | * Note, unlike /proc/partitions, I am showing the numbers in | ||
239 | * hex - the same format as the root= option takes. | ||
240 | */ | ||
241 | printk("%02x%02x %10llu %s", | ||
242 | sgp->major, sgp->first_minor, | ||
243 | (unsigned long long)get_capacity(sgp) >> 1, | ||
244 | disk_name(sgp, 0, buf)); | ||
245 | if (sgp->driverfs_dev != NULL && | ||
246 | sgp->driverfs_dev->driver != NULL) | ||
247 | printk(" driver: %s\n", | ||
248 | sgp->driverfs_dev->driver->name); | ||
249 | else | ||
250 | printk(" (driver?)\n"); | ||
251 | |||
252 | /* now show the partitions */ | ||
253 | for (n = 0; n < sgp->minors - 1; ++n) { | ||
254 | if (sgp->part[n] == NULL) | ||
255 | continue; | ||
256 | if (sgp->part[n]->nr_sects == 0) | ||
257 | continue; | ||
258 | printk(" %02x%02x %10llu %s\n", | ||
259 | sgp->major, n + 1 + sgp->first_minor, | ||
260 | (unsigned long long)sgp->part[n]->nr_sects >> 1, | ||
261 | disk_name(sgp, n + 1, buf)); | ||
262 | } /* partition subloop */ | ||
263 | } /* Block device loop */ | ||
264 | |||
265 | mutex_unlock(&block_subsys_lock); | ||
266 | return; | ||
267 | } | ||
268 | |||
216 | #ifdef CONFIG_PROC_FS | 269 | #ifdef CONFIG_PROC_FS |
217 | /* iterator */ | 270 | /* iterator */ |
218 | static void *part_start(struct seq_file *part, loff_t *pos) | 271 | static void *part_start(struct seq_file *part, loff_t *pos) |
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index f294f1538f1e..17e188973428 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c | |||
@@ -1712,7 +1712,6 @@ EXPORT_SYMBOL(blk_stop_queue); | |||
1712 | void blk_sync_queue(struct request_queue *q) | 1712 | void blk_sync_queue(struct request_queue *q) |
1713 | { | 1713 | { |
1714 | del_timer_sync(&q->unplug_timer); | 1714 | del_timer_sync(&q->unplug_timer); |
1715 | kblockd_flush(); | ||
1716 | } | 1715 | } |
1717 | EXPORT_SYMBOL(blk_sync_queue); | 1716 | EXPORT_SYMBOL(blk_sync_queue); |
1718 | 1717 | ||
@@ -3508,7 +3507,7 @@ static int blk_cpu_notify(struct notifier_block *self, unsigned long action, | |||
3508 | * If a CPU goes away, splice its entries to the current CPU | 3507 | * If a CPU goes away, splice its entries to the current CPU |
3509 | * and trigger a run of the softirq | 3508 | * and trigger a run of the softirq |
3510 | */ | 3509 | */ |
3511 | if (action == CPU_DEAD) { | 3510 | if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) { |
3512 | int cpu = (unsigned long) hcpu; | 3511 | int cpu = (unsigned long) hcpu; |
3513 | 3512 | ||
3514 | local_irq_disable(); | 3513 | local_irq_disable(); |
@@ -3632,11 +3631,11 @@ int kblockd_schedule_work(struct work_struct *work) | |||
3632 | 3631 | ||
3633 | EXPORT_SYMBOL(kblockd_schedule_work); | 3632 | EXPORT_SYMBOL(kblockd_schedule_work); |
3634 | 3633 | ||
3635 | void kblockd_flush(void) | 3634 | void kblockd_flush_work(struct work_struct *work) |
3636 | { | 3635 | { |
3637 | flush_workqueue(kblockd_workqueue); | 3636 | cancel_work_sync(work); |
3638 | } | 3637 | } |
3639 | EXPORT_SYMBOL(kblockd_flush); | 3638 | EXPORT_SYMBOL(kblockd_flush_work); |
3640 | 3639 | ||
3641 | int __init blk_dev_init(void) | 3640 | int __init blk_dev_init(void) |
3642 | { | 3641 | { |