diff options
Diffstat (limited to 'block/partitions/core.c')
| -rw-r--r-- | block/partitions/core.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/block/partitions/core.c b/block/partitions/core.c index e6ac73617f3e..b11e88c82c8c 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -419,26 +419,20 @@ static bool partition_overlaps(struct gendisk *disk, sector_t start, int bdev_add_partition(struct gendisk *disk, int partno, sector_t start, sector_t length) { - sector_t capacity = get_capacity(disk), end; struct block_device *part; int ret; mutex_lock(&disk->open_mutex); - if (check_add_overflow(start, length, &end)) { - ret = -EINVAL; + if (!disk_live(disk)) { + ret = -ENXIO; goto out; } - if (start >= capacity || end > capacity) { + if (disk->flags & GENHD_FL_NO_PART) { ret = -EINVAL; goto out; } - if (!disk_live(disk)) { - ret = -ENXIO; - goto out; - } - if (partition_overlaps(disk, start, length, -1)) { ret = -EBUSY; goto out; @@ -562,8 +556,8 @@ static bool blk_add_partition(struct gendisk *disk, part = add_partition(disk, p, from, size, state->parts[p].flags, &state->parts[p].info); if (IS_ERR(part) && PTR_ERR(part) != -ENXIO) { - printk(KERN_ERR " %s: p%d could not be added: %ld\n", - disk->disk_name, p, -PTR_ERR(part)); + printk(KERN_ERR " %s: p%d could not be added: %pe\n", + disk->disk_name, p, part); return true; } |
