]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .28
authorGreg Kroah-Hartman <gregkh@suse.de>
Fri, 13 Feb 2009 23:59:42 +0000 (15:59 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 13 Feb 2009 23:59:42 +0000 (15:59 -0800)
queue-2.6.28/ide-cd-fix-dma-for-non-bio-backed-requests.patch [new file with mode: 0644]
queue-2.6.28/series

diff --git a/queue-2.6.28/ide-cd-fix-dma-for-non-bio-backed-requests.patch b/queue-2.6.28/ide-cd-fix-dma-for-non-bio-backed-requests.patch
new file mode 100644 (file)
index 0000000..64237a1
--- /dev/null
@@ -0,0 +1,52 @@
+From 9e772d0135a5b5f8355320be429efa339700d52d Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <petkovbb@googlemail.com>
+Date: Mon, 2 Feb 2009 20:12:21 +0100
+Subject: ide-cd: fix DMA for non bio-backed requests
+
+From: Borislav Petkov <petkovbb@googlemail.com>
+
+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 |    3 +++
+ drivers/ide/ide-io.c |    9 ++++++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+--- a/drivers/ide/ide-cd.c
++++ b/drivers/ide/ide-cd.c
+@@ -984,6 +984,9 @@ static ide_startstop_t cdrom_newpc_intr(
+               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;
+       }
+--- a/drivers/ide/ide-io.c
++++ b/drivers/ide/ide-io.c
+@@ -577,11 +577,14 @@ void ide_map_sg(ide_drive_t *drive, stru
+       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);
+       }
+ }
index 1d23fcd6bc9f33b8dc2768acd9fb1766d009e860..8d98e3785c3cac467d1b42d4f078ff3266be0f14 100644 (file)
@@ -45,3 +45,4 @@ libata-fix-eh-device-failure-handling.patch
 netfilter-fix-tuple-inversion-for-node-information-request.patch
 netfilter-xt_sctp-sctp-chunk-mapping-doesn-t-work.patch
 x86-microcode_amd-fix-wrong-handling-of-equivalent-cpu-id.patch
+ide-cd-fix-dma-for-non-bio-backed-requests.patch