Skip to content

Commit

Permalink
Block: Fix whole_disk attribute bug
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Greg Kroah-Hartman committed Feb 7, 2008
1 parent 0afc2ed commit f4a00a2
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions fs/partitions/check.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,14 @@ void delete_partition(struct gendisk *disk, int part)
put_device(&p->dev);
}

static ssize_t whole_disk_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
return 0;
}
static DEVICE_ATTR(whole_disk, S_IRUSR | S_IRGRP | S_IROTH,
whole_disk_show, NULL);

void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, int flags)
{
struct hd_struct *p;
Expand Down Expand Up @@ -352,13 +360,8 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len,
device_add(&p->dev);
partition_sysfs_add_subdir(p);
p->dev.uevent_suppress = 0;
if (flags & ADDPART_FLAG_WHOLEDISK) {
static struct attribute addpartattr = {
.name = "whole_disk",
.mode = S_IRUSR | S_IRGRP | S_IROTH,
};
err = sysfs_create_file(&p->dev.kobj, &addpartattr);
}
if (flags & ADDPART_FLAG_WHOLEDISK)
err = device_create_file(&p->dev, &dev_attr_whole_disk);

/* suppress uevent if the disk supresses it */
if (!disk->dev.uevent_suppress)
Expand Down

0 comments on commit f4a00a2

Please sign in to comment.