diff options
author | Eric Sandeen <sandeen@redhat.com> | 2015-11-24 18:30:34 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-25 22:49:24 -0500 |
commit | 77032ca66f86fa631b38b2e7feeb2b953e59f2f0 (patch) | |
tree | c8100aec8d36bd1c5fcbb62d20ece162ef2fe22d /block | |
parent | 78c4a49a69e910a162b05e4e8727b9bdbf948f13 (diff) |
Return EBUSY from BLKRRPART for mounted whole-dev fs
Today, blockdev --rereadpt /dev/sda will fail with EBUSY if any
partition of sda is mounted (and will fail with EINVAL if pointed
at a partition). But it will pass if the entire block device is
formatted with a filesystem and mounted. I don't think this makes
sense; partitioning should surely not ever change out from under
a mounted device.
So check for bdev->bd_super, and fail that with -EBUSY as well.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/partition-generic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/block/partition-generic.c b/block/partition-generic.c index 3b030157ec85..746935a5973c 100644 --- a/block/partition-generic.c +++ b/block/partition-generic.c | |||
@@ -397,7 +397,7 @@ static int drop_partitions(struct gendisk *disk, struct block_device *bdev) | |||
397 | struct hd_struct *part; | 397 | struct hd_struct *part; |
398 | int res; | 398 | int res; |
399 | 399 | ||
400 | if (bdev->bd_part_count) | 400 | if (bdev->bd_part_count || bdev->bd_super) |
401 | return -EBUSY; | 401 | return -EBUSY; |
402 | res = invalidate_partition(disk, 0); | 402 | res = invalidate_partition(disk, 0); |
403 | if (res) | 403 | if (res) |