diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2008-02-07 02:33:39 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-02-07 14:31:46 -0500 |
commit | f4a00a2c06bc7802f52969cbdd19f4c680a7cd20 (patch) | |
tree | a8ee7e8a210ed01f5c9be0e981f1188f7e06bd10 /fs | |
parent | 0afc2edfada50980bec999f94dcea26ebad3dda6 (diff) |
Block: Fix whole_disk attribute bug
The "whole_disk" attribute was not properly converted in the block
device conversion earlier, and if the file is read, bad things can
happen. This patch fixes this, making the attribute an empty one,
preserving the original functionality.
Many thanks to David Miller for finding this, and pointing me in the
proper place within the block code to look.
Acked-by: David S. Miller <davem@davemloft.net>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/partitions/check.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 739da701ae7b..9a64045ff845 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
@@ -319,6 +319,14 @@ void delete_partition(struct gendisk *disk, int part) | |||
319 | put_device(&p->dev); | 319 | put_device(&p->dev); |
320 | } | 320 | } |
321 | 321 | ||
322 | static ssize_t whole_disk_show(struct device *dev, | ||
323 | struct device_attribute *attr, char *buf) | ||
324 | { | ||
325 | return 0; | ||
326 | } | ||
327 | static DEVICE_ATTR(whole_disk, S_IRUSR | S_IRGRP | S_IROTH, | ||
328 | whole_disk_show, NULL); | ||
329 | |||
322 | void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, int flags) | 330 | void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, int flags) |
323 | { | 331 | { |
324 | struct hd_struct *p; | 332 | struct hd_struct *p; |
@@ -352,13 +360,8 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, | |||
352 | device_add(&p->dev); | 360 | device_add(&p->dev); |
353 | partition_sysfs_add_subdir(p); | 361 | partition_sysfs_add_subdir(p); |
354 | p->dev.uevent_suppress = 0; | 362 | p->dev.uevent_suppress = 0; |
355 | if (flags & ADDPART_FLAG_WHOLEDISK) { | 363 | if (flags & ADDPART_FLAG_WHOLEDISK) |
356 | static struct attribute addpartattr = { | 364 | err = device_create_file(&p->dev, &dev_attr_whole_disk); |
357 | .name = "whole_disk", | ||
358 | .mode = S_IRUSR | S_IRGRP | S_IROTH, | ||
359 | }; | ||
360 | err = sysfs_create_file(&p->dev.kobj, &addpartattr); | ||
361 | } | ||
362 | 365 | ||
363 | /* suppress uevent if the disk supresses it */ | 366 | /* suppress uevent if the disk supresses it */ |
364 | if (!disk->dev.uevent_suppress) | 367 | if (!disk->dev.uevent_suppress) |