|
@@ -1044,29 +1044,12 @@ static int loop_clr_fd(struct loop_device *lo)
|
|
|
lo->lo_state = Lo_unbound;
|
|
|
/* This is safe: open() is still holding a reference. */
|
|
|
module_put(THIS_MODULE);
|
|
|
+ if (lo->lo_flags & LO_FLAGS_PARTSCAN && bdev)
|
|
|
+ ioctl_by_bdev(bdev, BLKRRPART, 0);
|
|
|
lo->lo_flags = 0;
|
|
|
if (!part_shift)
|
|
|
lo->lo_disk->flags |= GENHD_FL_NO_PART_SCAN;
|
|
|
mutex_unlock(&lo->lo_ctl_mutex);
|
|
|
-
|
|
|
- /*
|
|
|
- * Remove all partitions, since BLKRRPART won't remove user
|
|
|
- * added partitions when max_part=0
|
|
|
- */
|
|
|
- if (bdev) {
|
|
|
- struct disk_part_iter piter;
|
|
|
- struct hd_struct *part;
|
|
|
-
|
|
|
- mutex_lock_nested(&bdev->bd_mutex, 1);
|
|
|
- invalidate_partition(bdev->bd_disk, 0);
|
|
|
- disk_part_iter_init(&piter, bdev->bd_disk,
|
|
|
- DISK_PITER_INCL_EMPTY);
|
|
|
- while ((part = disk_part_iter_next(&piter)))
|
|
|
- delete_partition(bdev->bd_disk, part->partno);
|
|
|
- disk_part_iter_exit(&piter);
|
|
|
- mutex_unlock(&bdev->bd_mutex);
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* Need not hold lo_ctl_mutex to fput backing file.
|
|
|
* Calling fput holding lo_ctl_mutex triggers a circular
|