* gendisk handling
*/
+#include <linux/config.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/genhd.h>
#include <linux/kmod.h>
#include <linux/kobj_map.h>
#include <linux/buffer_head.h>
-#include <linux/mutex.h>
-struct subsystem block_subsys;
-static DEFINE_MUTEX(block_subsys_lock);
+static struct subsystem block_subsys;
+
+static DECLARE_MUTEX(block_subsys_sem);
/*
* Can be deleted altogether. Later.
struct blk_major_name *dp;
if (offset < BLKDEV_MAJOR_HASH_SIZE) {
- mutex_lock(&block_subsys_lock);
+ down(&block_subsys_sem);
for (dp = major_names[offset]; dp; dp = dp->next)
seq_printf(f, "%3d %s\n", dp->major, dp->name);
- mutex_unlock(&block_subsys_lock);
+ up(&block_subsys_sem);
}
}
struct blk_major_name **n, *p;
int index, ret = 0;
- mutex_lock(&block_subsys_lock);
+ down(&block_subsys_sem);
/* temporary */
if (major == 0) {
kfree(p);
}
out:
- mutex_unlock(&block_subsys_lock);
+ up(&block_subsys_sem);
return ret;
}
int index = major_to_index(major);
int ret = 0;
- mutex_lock(&block_subsys_lock);
+ down(&block_subsys_sem);
for (n = &major_names[index]; *n; n = &(*n)->next)
if ((*n)->major == major)
break;
p = *n;
*n = p->next;
}
- mutex_unlock(&block_subsys_lock);
+ up(&block_subsys_sem);
kfree(p);
return ret;
struct list_head *p;
loff_t l = *pos;
- mutex_lock(&block_subsys_lock);
+ down(&block_subsys_sem);
list_for_each(p, &block_subsys.kset.list)
if (!l--)
return list_entry(p, struct gendisk, kobj.entry);
static void part_stop(struct seq_file *part, void *v)
{
- mutex_unlock(&block_subsys_lock);
+ up(&block_subsys_sem);
}
static int show_partition(struct seq_file *part, void *v)
static int __init genhd_device_init(void)
{
- bdev_map = kobj_map_init(base_probe, &block_subsys_lock);
+ bdev_map = kobj_map_init(base_probe, &block_subsys_sem);
blk_dev_init();
subsystem_register(&block_subsys);
return 0;
disk_round_stats(disk);
preempt_enable();
return sprintf(page,
- "%8lu %8lu %8llu %8u "
- "%8lu %8lu %8llu %8u "
+ "%8u %8u %8llu %8u "
+ "%8u %8u %8llu %8u "
"%8u %8u %8u"
"\n",
disk_stat_read(disk, ios[READ]),
.uevent = block_uevent,
};
-decl_subsys(block, &ktype_block, &block_uevent_ops);
+/* declare block_subsys. */
+static decl_subsys(block, &ktype_block, &block_uevent_ops);
+
/*
* aggregate disk stat collector. Uses the same stats that the sysfs
loff_t k = *pos;
struct list_head *p;
- mutex_lock(&block_subsys_lock);
+ down(&block_subsys_sem);
list_for_each(p, &block_subsys.kset.list)
if (!k--)
return list_entry(p, struct gendisk, kobj.entry);
static void diskstats_stop(struct seq_file *part, void *v)
{
- mutex_unlock(&block_subsys_lock);
+ up(&block_subsys_sem);
}
static int diskstats_show(struct seq_file *s, void *v)
preempt_disable();
disk_round_stats(gp);
preempt_enable();
- seq_printf(s, "%4d %4d %s %lu %lu %llu %u %lu %lu %llu %u %u %u %u\n",
+ seq_printf(s, "%4d %4d %s %u %u %llu %u %u %u %llu %u %u %u %u\n",
gp->major, n + gp->first_minor, disk_name(gp, n, buf),
disk_stat_read(gp, ios[0]), disk_stat_read(gp, merges[0]),
(unsigned long long)disk_stat_read(gp, sectors[0]),