diff options
author | Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | 2006-07-10 07:44:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-10 16:24:14 -0400 |
commit | 25e206b54b9a20e63b6f5194aeebfa13d37e015c (patch) | |
tree | 3b93a095eb1237e8d74f52553b69b666e6044f7d /fs/partitions | |
parent | 7691030bc9732f7d535522dda78cfdd36716def1 (diff) |
[PATCH] partitions: let partitions inherit policy from disk
Change the partition code in fs/partitions/check.c to initialize a newly
detected partition's policy field with that of the containing block device
(see patch below).
My reasoning is that function set_disk_ro() in block/genhd.c modifies the
policy field (read-only indicator) of a disk and all contained partitions.
When a partition is detected after the call to set_disk_ro(), the policy
field of this partition will currently not inherit the disk's policy field.
This behavior poses a problem in cases where a block device can be
'logically de- and reactivated' like e.g. the s390 DASD driver because
partition detection may run after the policy field has been modified.
Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Acked-by: Al Viro <viro@ftp.linux.org.uk>
Makes-sense-to: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/partitions')
-rw-r--r-- | fs/partitions/check.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 839634026eb5..51c6a748df49 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
@@ -339,6 +339,7 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len) | |||
339 | p->start_sect = start; | 339 | p->start_sect = start; |
340 | p->nr_sects = len; | 340 | p->nr_sects = len; |
341 | p->partno = part; | 341 | p->partno = part; |
342 | p->policy = disk->policy; | ||
342 | 343 | ||
343 | if (isdigit(disk->kobj.name[strlen(disk->kobj.name)-1])) | 344 | if (isdigit(disk->kobj.name[strlen(disk->kobj.name)-1])) |
344 | snprintf(p->kobj.name,KOBJ_NAME_LEN,"%sp%d",disk->kobj.name,part); | 345 | snprintf(p->kobj.name,KOBJ_NAME_LEN,"%sp%d",disk->kobj.name,part); |