]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ide-cd: fix DMA for non bio-backed requests
authorBorislav Petkov <petkovbb@googlemail.com>
Mon, 2 Feb 2009 19:12:21 +0000 (20:12 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 17 Feb 2009 17:29:05 +0000 (09:29 -0800)
commit 9e772d0135a5b5f8355320be429efa339700d52d upstream.

This one fixes http://bugzilla.kernel.org/show_bug.cgi?id=12320.

Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/ide/ide-cd.c
drivers/ide/ide-io.c

index 42ab6d8715f26c6018201e32cace684d15d7435b..65f02b27d393f69d2384afce9dd923ebc2f5dd8f 100644 (file)
@@ -984,6 +984,9 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
                if (blk_fs_request(rq)) {
                        ide_end_request(drive, 1, rq->nr_sectors);
                        return ide_stopped;
+               } else if (rq->cmd_type == REQ_TYPE_ATA_PC && !rq->bio) {
+                       ide_end_request(drive, 1, 1);
+                       return ide_stopped;
                }
                goto end_request;
        }
index cc35d6dbd41026d02cdc1ab5a32085cc8c63e0db..81f99bde34da040449a501407c8617a5859e2147 100644 (file)
@@ -577,11 +577,14 @@ void ide_map_sg(ide_drive_t *drive, struct request *rq)
        if (hwif->sg_mapped)    /* needed by ide-scsi */
                return;
 
-       if (rq->cmd_type != REQ_TYPE_ATA_TASKFILE) {
-               hwif->sg_nents = blk_rq_map_sg(drive->queue, rq, sg);
-       } else {
+       if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) {
                sg_init_one(sg, rq->buffer, rq->nr_sectors * SECTOR_SIZE);
                hwif->sg_nents = 1;
+       } else if (!rq->bio) {
+               sg_init_one(sg, rq->data, rq->data_len);
+               hwif->sg_nents = 1;
+       } else {
+               hwif->sg_nents = blk_rq_map_sg(drive->queue, rq, sg);
        }
 }