*************** *** 342,360 **** 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; int err; p = kzalloc(sizeof(*p), GFP_KERNEL); if (!p) - return; - if (!init_part_stats(p)) { - kfree(p); - return; - } p->start_sect = start; p->nr_sects = len; p->partno = part; --- 342,365 ---- static DEVICE_ATTR(whole_disk, S_IRUSR | S_IRGRP | S_IROTH, whole_disk_show, NULL); + int add_partition(struct gendisk *disk, int part, + sector_t start, sector_t len, int flags) { + struct hd_struct *p = NULL; int err; + if (disk->part[part - 1]) { + err = -EBUSY; + goto fail; + } + + err = -ENOMEM; p = kzalloc(sizeof(*p), GFP_KERNEL); if (!p) + goto fail; + if (!init_part_stats(p)) + goto fail; p->start_sect = start; p->nr_sects = len; p->partno = part;