@@ -527,12 +527,12 @@ static int loop_make_request(request_queue_t *q, struct bio *old_bio)
527
527
lo -> lo_pending ++ ;
528
528
loop_add_bio (lo , old_bio );
529
529
spin_unlock_irq (& lo -> lo_lock );
530
- up (& lo -> lo_bh_mutex );
530
+ complete (& lo -> lo_bh_done );
531
531
return 0 ;
532
532
533
533
out :
534
534
if (lo -> lo_pending == 0 )
535
- up (& lo -> lo_bh_mutex );
535
+ complete (& lo -> lo_bh_done );
536
536
spin_unlock_irq (& lo -> lo_lock );
537
537
bio_io_error (old_bio , old_bio -> bi_size );
538
538
return 0 ;
@@ -593,23 +593,20 @@ static int loop_thread(void *data)
593
593
lo -> lo_pending = 1 ;
594
594
595
595
/*
596
- * up sem , we are running
596
+ * complete it , we are running
597
597
*/
598
- up (& lo -> lo_sem );
598
+ complete (& lo -> lo_done );
599
599
600
600
for (;;) {
601
601
int pending ;
602
602
603
- /*
604
- * interruptible just to not contribute to load avg
605
- */
606
- if (down_interruptible (& lo -> lo_bh_mutex ))
603
+ if (wait_for_completion_interruptible (& lo -> lo_bh_done ))
607
604
continue ;
608
605
609
606
spin_lock_irq (& lo -> lo_lock );
610
607
611
608
/*
612
- * could be upped because of tear-down, not pending work
609
+ * could be completed because of tear-down, not pending work
613
610
*/
614
611
if (unlikely (!lo -> lo_pending )) {
615
612
spin_unlock_irq (& lo -> lo_lock );
@@ -632,7 +629,7 @@ static int loop_thread(void *data)
632
629
break ;
633
630
}
634
631
635
- up (& lo -> lo_sem );
632
+ complete (& lo -> lo_done );
636
633
return 0 ;
637
634
}
638
635
@@ -843,7 +840,7 @@ static int loop_set_fd(struct loop_device *lo, struct file *lo_file,
843
840
set_blocksize (bdev , lo_blocksize );
844
841
845
842
kernel_thread (loop_thread , lo , CLONE_KERNEL );
846
- down (& lo -> lo_sem );
843
+ wait_for_completion (& lo -> lo_done );
847
844
return 0 ;
848
845
849
846
out_putf :
@@ -909,10 +906,10 @@ static int loop_clr_fd(struct loop_device *lo, struct block_device *bdev)
909
906
lo -> lo_state = Lo_rundown ;
910
907
lo -> lo_pending -- ;
911
908
if (!lo -> lo_pending )
912
- up (& lo -> lo_bh_mutex );
909
+ complete (& lo -> lo_bh_done );
913
910
spin_unlock_irq (& lo -> lo_lock );
914
911
915
- down (& lo -> lo_sem );
912
+ wait_for_completion (& lo -> lo_done );
916
913
917
914
lo -> lo_backing_file = NULL ;
918
915
@@ -1289,8 +1286,8 @@ static int __init loop_init(void)
1289
1286
if (!lo -> lo_queue )
1290
1287
goto out_mem4 ;
1291
1288
init_MUTEX (& lo -> lo_ctl_mutex );
1292
- init_MUTEX_LOCKED (& lo -> lo_sem );
1293
- init_MUTEX_LOCKED (& lo -> lo_bh_mutex );
1289
+ init_completion (& lo -> lo_done );
1290
+ init_completion (& lo -> lo_bh_done );
1294
1291
lo -> lo_number = i ;
1295
1292
spin_lock_init (& lo -> lo_lock );
1296
1293
disk -> major = LOOP_MAJOR ;
0 commit comments