From: Greg Kroah-Hartman Date: Fri, 9 Jan 2009 00:46:26 +0000 (-0800) Subject: more .27 patches X-Git-Tag: v2.6.27.11~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=524c785da101789c161fee39757e791a8d7277b1;p=thirdparty%2Fkernel%2Fstable-queue.git more .27 patches --- diff --git a/queue-2.6.27/alsa-fix-a-oops-bug-in-omap-soc-driver.patch b/queue-2.6.27/alsa-fix-a-oops-bug-in-omap-soc-driver.patch new file mode 100644 index 00000000000..c17ef224ae7 --- /dev/null +++ b/queue-2.6.27/alsa-fix-a-oops-bug-in-omap-soc-driver.patch @@ -0,0 +1,33 @@ +From 19b3f31609dc8be3a56c78dcb7da723f10f7009c Mon Sep 17 00:00:00 2001 +From: Stanley Miao +Date: Fri, 19 Dec 2008 22:08:22 +0800 +Subject: ALSA: Fix a Oops bug in omap soc driver. + +From: Stanley Miao + +commit 19b3f31609dc8be3a56c78dcb7da723f10f7009c upstream. + +There will be a Oops or frequent underrun messages when playing music with +omap soc driver, this is because a data region is incorretly sized, other data +region will be overwriten when writing to this data region. + +Signed-off-by: Stanley Miao +Acked-by: Jarkko Nikula +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/omap/omap-pcm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/soc/omap/omap-pcm.c ++++ b/sound/soc/omap/omap-pcm.c +@@ -231,7 +231,7 @@ static int omap_pcm_open(struct snd_pcm_ + if (ret < 0) + goto out; + +- prtd = kzalloc(sizeof(prtd), GFP_KERNEL); ++ prtd = kzalloc(sizeof(*prtd), GFP_KERNEL); + if (prtd == NULL) { + ret = -ENOMEM; + goto out; diff --git a/queue-2.6.27/alsa-hda-add-missing-terminators-in-patch_sigmatel.c.patch b/queue-2.6.27/alsa-hda-add-missing-terminators-in-patch_sigmatel.c.patch new file mode 100644 index 00000000000..8bcaac5285c --- /dev/null +++ b/queue-2.6.27/alsa-hda-add-missing-terminators-in-patch_sigmatel.c.patch @@ -0,0 +1,27 @@ +From 574f3c4f5c55e99ea60f71fd98cc54931d4b2eae Mon Sep 17 00:00:00 2001 +From: Herton Ronaldo Krzesinski +Date: Tue, 23 Dec 2008 16:53:00 -0200 +Subject: ALSA: hda - Add missing terminators in patch_sigmatel.c + +From: Herton Ronaldo Krzesinski + +commit 574f3c4f5c55e99ea60f71fd98cc54931d4b2eae upstream. + +Signed-off-by: Herton Ronaldo Krzesinski +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_sigmatel.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_sigmatel.c ++++ b/sound/pci/hda/patch_sigmatel.c +@@ -638,6 +638,7 @@ static struct hda_verb stac92hd71bxx_cor + { 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, + { 0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, + { 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, ++ {} + }; + + #define HD_DISABLE_PORTF 3 diff --git a/queue-2.6.27/cciss-fix-problem-that-deleting-multiple-logical-drives-could-cause-a-panic.patch b/queue-2.6.27/cciss-fix-problem-that-deleting-multiple-logical-drives-could-cause-a-panic.patch new file mode 100644 index 00000000000..e9679df1070 --- /dev/null +++ b/queue-2.6.27/cciss-fix-problem-that-deleting-multiple-logical-drives-could-cause-a-panic.patch @@ -0,0 +1,42 @@ +From d8a0be6ab7ba1ffa43e7ea0dcdde3e8b68d4f762 Mon Sep 17 00:00:00 2001 +From: Stephen M. Cameron +Date: Thu, 18 Dec 2008 14:55:11 +0100 +Subject: cciss: fix problem that deleting multiple logical drives could cause a panic + +From: Stephen M. Cameron + +commit d8a0be6ab7ba1ffa43e7ea0dcdde3e8b68d4f762 upstream. + +Fix problem that deleting multiple logical drives could cause a panic. + +It fixes a panic which can be easily reproduced in the following way: Just +create several "arrays," each with multiple logical drives via hpacucli, +then delete the first array, and it will blow up in deregister_disk(), in +the call to get_host() when it tries to dig the hba pointer out of a NULL +queue pointer. + +The problem has been present since my code to make rebuild_lun_table +behave better went in. + +Signed-off-by: Stephen M. Cameron +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/block/cciss.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/block/cciss.c ++++ b/drivers/block/cciss.c +@@ -1692,6 +1692,11 @@ static int rebuild_lun_table(ctlr_info_t + for (i = 0; i <= h->highest_lun; i++) { + int j; + drv_found = 0; ++ ++ /* skip holes in the array from already deleted drives */ ++ if (h->drv[i].raid_level == -1) ++ continue; ++ + for (j = 0; j < num_luns; j++) { + memcpy(&lunid, &ld_buff->LUN[j][0], 4); + lunid = le32_to_cpu(lunid); diff --git a/queue-2.6.27/md-don-t-read-past-end-of-bitmap-when-reading-bitmap.patch b/queue-2.6.27/md-don-t-read-past-end-of-bitmap-when-reading-bitmap.patch new file mode 100644 index 00000000000..c894d98e8ff --- /dev/null +++ b/queue-2.6.27/md-don-t-read-past-end-of-bitmap-when-reading-bitmap.patch @@ -0,0 +1,91 @@ +From a2ed9615e3222645007fc19991aedf30eed3ecfd Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Fri, 19 Dec 2008 16:25:01 +1100 +Subject: md: Don't read past end of bitmap when reading bitmap. + +From: NeilBrown + +commit a2ed9615e3222645007fc19991aedf30eed3ecfd upstream. + +When we read the write-intent-bitmap off the device, we currently +read a whole number of pages. +When PAGE_SIZE is 4K, this works due to the alignment we enforce +on the superblock and bitmap. +When PAGE_SIZE is 64K, this case read past the end-of-device +which causes an error. + +When we write the superblock, we ensure to clip the last page +to just be the required size. Copy that code into the read path +to just read the required number of sectors. + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/md/bitmap.c | 22 +++++++++++++++++----- + 1 file changed, 17 insertions(+), 5 deletions(-) + +--- a/drivers/md/bitmap.c ++++ b/drivers/md/bitmap.c +@@ -208,16 +208,19 @@ static void bitmap_checkfree(struct bitm + */ + + /* IO operations when bitmap is stored near all superblocks */ +-static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long index) ++static struct page *read_sb_page(mddev_t *mddev, long offset, ++ struct page *page, ++ unsigned long index, int size) + { + /* choose a good rdev and read the page from there */ + + mdk_rdev_t *rdev; + struct list_head *tmp; +- struct page *page = alloc_page(GFP_KERNEL); + sector_t target; + + if (!page) ++ page = alloc_page(GFP_KERNEL); ++ if (!page) + return ERR_PTR(-ENOMEM); + + rdev_for_each(rdev, tmp, mddev) { +@@ -227,7 +230,9 @@ static struct page *read_sb_page(mddev_t + + target = rdev->sb_start + offset + index * (PAGE_SIZE/512); + +- if (sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ)) { ++ if (sync_page_io(rdev->bdev, target, ++ roundup(size, bdev_hardsect_size(rdev->bdev)), ++ page, READ)) { + page->index = index; + attach_page_buffers(page, NULL); /* so that free_buffer will + * quietly no-op */ +@@ -544,7 +549,9 @@ static int bitmap_read_sb(struct bitmap + + bitmap->sb_page = read_page(bitmap->file, 0, bitmap, bytes); + } else { +- bitmap->sb_page = read_sb_page(bitmap->mddev, bitmap->offset, 0); ++ bitmap->sb_page = read_sb_page(bitmap->mddev, bitmap->offset, ++ NULL, ++ 0, sizeof(bitmap_super_t)); + } + if (IS_ERR(bitmap->sb_page)) { + err = PTR_ERR(bitmap->sb_page); +@@ -957,11 +964,16 @@ static int bitmap_init_from_disk(struct + */ + page = bitmap->sb_page; + offset = sizeof(bitmap_super_t); ++ read_sb_page(bitmap->mddev, bitmap->offset, ++ page, ++ index, count); + } else if (file) { + page = read_page(file, index, bitmap, count); + offset = 0; + } else { +- page = read_sb_page(bitmap->mddev, bitmap->offset, index); ++ page = read_sb_page(bitmap->mddev, bitmap->offset, ++ NULL, ++ index, count); + offset = 0; + } + if (IS_ERR(page)) { /* read error */ diff --git a/queue-2.6.27/scsi-aacraid-disable-dell-percraid-quirk-on-adaptec-2200s-and-2120s.patch b/queue-2.6.27/scsi-aacraid-disable-dell-percraid-quirk-on-adaptec-2200s-and-2120s.patch new file mode 100644 index 00000000000..13b52afcb99 --- /dev/null +++ b/queue-2.6.27/scsi-aacraid-disable-dell-percraid-quirk-on-adaptec-2200s-and-2120s.patch @@ -0,0 +1,47 @@ +From b21227c5fcadab206e2a2373e5b288a351919abb Mon Sep 17 00:00:00 2001 +From: Hillier, Gernot +Date: Wed, 17 Sep 2008 16:03:06 +0200 +Subject: SCSI: aacraid: disable Dell Percraid quirk on Adaptec 2200S and 2120S + +From: Hillier, Gernot + +commit b21227c5fcadab206e2a2373e5b288a351919abb upstream. + +A lot of 64bit machines with Adaptec 2200S and 2120S controllers don't +recognize SCSI disks any more with the patch + +commit 94cf6ba11b068b8a8f68a1e88bffb6827e92124b +Author: Salyzyn, Mark +Date: Thu Dec 13 16:14:18 2007 -0800 + + [SCSI] aacraid: fix driver failure with Dell PowerEdge Expandable RAID Controller 3/Di + +but fail with tons of "aac_srb: aac_fib_send failed with status: 8195" +instead. This patch disables the quirk introduced in the change cited +above for those two controllers again. + +[thenzl: added 2120S Controller] +Signed-off-by: Gernot Hillier +Signed-off-by: Tomas Henzl +Acked-by: Matt Domsch +Cc: AACRAID list +Signed-off-by: James Bottomley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/aacraid/linit.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/scsi/aacraid/linit.c ++++ b/drivers/scsi/aacraid/linit.c +@@ -175,8 +175,8 @@ static struct aac_driver_ident aac_drive + { aac_rx_init, "percraid", "DELL ", "PERCRAID ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* PERC 3/Di (Boxster/PERC3DiB) */ + { aac_rx_init, "aacraid", "ADAPTEC ", "catapult ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* catapult */ + { aac_rx_init, "aacraid", "ADAPTEC ", "tomcat ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* tomcat */ +- { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2120S ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2120S (Crusader) */ +- { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2200S ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2200S (Vulcan) */ ++ { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2120S ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Adaptec 2120S (Crusader) */ ++ { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2200S ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Adaptec 2200S (Vulcan) */ + { aac_rx_init, "aacraid", "ADAPTEC ", "Adaptec 2200S ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Adaptec 2200S (Vulcan-2m) */ + { aac_rx_init, "aacraid", "Legend ", "Legend S220 ", 1, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Legend S220 (Legend Crusader) */ + { aac_rx_init, "aacraid", "Legend ", "Legend S230 ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG | AAC_QUIRK_SCSI_32 }, /* Legend S230 (Legend Vulcan) */ diff --git a/queue-2.6.27/scsi-ibmvstgt-move-crq_queue_create-to-the-end-of-initialization.patch b/queue-2.6.27/scsi-ibmvstgt-move-crq_queue_create-to-the-end-of-initialization.patch new file mode 100644 index 00000000000..98c54db46bd --- /dev/null +++ b/queue-2.6.27/scsi-ibmvstgt-move-crq_queue_create-to-the-end-of-initialization.patch @@ -0,0 +1,57 @@ +From 57458036af75c6dbb62bee04b3982e92261eddb1 Mon Sep 17 00:00:00 2001 +From: Brian King +Date: Tue, 9 Dec 2008 20:03:50 +0900 +Subject: SCSI: ibmvstgt: move crq_queue_create to the end of initialization + +From: Brian King + +commit 57458036af75c6dbb62bee04b3982e92261eddb1 upstream. + +Calling crq_queue_create could lead to the creation of a rport. We +need to set up everything before creating a rport. This moves +crq_queue_create to the end of initialization to avoid a race which +causes an oops if lost. + +Signed-off-by: Brian King +Signed-off-by: FUJITA Tomonori +Reported-by: Olaf Hering +Signed-off-by: James Bottomley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/ibmvscsi/ibmvstgt.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +--- a/drivers/scsi/ibmvscsi/ibmvstgt.c ++++ b/drivers/scsi/ibmvscsi/ibmvstgt.c +@@ -864,21 +864,23 @@ static int ibmvstgt_probe(struct vio_dev + + INIT_WORK(&vport->crq_work, handle_crq); + +- err = crq_queue_create(&vport->crq_queue, target); ++ err = scsi_add_host(shost, target->dev); + if (err) + goto free_srp_target; + +- err = scsi_add_host(shost, target->dev); ++ err = scsi_tgt_alloc_queue(shost); + if (err) +- goto destroy_queue; ++ goto remove_host; + +- err = scsi_tgt_alloc_queue(shost); ++ err = crq_queue_create(&vport->crq_queue, target); + if (err) +- goto destroy_queue; ++ goto free_queue; + + return 0; +-destroy_queue: +- crq_queue_destroy(target); ++free_queue: ++ scsi_tgt_free_queue(shost); ++remove_host: ++ scsi_remove_host(shost); + free_srp_target: + srp_target_free(target); + put_host: diff --git a/queue-2.6.27/series b/queue-2.6.27/series index 000bb5db388..bc00cc18f83 100644 --- a/queue-2.6.27/series +++ b/queue-2.6.27/series @@ -7,3 +7,9 @@ iwlagn-downgrade-bug_on-in-interrupt.patch async_xor-dma_map-destination-dma_bidirectional.patch dmaengine-protect-id-from-concurrent-registrations.patch ioat-wait-for-self-test-completion.patch +md-don-t-read-past-end-of-bitmap-when-reading-bitmap.patch +alsa-fix-a-oops-bug-in-omap-soc-driver.patch +scsi-ibmvstgt-move-crq_queue_create-to-the-end-of-initialization.patch +scsi-aacraid-disable-dell-percraid-quirk-on-adaptec-2200s-and-2120s.patch +cciss-fix-problem-that-deleting-multiple-logical-drives-could-cause-a-panic.patch +alsa-hda-add-missing-terminators-in-patch_sigmatel.c.patch