From: Greg Kroah-Hartman Date: Tue, 26 Mar 2013 18:38:12 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.0.71~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2620d2aa4fb6b76f1ff9a81dacd5d1a55260519;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: nohz-make-tick_nohz_irq_exit-irq-safe.patch udf-fix-bitmap-overflow-on-large-filesystems-with-small-block-size.patch --- diff --git a/queue-3.4/nohz-make-tick_nohz_irq_exit-irq-safe.patch b/queue-3.4/nohz-make-tick_nohz_irq_exit-irq-safe.patch new file mode 100644 index 00000000000..6934c7479ba --- /dev/null +++ b/queue-3.4/nohz-make-tick_nohz_irq_exit-irq-safe.patch @@ -0,0 +1,68 @@ +From e5ab012c3271990e8457055c25cafddc1ae8aa6b Mon Sep 17 00:00:00 2001 +From: Frederic Weisbecker +Date: Wed, 20 Feb 2013 16:15:36 +0100 +Subject: nohz: Make tick_nohz_irq_exit() irq safe + +From: Frederic Weisbecker + +commit e5ab012c3271990e8457055c25cafddc1ae8aa6b upstream. + +As it stands, irq_exit() may or may not be called with +irqs disabled, depending on __ARCH_IRQ_EXIT_IRQS_DISABLED +that the arch can define. + +It makes tick_nohz_irq_exit() unsafe. For example two +interrupts can race in tick_nohz_stop_sched_tick(): the inner +most one computes the expiring time on top of the timer list, +then it's interrupted right before reprogramming the +clock. The new interrupt enqueues a new timer list timer, +it reprogram the clock to take it into account and it exits. +The CPUs resumes the inner most interrupt and performs the clock +reprogramming without considering the new timer list timer. + +This regression has been introduced by: + 280f06774afedf849f0b34248ed6aff57d0f6908 + ("nohz: Separate out irq exit and idle loop dyntick logic") + +Let's fix it right now with the appropriate protections. + +A saner long term solution will be to remove +__ARCH_IRQ_EXIT_IRQS_DISABLED and mandate that irq_exit() is called +with interrupts disabled. + +Signed-off-by: Frederic Weisbecker +Cc: Peter Zijlstra +Cc: Ingo Molnar +Cc: Linus Torvalds +Link: http://lkml.kernel.org/r/1361373336-11337-1-git-send-email-fweisbec@gmail.com +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Thomas Gleixner +Signed-off-by: Lingzhu Xiang +Reviewed-by: CAI Qian +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/time/tick-sched.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/kernel/time/tick-sched.c ++++ b/kernel/time/tick-sched.c +@@ -496,12 +496,17 @@ void tick_nohz_idle_enter(void) + */ + void tick_nohz_irq_exit(void) + { ++ unsigned long flags; + struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched); + + if (!ts->inidle) + return; + ++ local_irq_save(flags); ++ + tick_nohz_stop_sched_tick(ts); ++ ++ local_irq_restore(flags); + } + + /** diff --git a/queue-3.4/series b/queue-3.4/series index 61cc2a5af1c..bcd1b918ba8 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -58,3 +58,5 @@ usb-xhci-fix-bit-definitions-for-iman-register.patch usb-xhci-correctly-enable-interrupts.patch usb-cdc-acm-fix-device-unregistration.patch usb-serial-fix-interface-refcounting.patch +nohz-make-tick_nohz_irq_exit-irq-safe.patch +udf-fix-bitmap-overflow-on-large-filesystems-with-small-block-size.patch diff --git a/queue-3.4/udf-fix-bitmap-overflow-on-large-filesystems-with-small-block-size.patch b/queue-3.4/udf-fix-bitmap-overflow-on-large-filesystems-with-small-block-size.patch new file mode 100644 index 00000000000..d13bd73dd1e --- /dev/null +++ b/queue-3.4/udf-fix-bitmap-overflow-on-large-filesystems-with-small-block-size.patch @@ -0,0 +1,38 @@ +From 89b1f39eb4189de745fae554b0d614d87c8d5c63 Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Tue, 5 Feb 2013 13:59:56 +0100 +Subject: udf: Fix bitmap overflow on large filesystems with small block size + +From: Jan Kara + +commit 89b1f39eb4189de745fae554b0d614d87c8d5c63 upstream. + +For large UDF filesystems with 512-byte blocks the number of necessary +bitmap blocks is larger than 2^16 so s_nr_groups in udf_bitmap overflows +(the number will overflow for filesystems larger than 128 GB with +512-byte blocks). That results in ENOSPC errors despite the filesystem +has plenty of free space. + +Fix the problem by changing s_nr_groups' type to 'int'. That is enough +even for filesystems 2^32 blocks (UDF maximum) and 512-byte blocksize. + +Reported-and-tested-by: v10lator@myway.de +Signed-off-by: Jan Kara +Cc: Jim Trigg +Signed-off-by: Greg Kroah-Hartman + +--- + fs/udf/udf_sb.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/udf/udf_sb.h ++++ b/fs/udf/udf_sb.h +@@ -82,7 +82,7 @@ struct udf_virtual_data { + struct udf_bitmap { + __u32 s_extLength; + __u32 s_extPosition; +- __u16 s_nr_groups; ++ int s_nr_groups; + struct buffer_head **s_block_bitmap; + }; +