@@ -774,6 +774,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
774
774
goto out_err ;
775
775
776
776
/* and ... switch */
777
+ disk_force_media_change (lo -> lo_disk , DISK_EVENT_MEDIA_CHANGE );
777
778
blk_mq_freeze_queue (lo -> lo_queue );
778
779
mapping_set_gfp_mask (old_file -> f_mapping , lo -> old_gfp_mask );
779
780
lo -> lo_backing_file = file ;
@@ -1257,6 +1258,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
1257
1258
goto out_unlock ;
1258
1259
}
1259
1260
1261
+ disk_force_media_change (lo -> lo_disk , DISK_EVENT_MEDIA_CHANGE );
1260
1262
set_disk_ro (lo -> lo_disk , (lo -> lo_flags & LO_FLAGS_READ_ONLY ) != 0 );
1261
1263
1262
1264
INIT_WORK (& lo -> rootcg_work , loop_rootcg_workfn );
@@ -1410,6 +1412,7 @@ static int __loop_clr_fd(struct loop_device *lo, bool release)
1410
1412
1411
1413
partscan = lo -> lo_flags & LO_FLAGS_PARTSCAN && bdev ;
1412
1414
lo_number = lo -> lo_number ;
1415
+ disk_force_media_change (lo -> lo_disk , DISK_EVENT_MEDIA_CHANGE );
1413
1416
out_unlock :
1414
1417
mutex_unlock (& lo -> lo_mutex );
1415
1418
if (partscan ) {
@@ -2386,6 +2389,8 @@ static int loop_add(int i)
2386
2389
disk -> fops = & lo_fops ;
2387
2390
disk -> private_data = lo ;
2388
2391
disk -> queue = lo -> lo_queue ;
2392
+ disk -> events = DISK_EVENT_MEDIA_CHANGE ;
2393
+ disk -> event_flags = DISK_EVENT_FLAG_UEVENT ;
2389
2394
sprintf (disk -> disk_name , "loop%d" , i );
2390
2395
add_disk (disk );
2391
2396
mutex_unlock (& loop_ctl_mutex );
0 commit comments