Message ID | 20200715083619.624249-1-ming.lei@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: always remove partitions from blk_drop_partitions() | expand |
On Wed, Jul 15, 2020 at 04:36:19PM +0800, Ming Lei wrote: > In theory, when GENHD_FL_NO_PART_SCAN is set, no partitions can be created > on one disk. However, ioctl(BLKPG, BLKPG_ADD_PARTITION) doesn't check > GENHD_FL_NO_PART_SCAN, so partitions still can be added even though > GENHD_FL_NO_PART_SCAN is set. > > So far blk_drop_partitions() only removes partitions when disk_part_scan_enabled() > return true. This way can make ghost partition on loop device after changing/clearing > FD in case that PARTSCAN is disabled, such as partitions can be added > via 'parted' on loop disk even though GENHD_FL_NO_PART_SCAN is set. > > Fix this issue by always removing partitions in blk_drop_partitions(), and > this way is correct because the current code supposes that no partitions > can be added in case of GENHD_FL_NO_PART_SCAN. The changelog has a few overly long lines. Otherwise: Reviewed-by: Christoph Hellwig <hch@lst.de>
On 7/15/20 2:36 AM, Ming Lei wrote: > In theory, when GENHD_FL_NO_PART_SCAN is set, no partitions can be created > on one disk. However, ioctl(BLKPG, BLKPG_ADD_PARTITION) doesn't check > GENHD_FL_NO_PART_SCAN, so partitions still can be added even though > GENHD_FL_NO_PART_SCAN is set. > > So far blk_drop_partitions() only removes partitions when disk_part_scan_enabled() > return true. This way can make ghost partition on loop device after changing/clearing > FD in case that PARTSCAN is disabled, such as partitions can be added > via 'parted' on loop disk even though GENHD_FL_NO_PART_SCAN is set. > > Fix this issue by always removing partitions in blk_drop_partitions(), and > this way is correct because the current code supposes that no partitions > can be added in case of GENHD_FL_NO_PART_SCAN. Applied, thanks.
diff --git a/block/partitions/core.c b/block/partitions/core.c index 78951e33b2d7..e62a98a8eeb7 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -619,8 +619,6 @@ int blk_drop_partitions(struct block_device *bdev) struct disk_part_iter piter; struct hd_struct *part; - if (!disk_part_scan_enabled(bdev->bd_disk)) - return 0; if (bdev->bd_part_count) return -EBUSY;
In theory, when GENHD_FL_NO_PART_SCAN is set, no partitions can be created on one disk. However, ioctl(BLKPG, BLKPG_ADD_PARTITION) doesn't check GENHD_FL_NO_PART_SCAN, so partitions still can be added even though GENHD_FL_NO_PART_SCAN is set. So far blk_drop_partitions() only removes partitions when disk_part_scan_enabled() return true. This way can make ghost partition on loop device after changing/clearing FD in case that PARTSCAN is disabled, such as partitions can be added via 'parted' on loop disk even though GENHD_FL_NO_PART_SCAN is set. Fix this issue by always removing partitions in blk_drop_partitions(), and this way is correct because the current code supposes that no partitions can be added in case of GENHD_FL_NO_PART_SCAN. Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> --- block/partitions/core.c | 2 -- 1 file changed, 2 deletions(-)