diff options
Diffstat (limited to 'drivers/ide/ide-floppy.c')
-rw-r--r-- | drivers/ide/ide-floppy.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index 4713bdca20b6..5406b6ea3ad1 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c | |||
@@ -73,7 +73,7 @@ static int ide_floppy_callback(ide_drive_t *drive, int dsc) | |||
73 | drive->failed_pc = NULL; | 73 | drive->failed_pc = NULL; |
74 | 74 | ||
75 | if (pc->c[0] == GPCMD_READ_10 || pc->c[0] == GPCMD_WRITE_10 || | 75 | if (pc->c[0] == GPCMD_READ_10 || pc->c[0] == GPCMD_WRITE_10 || |
76 | (rq && blk_pc_request(rq))) | 76 | (rq && rq->cmd_type == REQ_TYPE_BLOCK_PC)) |
77 | uptodate = 1; /* FIXME */ | 77 | uptodate = 1; /* FIXME */ |
78 | else if (pc->c[0] == GPCMD_REQUEST_SENSE) { | 78 | else if (pc->c[0] == GPCMD_REQUEST_SENSE) { |
79 | 79 | ||
@@ -98,7 +98,7 @@ static int ide_floppy_callback(ide_drive_t *drive, int dsc) | |||
98 | "Aborting request!\n"); | 98 | "Aborting request!\n"); |
99 | } | 99 | } |
100 | 100 | ||
101 | if (blk_special_request(rq)) | 101 | if (rq->cmd_type == REQ_TYPE_SPECIAL) |
102 | rq->errors = uptodate ? 0 : IDE_DRV_ERROR_GENERAL; | 102 | rq->errors = uptodate ? 0 : IDE_DRV_ERROR_GENERAL; |
103 | 103 | ||
104 | return uptodate; | 104 | return uptodate; |
@@ -207,7 +207,7 @@ static void idefloppy_create_rw_cmd(ide_drive_t *drive, | |||
207 | memcpy(rq->cmd, pc->c, 12); | 207 | memcpy(rq->cmd, pc->c, 12); |
208 | 208 | ||
209 | pc->rq = rq; | 209 | pc->rq = rq; |
210 | if (rq->cmd_flags & REQ_RW) | 210 | if (rq->cmd_flags & REQ_WRITE) |
211 | pc->flags |= PC_FLAG_WRITING; | 211 | pc->flags |= PC_FLAG_WRITING; |
212 | 212 | ||
213 | pc->flags |= PC_FLAG_DMA_OK; | 213 | pc->flags |= PC_FLAG_DMA_OK; |
@@ -247,14 +247,16 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive, | |||
247 | } else | 247 | } else |
248 | printk(KERN_ERR PFX "%s: I/O error\n", drive->name); | 248 | printk(KERN_ERR PFX "%s: I/O error\n", drive->name); |
249 | 249 | ||
250 | if (blk_special_request(rq)) { | 250 | if (rq->cmd_type == REQ_TYPE_SPECIAL) { |
251 | rq->errors = 0; | 251 | rq->errors = 0; |
252 | ide_complete_rq(drive, 0, blk_rq_bytes(rq)); | 252 | ide_complete_rq(drive, 0, blk_rq_bytes(rq)); |
253 | return ide_stopped; | 253 | return ide_stopped; |
254 | } else | 254 | } else |
255 | goto out_end; | 255 | goto out_end; |
256 | } | 256 | } |
257 | if (blk_fs_request(rq)) { | 257 | |
258 | switch (rq->cmd_type) { | ||
259 | case REQ_TYPE_FS: | ||
258 | if (((long)blk_rq_pos(rq) % floppy->bs_factor) || | 260 | if (((long)blk_rq_pos(rq) % floppy->bs_factor) || |
259 | (blk_rq_sectors(rq) % floppy->bs_factor)) { | 261 | (blk_rq_sectors(rq) % floppy->bs_factor)) { |
260 | printk(KERN_ERR PFX "%s: unsupported r/w rq size\n", | 262 | printk(KERN_ERR PFX "%s: unsupported r/w rq size\n", |
@@ -263,13 +265,18 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive, | |||
263 | } | 265 | } |
264 | pc = &floppy->queued_pc; | 266 | pc = &floppy->queued_pc; |
265 | idefloppy_create_rw_cmd(drive, pc, rq, (unsigned long)block); | 267 | idefloppy_create_rw_cmd(drive, pc, rq, (unsigned long)block); |
266 | } else if (blk_special_request(rq) || blk_sense_request(rq)) { | 268 | break; |
269 | case REQ_TYPE_SPECIAL: | ||
270 | case REQ_TYPE_SENSE: | ||
267 | pc = (struct ide_atapi_pc *)rq->special; | 271 | pc = (struct ide_atapi_pc *)rq->special; |
268 | } else if (blk_pc_request(rq)) { | 272 | break; |
273 | case REQ_TYPE_BLOCK_PC: | ||
269 | pc = &floppy->queued_pc; | 274 | pc = &floppy->queued_pc; |
270 | idefloppy_blockpc_cmd(floppy, pc, rq); | 275 | idefloppy_blockpc_cmd(floppy, pc, rq); |
271 | } else | 276 | break; |
277 | default: | ||
272 | BUG(); | 278 | BUG(); |
279 | } | ||
273 | 280 | ||
274 | ide_prep_sense(drive, rq); | 281 | ide_prep_sense(drive, rq); |
275 | 282 | ||
@@ -280,7 +287,7 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive, | |||
280 | 287 | ||
281 | cmd.rq = rq; | 288 | cmd.rq = rq; |
282 | 289 | ||
283 | if (blk_fs_request(rq) || blk_rq_bytes(rq)) { | 290 | if (rq->cmd_type == REQ_TYPE_FS || blk_rq_bytes(rq)) { |
284 | ide_init_sg_cmd(&cmd, blk_rq_bytes(rq)); | 291 | ide_init_sg_cmd(&cmd, blk_rq_bytes(rq)); |
285 | ide_map_sg(drive, &cmd); | 292 | ide_map_sg(drive, &cmd); |
286 | } | 293 | } |
@@ -290,7 +297,7 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive, | |||
290 | return ide_floppy_issue_pc(drive, &cmd, pc); | 297 | return ide_floppy_issue_pc(drive, &cmd, pc); |
291 | out_end: | 298 | out_end: |
292 | drive->failed_pc = NULL; | 299 | drive->failed_pc = NULL; |
293 | if (blk_fs_request(rq) == 0 && rq->errors == 0) | 300 | if (rq->cmd_type != REQ_TYPE_FS && rq->errors == 0) |
294 | rq->errors = -EIO; | 301 | rq->errors = -EIO; |
295 | ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); | 302 | ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); |
296 | return ide_stopped; | 303 | return ide_stopped; |