From 3f35b88c7f0ee279d3e486809e462743c308cb7e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 5 Jan 2015 11:39:01 -0800 Subject: [PATCH] 3.10-stable patches added patches: md-bitmap-always-wait-for-writes-on-unplug.patch mfd-tc6393xb-fail-ohci-suspend-if-full-state-restore-is-required.patch mmc-block-add-newline-to-sysfs-display-of-force_ro.patch --- ...map-always-wait-for-writes-on-unplug.patch | 62 +++++++++++++++++++ ...nd-if-full-state-restore-is-required.patch | 55 ++++++++++++++++ ...newline-to-sysfs-display-of-force_ro.patch | 32 ++++++++++ 3 files changed, 149 insertions(+) create mode 100644 queue-3.10/md-bitmap-always-wait-for-writes-on-unplug.patch create mode 100644 queue-3.10/mfd-tc6393xb-fail-ohci-suspend-if-full-state-restore-is-required.patch create mode 100644 queue-3.10/mmc-block-add-newline-to-sysfs-display-of-force_ro.patch diff --git a/queue-3.10/md-bitmap-always-wait-for-writes-on-unplug.patch b/queue-3.10/md-bitmap-always-wait-for-writes-on-unplug.patch new file mode 100644 index 00000000000..474adad1809 --- /dev/null +++ b/queue-3.10/md-bitmap-always-wait-for-writes-on-unplug.patch @@ -0,0 +1,62 @@ +From 4b5060ddae2b03c5387321fafc089d242225697a Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Tue, 9 Sep 2014 14:13:51 +1000 +Subject: md/bitmap: always wait for writes on unplug. + +From: NeilBrown + +commit 4b5060ddae2b03c5387321fafc089d242225697a upstream. + +If two threads call bitmap_unplug at the same time, then +one might schedule all the writes, and the other might +decide that it doesn't need to wait. But really it does. + +It rarely hurts to wait when it isn't absolutely necessary, +and the current code doesn't really focus on 'absolutely necessary' +anyway. So just wait always. + +This can potentially lead to data corruption if a crash happens +at an awkward time and data was written before the bitmap was +updated. It is very unlikely, but this should go to -stable +just to be safe. Appropriate for any -stable. + +Signed-off-by: NeilBrown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/md/bitmap.c | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +--- a/drivers/md/bitmap.c ++++ b/drivers/md/bitmap.c +@@ -883,7 +883,6 @@ void bitmap_unplug(struct bitmap *bitmap + { + unsigned long i; + int dirty, need_write; +- int wait = 0; + + if (!bitmap || !bitmap->storage.filemap || + test_bit(BITMAP_STALE, &bitmap->flags)) +@@ -901,16 +900,13 @@ void bitmap_unplug(struct bitmap *bitmap + clear_page_attr(bitmap, i, BITMAP_PAGE_PENDING); + write_page(bitmap, bitmap->storage.filemap[i], 0); + } +- if (dirty) +- wait = 1; +- } +- if (wait) { /* if any writes were performed, we need to wait on them */ +- if (bitmap->storage.file) +- wait_event(bitmap->write_wait, +- atomic_read(&bitmap->pending_writes)==0); +- else +- md_super_wait(bitmap->mddev); + } ++ if (bitmap->storage.file) ++ wait_event(bitmap->write_wait, ++ atomic_read(&bitmap->pending_writes)==0); ++ else ++ md_super_wait(bitmap->mddev); ++ + if (test_bit(BITMAP_WRITE_ERROR, &bitmap->flags)) + bitmap_file_kick(bitmap); + } diff --git a/queue-3.10/mfd-tc6393xb-fail-ohci-suspend-if-full-state-restore-is-required.patch b/queue-3.10/mfd-tc6393xb-fail-ohci-suspend-if-full-state-restore-is-required.patch new file mode 100644 index 00000000000..12e1782b18a --- /dev/null +++ b/queue-3.10/mfd-tc6393xb-fail-ohci-suspend-if-full-state-restore-is-required.patch @@ -0,0 +1,55 @@ +From 1a5fb99de4850cba710d91becfa2c65653048589 Mon Sep 17 00:00:00 2001 +From: Dmitry Eremin-Solenikov +Date: Fri, 24 Oct 2014 21:19:57 +0400 +Subject: mfd: tc6393xb: Fail ohci suspend if full state restore is required + +From: Dmitry Eremin-Solenikov + +commit 1a5fb99de4850cba710d91becfa2c65653048589 upstream. + +Some boards with TC6393XB chip require full state restore during system +resume thanks to chip's VCC being cut off during suspend (Sharp SL-6000 +tosa is one of them). Failing to do so would result in ohci Oops on +resume due to internal memory contentes being changed. Fail ohci suspend +on tc6393xb is full state restore is required. + +Recommended workaround is to unbind tmio-ohci driver before suspend and +rebind it after resume. + +Signed-off-by: Dmitry Eremin-Solenikov +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mfd/tc6393xb.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +--- a/drivers/mfd/tc6393xb.c ++++ b/drivers/mfd/tc6393xb.c +@@ -263,6 +263,17 @@ static int tc6393xb_ohci_disable(struct + return 0; + } + ++static int tc6393xb_ohci_suspend(struct platform_device *dev) ++{ ++ struct tc6393xb_platform_data *tcpd = dev_get_platdata(dev->dev.parent); ++ ++ /* We can't properly store/restore OHCI state, so fail here */ ++ if (tcpd->resume_restore) ++ return -EBUSY; ++ ++ return tc6393xb_ohci_disable(dev); ++} ++ + static int tc6393xb_fb_enable(struct platform_device *dev) + { + struct tc6393xb *tc6393xb = dev_get_drvdata(dev->dev.parent); +@@ -403,7 +414,7 @@ static struct mfd_cell tc6393xb_cells[] + .num_resources = ARRAY_SIZE(tc6393xb_ohci_resources), + .resources = tc6393xb_ohci_resources, + .enable = tc6393xb_ohci_enable, +- .suspend = tc6393xb_ohci_disable, ++ .suspend = tc6393xb_ohci_suspend, + .resume = tc6393xb_ohci_enable, + .disable = tc6393xb_ohci_disable, + }, diff --git a/queue-3.10/mmc-block-add-newline-to-sysfs-display-of-force_ro.patch b/queue-3.10/mmc-block-add-newline-to-sysfs-display-of-force_ro.patch new file mode 100644 index 00000000000..557382ce8a3 --- /dev/null +++ b/queue-3.10/mmc-block-add-newline-to-sysfs-display-of-force_ro.patch @@ -0,0 +1,32 @@ +From 0031a98a85e9fca282624bfc887f9531b2768396 Mon Sep 17 00:00:00 2001 +From: Baruch Siach +Date: Mon, 22 Sep 2014 10:12:51 +0300 +Subject: mmc: block: add newline to sysfs display of force_ro + +From: Baruch Siach + +commit 0031a98a85e9fca282624bfc887f9531b2768396 upstream. + +Make force_ro consistent with other sysfs entries. + +Fixes: 371a689f64b0d ('mmc: MMC boot partitions support') +Cc: Andrei Warkentin +Signed-off-by: Baruch Siach +Signed-off-by: Ulf Hansson +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mmc/card/block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mmc/card/block.c ++++ b/drivers/mmc/card/block.c +@@ -257,7 +257,7 @@ static ssize_t force_ro_show(struct devi + int ret; + struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); + +- ret = snprintf(buf, PAGE_SIZE, "%d", ++ ret = snprintf(buf, PAGE_SIZE, "%d\n", + get_disk_ro(dev_to_disk(dev)) ^ + md->read_only); + mmc_blk_put(md); -- 2.47.3