git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert "Seperate read and write statistics of in_flight requests"
[safe/jmp/linux-2.6]
/
block
/
genhd.c
diff --git
a/block/genhd.c
b/block/genhd.c
index
fe7ccc0
..
5a0861d
100644
(file)
--- a/
block/genhd.c
+++ b/
block/genhd.c
@@
-901,7
+901,7
@@
static struct attribute_group disk_attr_group = {
.attrs = disk_attrs,
};
.attrs = disk_attrs,
};
-static struct attribute_group *disk_attr_groups[] = {
+static
const
struct attribute_group *disk_attr_groups[] = {
&disk_attr_group,
NULL
};
&disk_attr_group,
NULL
};
@@
-996,10
+996,20
@@
struct class block_class = {
.name = "block",
};
.name = "block",
};
+static char *block_devnode(struct device *dev, mode_t *mode)
+{
+ struct gendisk *disk = dev_to_disk(dev);
+
+ if (disk->devnode)
+ return disk->devnode(disk, mode);
+ return NULL;
+}
+
static struct device_type disk_type = {
.name = "disk",
.groups = disk_attr_groups,
.release = disk_release,
static struct device_type disk_type = {
.name = "disk",
.groups = disk_attr_groups,
.release = disk_release,
+ .devnode = block_devnode,
};
#ifdef CONFIG_PROC_FS
};
#ifdef CONFIG_PROC_FS
@@
-1205,6
+1215,16
@@
void put_disk(struct gendisk *disk)
EXPORT_SYMBOL(put_disk);
EXPORT_SYMBOL(put_disk);
+static void set_disk_ro_uevent(struct gendisk *gd, int ro)
+{
+ char event[] = "DISK_RO=1";
+ char *envp[] = { event, NULL };
+
+ if (!ro)
+ event[8] = '0';
+ kobject_uevent_env(&disk_to_dev(gd)->kobj, KOBJ_CHANGE, envp);
+}
+
void set_device_ro(struct block_device *bdev, int flag)
{
bdev->bd_part->policy = flag;
void set_device_ro(struct block_device *bdev, int flag)
{
bdev->bd_part->policy = flag;
@@
-1217,8
+1237,12
@@
void set_disk_ro(struct gendisk *disk, int flag)
struct disk_part_iter piter;
struct hd_struct *part;
struct disk_part_iter piter;
struct hd_struct *part;
- disk_part_iter_init(&piter, disk,
- DISK_PITER_INCL_EMPTY | DISK_PITER_INCL_PART0);
+ if (disk->part0.policy != flag) {
+ set_disk_ro_uevent(disk, flag);
+ disk->part0.policy = flag;
+ }
+
+ disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY);
while ((part = disk_part_iter_next(&piter)))
part->policy = flag;
disk_part_iter_exit(&piter);
while ((part = disk_part_iter_next(&piter)))
part->policy = flag;
disk_part_iter_exit(&piter);