ret = swim_read_sector(fs, side, track, sector,
buffer);
if (try-- == 0)
- return -1;
+ return -EIO;
} while (ret != 512);
buffer += ret;
struct request *req;
struct floppy_state *fs;
- while ((req = elv_next_request(q))) {
+ req = elv_next_request(q);
+ if (req)
+ blkdev_dequeue_request(req);
+
+ while (req) {
+ int err = -EIO;
fs = req->rq_disk->private_data;
- if (blk_rq_pos(req) >= fs->total_secs) {
- __blk_end_request_cur(req, -EIO);
- continue;
- }
- if (!fs->disk_in) {
- __blk_end_request_cur(req, -EIO);
- continue;
- }
- if (rq_data_dir(req) == WRITE) {
- if (fs->write_protected) {
- __blk_end_request_cur(req, -EIO);
- continue;
- }
- }
+ if (blk_rq_pos(req) >= fs->total_secs)
+ goto done;
+ if (!fs->disk_in)
+ goto done;
+ if (rq_data_dir(req) == WRITE && fs->write_protected)
+ goto done;
+
switch (rq_data_dir(req)) {
case WRITE:
/* NOT IMPLEMENTED */
- __blk_end_request_cur(req, -EIO);
break;
case READ:
- if (floppy_read_sectors(fs, blk_rq_pos(req),
- blk_rq_cur_sectors(req),
- req->buffer)) {
- __blk_end_request_cur(req, -EIO);
- continue;
- }
- __blk_end_request_cur(req, 0);
+ err = floppy_read_sectors(fs, blk_rq_pos(req),
+ blk_rq_cur_sectors(req),
+ req->buffer);
break;
}
+ done:
+ if (!__blk_end_request_cur(req, err)) {
+ req = elv_next_request(q);
+ if (req)
+ blkdev_dequeue_request(req);
+ }
}
}