aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/floppy.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/floppy.c')
-rw-r--r--drivers/block/floppy.c105
1 files changed, 52 insertions, 53 deletions
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 5d8f5510ebc5..8e24aa3a4e24 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -2892,64 +2892,63 @@ static void redo_fd_request(void)
2892 if (current_drive < N_DRIVE) 2892 if (current_drive < N_DRIVE)
2893 floppy_off(current_drive); 2893 floppy_off(current_drive);
2894 2894
2895 for (;;) { 2895do_request:
2896 if (!current_req) { 2896 if (!current_req) {
2897 struct request *req; 2897 struct request *req;
2898 2898
2899 spin_lock_irq(floppy_queue->queue_lock); 2899 spin_lock_irq(floppy_queue->queue_lock);
2900 req = blk_fetch_request(floppy_queue); 2900 req = blk_fetch_request(floppy_queue);
2901 spin_unlock_irq(floppy_queue->queue_lock); 2901 spin_unlock_irq(floppy_queue->queue_lock);
2902 if (!req) { 2902 if (!req) {
2903 do_floppy = NULL; 2903 do_floppy = NULL;
2904 unlock_fdc(); 2904 unlock_fdc();
2905 return;
2906 }
2907 current_req = req;
2908 }
2909 drive = (long)current_req->rq_disk->private_data;
2910 set_fdc(drive);
2911 reschedule_timeout(current_reqD, "redo fd request", 0);
2912
2913 set_floppy(drive);
2914 raw_cmd = &default_raw_cmd;
2915 raw_cmd->flags = 0;
2916 if (start_motor(redo_fd_request))
2917 return; 2905 return;
2918 disk_change(current_drive);
2919 if (test_bit(current_drive, &fake_change) ||
2920 test_bit(FD_DISK_CHANGED_BIT, &DRS->flags)) {
2921 DPRINT("disk absent or changed during operation\n");
2922 request_done(0);
2923 continue;
2924 }
2925 if (!_floppy) { /* Autodetection */
2926 if (!probing) {
2927 DRS->probed_format = 0;
2928 if (next_valid_format()) {
2929 DPRINT("no autodetectable formats\n");
2930 _floppy = NULL;
2931 request_done(0);
2932 continue;
2933 }
2934 }
2935 probing = 1;
2936 _floppy =
2937 floppy_type + DP->autodetect[DRS->probed_format];
2938 } else
2939 probing = 0;
2940 errors = &(current_req->errors);
2941 tmp = make_raw_rw_request();
2942 if (tmp < 2) {
2943 request_done(tmp);
2944 continue;
2945 } 2906 }
2907 current_req = req;
2908 }
2909 drive = (long)current_req->rq_disk->private_data;
2910 set_fdc(drive);
2911 reschedule_timeout(current_reqD, "redo fd request", 0);
2946 2912
2947 if (test_bit(FD_NEED_TWADDLE_BIT, &DRS->flags)) 2913 set_floppy(drive);
2948 twaddle(); 2914 raw_cmd = &default_raw_cmd;
2949 schedule_bh(floppy_start); 2915 raw_cmd->flags = 0;
2950 debugt("queue fd request"); 2916 if (start_motor(redo_fd_request))
2951 return; 2917 return;
2918
2919 disk_change(current_drive);
2920 if (test_bit(current_drive, &fake_change) ||
2921 test_bit(FD_DISK_CHANGED_BIT, &DRS->flags)) {
2922 DPRINT("disk absent or changed during operation\n");
2923 request_done(0);
2924 goto do_request;
2952 } 2925 }
2926 if (!_floppy) { /* Autodetection */
2927 if (!probing) {
2928 DRS->probed_format = 0;
2929 if (next_valid_format()) {
2930 DPRINT("no autodetectable formats\n");
2931 _floppy = NULL;
2932 request_done(0);
2933 goto do_request;
2934 }
2935 }
2936 probing = 1;
2937 _floppy = floppy_type + DP->autodetect[DRS->probed_format];
2938 } else
2939 probing = 0;
2940 errors = &(current_req->errors);
2941 tmp = make_raw_rw_request();
2942 if (tmp < 2) {
2943 request_done(tmp);
2944 goto do_request;
2945 }
2946
2947 if (test_bit(FD_NEED_TWADDLE_BIT, &DRS->flags))
2948 twaddle();
2949 schedule_bh(floppy_start);
2950 debugt("queue fd request");
2951 return;
2953} 2952}
2954 2953
2955static struct cont_t rw_cont = { 2954static struct cont_t rw_cont = {