block: allow deleting zero length partition
authorTejun Heo <tj@kernel.org>
Mon, 25 Aug 2008 10:30:15 +0000 (19:30 +0900)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 9 Oct 2008 06:56:04 +0000 (08:56 +0200)
delete_partition() was noop for zero length partition.  As the
addition code allows creating zero lenght partition and deletion is
assumed to always succeed, this causes memory leak for zero length
partitions.  Allow zero length partitions to end their meaningless
lives.

While at it, allow deleting zero lenght partition via
BLKPG_DEL_PARTITION ioctl too.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/ioctl.c
fs/partitions/check.c

index 375c57922b007749ec7b3022b8cc3eaa4cab1122..c722de0ef2eebf3bcfdcf05bbb6c0f97808e2cb2 100644 (file)
@@ -68,8 +68,6 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
                case BLKPG_DEL_PARTITION:
                        if (!disk->part[part-1])
                                return -ENXIO;
-                       if (disk->part[part - 1]->nr_sects == 0)
-                               return -ENXIO;
                        bdevp = bdget_disk(disk, part);
                        if (!bdevp)
                                return -ENOMEM;
index ecc3330972e5a2de1ca8e397e3a9a0d90aec2ce8..68f3e41ae66f02e36894fcc8442afd90d52b4808 100644 (file)
@@ -325,8 +325,6 @@ void delete_partition(struct gendisk *disk, int part)
 
        if (!p)
                return;
-       if (!p->nr_sects)
-               return;
        disk->part[part-1] = NULL;
        p->start_sect = 0;
        p->nr_sects = 0;