Hello community,

here is the log from the commit of package kernel-source for openSUSE:12.3 
checked in at 2013-03-01 11:24:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:12.3/kernel-source (Old)
 and      /work/SRC/openSUSE:12.3/.kernel-source.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kernel-source", Maintainer is 
"[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:12.3/kernel-source/kernel-cubox.changes  2013-02-23 
08:58:21.000000000 +0100
+++ /work/SRC/openSUSE:12.3/.kernel-source.new/kernel-cubox.changes     
2013-03-01 11:24:46.000000000 +0100
@@ -1,0 +2,75 @@
+Thu Feb 28 16:06:29 CET 2013 - [email protected]
+
+- Add missing symtypes files
+- commit 82d3f21
+
+-------------------------------------------------------------------
+Wed Feb 27 20:44:57 CET 2013 - [email protected]
+
+- Linux 3.7.10 (CVE-2013-0231 CVE-2013-1763 bnc#792500 bnc#801178
+  bnc#802347 bnc#805633 XSA-43).
+- Refresh patches.xen/xen3-patch-2.6.31.
+- Refresh patches.xen/xen3-patch-3.1.
+- Delete
+  patches.fixes/drm-nouveau-vm-fix-memory-corruption-when-pgt-alloca.patch.
+- Delete
+  patches.fixes/sock_diag-fix-out-of-bounds-access-to-sock_diag_handlers.
+- Delete
+  patches.suse/suse-hv-register-clocksource-only-if-its-adverti.patch.
+- Delete patches.xen/xen-pciback-ratelimit.
+- commit 331049f
+
+-------------------------------------------------------------------
+Wed Feb 27 14:48:19 CET 2013 - [email protected]
+
+- Added kABI references for openSUSE 12.3 release.
+- commit 5b76602
+
+-------------------------------------------------------------------
+Tue Feb 26 04:27:14 CET 2013 - [email protected]
+
+- ext4: release sysfs kobject when failing to enable quotas
+  on mount.
+- commit 5aa1b40
+
+-------------------------------------------------------------------
+Tue Feb 26 04:23:24 CET 2013 - [email protected]
+
+- sock_diag: Simplify sock_diag_handlers handling in
+  __sock_diag_rcv_msg (bnc#805633 CVE-2013-1763).
+- sock_diag: Fix out-of-bounds access to sock_diag_handlers
+  (bnc#805633 CVE-2013-1763).
+- commit 0fe692b
+
+-------------------------------------------------------------------
+Mon Feb 25 21:22:24 CET 2013 - [email protected]
+
+- doc/README.SUSE: Updated versions to reflect 3.x kernels.
+- commit e77fcee
+
+-------------------------------------------------------------------
+Mon Feb 25 20:57:27 CET 2013 - [email protected]
+
+- Fix build breakage due to out-of-order patch refresh.
+- commit 1aa4b69
+
+-------------------------------------------------------------------
+Mon Feb 25 20:40:38 CET 2013 - [email protected]
+
+- ext4: fix error handling in ext4_fill_super().
+- commit 63c52e2
+
+-------------------------------------------------------------------
+Mon Feb 25 11:25:49 CET 2013 - [email protected]
+
+- TTY: do not update atime/mtime on read/write (bnc#797175
+  CVE-2013-0160).
+- commit 7d04bee
+
+-------------------------------------------------------------------
+Fri Feb 22 12:41:08 CET 2013 - [email protected]
+
+- Btrfs: fix hash overflow handling (FATE#312888).
+- commit b26c055
+
+-------------------------------------------------------------------
@@ -72,0 +148,6 @@
+
+-------------------------------------------------------------------
+Wed Feb  6 20:46:30 CET 2013 - [email protected]
+
+- Fix whitespace in several patches to make series2git happy.
+- commit dc7f072
kernel-debug.changes: same change
kernel-default.changes: same change
kernel-desktop.changes: same change
kernel-docs.changes: same change
kernel-ec2.changes: same change
kernel-exynos.changes: same change
kernel-highbank.changes: same change
kernel-imx51.changes: same change
kernel-omap2plus.changes: same change
kernel-pae.changes: same change
kernel-s390.changes: same change
kernel-source.changes: same change
kernel-syms.changes: same change
kernel-trace.changes: same change
kernel-u8500.changes: same change
kernel-vanilla.changes: same change
kernel-versatile.changes: same change
kernel-xen.changes: same change

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kernel-cubox.spec ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -20,7 +20,7 @@
 # needssslcertforbuild
 
 %define srcversion 3.7
-%define patchversion 3.7.9
+%define patchversion 3.7.10
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -59,7 +59,7 @@
 
 Name:           kernel-cubox
 Summary:        Kernel for SolidRun Cubox
-Version:        3.7.9
+Version:        3.7.10
 Release:        0
 License:        GPL-2.0
 Group:          System/Kernel

kernel-debug.spec: same change
kernel-default.spec: same change
kernel-desktop.spec: same change
++++++ kernel-docs.spec ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -17,14 +17,14 @@
 
 # norootforbuild
 
-%define patchversion 3.7.9
+%define patchversion 3.7.10
 %define variant %{nil}
 
 %include %_sourcedir/kernel-spec-macros
 
 Name:           kernel-docs
 Summary:        Kernel Documentation
-Version:        3.7.9
+Version:        3.7.10
 Release:        0
 BuildRequires:  docbook-toys docbook-utils ghostscript_any libjpeg-devel 
texlive transfig xmlto xorg-x11-devel
 BuildRequires:  kernel-source%variant

++++++ kernel-ec2.spec ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -20,7 +20,7 @@
 # needssslcertforbuild
 
 %define srcversion 3.7
-%define patchversion 3.7.9
+%define patchversion 3.7.10
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -59,7 +59,7 @@
 
 Name:           kernel-ec2
 Summary:        The Amazon EC2 Xen Kernel
-Version:        3.7.9
+Version:        3.7.10
 Release:        0
 License:        GPL-2.0
 Group:          System/Kernel

kernel-exynos.spec: same change
kernel-highbank.spec: same change
kernel-imx51.spec: same change
kernel-omap2plus.spec: same change
kernel-pae.spec: same change
kernel-s390.spec: same change
++++++ kernel-source.spec ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -19,7 +19,7 @@
 # icecream 0
 
 %define srcversion 3.7
-%define patchversion 3.7.9
+%define patchversion 3.7.10
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -29,7 +29,7 @@
 
 Name:           kernel-source
 Summary:        The Linux Kernel Sources
-Version:        3.7.9
+Version:        3.7.10
 Release:        0
 License:        GPL-2.0
 Group:          Development/Sources

++++++ kernel-syms.spec ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -23,7 +23,7 @@
 
 Name:           kernel-syms
 Summary:        Kernel Symbol Versions (modversions)
-Version:        3.7.9
+Version:        3.7.10
 %if %using_buildservice
 Release:        0
 %else

++++++ kernel-trace.spec ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -20,7 +20,7 @@
 # needssslcertforbuild
 
 %define srcversion 3.7
-%define patchversion 3.7.9
+%define patchversion 3.7.10
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -59,7 +59,7 @@
 
 Name:           kernel-trace
 Summary:        The Standard Kernel with Tracing Features
-Version:        3.7.9
+Version:        3.7.10
 Release:        0
 License:        GPL-2.0
 Group:          System/Kernel

kernel-u8500.spec: same change
kernel-vanilla.spec: same change
kernel-versatile.spec: same change
kernel-xen.spec: same change
++++++ README.SUSE ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:53.000000000 +0100
@@ -1,4 +1,4 @@
-WORKING WITH THE SUSE 2.6.x KERNEL SOURCES
+WORKING WITH THE SUSE KERNEL SOURCES
 
 Andreas Gruenbacher <[email protected]>, SUSE Labs, 2003, 2004, 2005, 2006
 Michal Marek <[email protected]>, SUSE Labs, 2010
@@ -308,12 +308,12 @@
       $ for f in patches.*.tar.bz2; do         \
          tar -xjf "$f" || break;               \
        done
-      $ tar -xjf linux-2.6.5.tar.bz2
+      $ tar -xjf linux-3.7.tar.bz2
 
     # Apply the patches
 
       $ for p in $(./guards < series.conf); do
-         patch -d linux-2.6.5 -p1 < $p || break
+         patch -d linux-3.7 -p1 < $p || break
        done
 
 The configuration script config.conf which is similar to series.conf is
@@ -334,7 +334,7 @@
 The kernel-$FLAVOR packages are based on config/$ARCH/$FLAVOR.
 (kernel-default is based on config/$ARCH/default, for example). The
 kernel-$FLAVOR packages install their configuration files as
-/boot/config-$VER_STR (for example, /boot/config-2.6.5-99-default). The
+/boot/config-$VER_STR (for example, /boot/config-3.7.6-99-default). The
 config is also packaged in the kernel-$FLAVOR-devel package as
 /usr/src/linux-obj/$ARCH/$FLAVOR/.config.
 
@@ -422,21 +422,21 @@
 MODULE LOAD PATHS
 
 Modules that belong to a specific kernel release are installed in
-/lib/modules/2.6.5-99-smp and similar. Note that this path contains the
+/lib/modules/3.7.6-99-smp and similar. Note that this path contains the
 kernel package release number. Modules from KMPs must be installed
-below /lib/modules/2.6.5-99-smp/updates/ and similar: modules below
+below /lib/modules/3.7.6-99-smp/updates/ and similar: modules below
 updates/ have priority over other modules.
 
 When KMPs contain modules that are compatible between multiple installed
 kernels, symlinks are used to make those modules available to those
 compatible kernels like this:
 
-  /lib/modules/2.6.16-100-smp/weak-updates/foo.ko ->
-      /lib/modules/2.6.16-99-smp/updates/foo.ko
+  /lib/modules/3.7.6-100-smp/weak-updates/foo.ko ->
+      /lib/modules/3.7.6-99-smp/updates/foo.ko
 
 Modules in the weak-updates directory have lower priority than modules
-in /lib/modules/2.6.16-100-smp/updates/, and higher priority than other
-modules in /lib/modules/2.6.16-100-smp.
+in /lib/modules/3.7.6-100-smp/updates/, and higher priority than other
+modules in /lib/modules/3.7.6-100-smp.
 
 
 REFERENCES

++++++ kabi.tar.bz2 ++++++
++++ 1176037 lines of diff (skipped)

++++++ patches.arch.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.arch/arm-origen-regulator.patch 
new/patches.arch/arm-origen-regulator.patch
--- old/patches.arch/arm-origen-regulator.patch 2012-10-22 18:06:28.000000000 
+0200
+++ new/patches.arch/arm-origen-regulator.patch 2013-02-25 19:05:12.000000000 
+0100
@@ -28,11 +28,11 @@
 @@ -121,6 +121,7 @@ static struct regulator_consumer_supply __initdata 
ldo14_consumer[] = {
  };
  static struct regulator_consumer_supply __initdata ldo17_consumer[] = {
-       REGULATOR_SUPPLY("vdd33", "swb-a31"), /* AR6003 WLAN & CSR 8810 BT */
+       REGULATOR_SUPPLY("vdd33", "swb-a31"), /* AR6003 WLAN & CSR 8810 BT */
 +      REGULATOR_SUPPLY("vmmc", NULL),
  };
  static struct regulator_consumer_supply __initdata buck1_consumer[] = {
-       REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
+       REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
 --- linus.orig/arch/arm/mach-exynos/mach-smdkv310.c
 +++ linus/arch/arm/mach-exynos/mach-smdkv310.c
 @@ -14,6 +14,8 @@
@@ -45,7 +45,7 @@
  #include <linux/io.h>
  #include <linux/i2c.h>
 @@ -380,6 +382,14 @@ static void __init smdkv310_reserve(void
-       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
+       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
  }
 
 +static struct regulator_consumer_supply vddmmc_consumers[] __devinitdata = {
@@ -58,15 +58,15 @@
 +
  static void __init smdkv310_machine_init(void)
  {
-       s3c_i2c1_set_platdata(NULL);
+       s3c_i2c1_set_platdata(NULL);
 @@ -387,6 +397,9 @@ static void __init smdkv310_machine_init
 
-       smdkv310_smsc911x_init();
+       smdkv310_smsc911x_init();
 
 +      regulator_register_always_on(0, "fixed-3.3V", vddmmc_consumers,
 +                                   ARRAY_SIZE(vddmmc_consumers), 3300000);
 +
-       s3c_sdhci0_set_platdata(&smdkv310_hsmmc0_pdata);
-       s3c_sdhci1_set_platdata(&smdkv310_hsmmc1_pdata);
-       s3c_sdhci2_set_platdata(&smdkv310_hsmmc2_pdata);
+       s3c_sdhci0_set_platdata(&smdkv310_hsmmc0_pdata);
+       s3c_sdhci1_set_platdata(&smdkv310_hsmmc1_pdata);
+       s3c_sdhci2_set_platdata(&smdkv310_hsmmc2_pdata);
 

++++++ patches.fixes.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/TTY-do-not-update-atime-mtime-on-read-write.patch 
new/patches.fixes/TTY-do-not-update-atime-mtime-on-read-write.patch
--- old/patches.fixes/TTY-do-not-update-atime-mtime-on-read-write.patch 
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.fixes/TTY-do-not-update-atime-mtime-on-read-write.patch 
2013-02-26 04:27:14.000000000 +0100
@@ -0,0 +1,55 @@
+From: Jiri Slaby <[email protected]>
+Subject: TTY: do not update atime/mtime on read/write
+Patch-mainline: 3.9-rc1
+References: bnc#797175 CVE-2013-0160
+
+On http://vladz.devzero.fr/013_ptmx-timing.php, we can see how to find
+out length of a password using timestamps of /dev/ptmx. It is
+documented in "Timing Analysis of Keystrokes and Timing Attacks on
+SSH". To avoid that problem, do not update time when reading
+from/writing to a TTY.
+
+I am afraid of regressions as this is a behavior we have since 0.97
+and apps may expect the time to be current, e.g. for monitoring
+whether there was a change on the TTY. Now, there is no change. So
+this would better have a lot of testing before it goes upstream.
+
+References: CVE-2013-0160
+
+Signed-off-by: Jiri Slaby <[email protected]>
+Cc: stable <[email protected]> # after 3.9 is out
+Signed-off-by: Greg Kroah-Hartman <[email protected]>
+---
+ drivers/tty/tty_io.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
+index 54a254a..8f44d62 100644
+--- a/drivers/tty/tty_io.c
++++ b/drivers/tty/tty_io.c
+@@ -977,8 +977,7 @@ static ssize_t tty_read(struct file *file, char __user 
*buf, size_t count,
+       else
+               i = -EIO;
+       tty_ldisc_deref(ld);
+-      if (i > 0)
+-              inode->i_atime = current_fs_time(inode->i_sb);
++
+       return i;
+ }
+ 
+@@ -1079,11 +1078,8 @@ static inline ssize_t do_tty_write(
+                       break;
+               cond_resched();
+       }
+-      if (written) {
+-              struct inode *inode = file->f_path.dentry->d_inode;
+-              inode->i_mtime = current_fs_time(inode->i_sb);
++      if (written)
+               ret = written;
+-      }
+ out:
+       tty_write_unlock(tty);
+       return ret;
+-- 
+1.8.1.4
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/drm-nouveau-vm-fix-memory-corruption-when-pgt-alloca.patch 
new/patches.fixes/drm-nouveau-vm-fix-memory-corruption-when-pgt-alloca.patch
--- 
old/patches.fixes/drm-nouveau-vm-fix-memory-corruption-when-pgt-alloca.patch    
    2013-02-19 09:08:52.000000000 +0100
+++ 
new/patches.fixes/drm-nouveau-vm-fix-memory-corruption-when-pgt-alloca.patch    
    1970-01-01 01:00:00.000000000 +0100
@@ -1,43 +0,0 @@
-From: Marcin Slusarz <[email protected]>
-Date: Mon, 10 Dec 2012 21:30:51 +0100
-Subject: drm/nouveau/vm: fix memory corruption when pgt allocation fails
-Git-commit: cfd376b6bfccf33782a0748a9c70f7f752f8b869
-Patch-mainline: v3.8-rc6
-References: bnc#802347
-
-If we return freed vm, nouveau_drm_open will happily call nouveau_cli_destroy,
-which will try to free it again.
-
-Reported-by: Peter Hurley <[email protected]>
-Signed-off-by: Marcin Slusarz <[email protected]>
-Signed-off-by: Ben Skeggs <[email protected]>
-Signed-off-by: Jiri Slaby <[email protected]>
----
- drivers/gpu/drm/nouveau/core/subdev/vm/base.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/nouveau/core/subdev/vm/base.c 
b/drivers/gpu/drm/nouveau/core/subdev/vm/base.c
-index 082c11b..77c67fc 100644
---- a/drivers/gpu/drm/nouveau/core/subdev/vm/base.c
-+++ b/drivers/gpu/drm/nouveau/core/subdev/vm/base.c
-@@ -352,7 +352,7 @@ nouveau_vm_create(struct nouveau_vmmgr *vmm, u64 offset, 
u64 length,
-       u64 mm_length = (offset + length) - mm_offset;
-       int ret;
- 
--      vm = *pvm = kzalloc(sizeof(*vm), GFP_KERNEL);
-+      vm = kzalloc(sizeof(*vm), GFP_KERNEL);
-       if (!vm)
-               return -ENOMEM;
- 
-@@ -376,6 +376,8 @@ nouveau_vm_create(struct nouveau_vmmgr *vmm, u64 offset, 
u64 length,
-               return ret;
-       }
- 
-+      *pvm = vm;
-+
-       return 0;
- }
- 
--- 
-1.8.1.2
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/ext4-fix-error-handling-in-ext4_fill_super 
new/patches.fixes/ext4-fix-error-handling-in-ext4_fill_super
--- old/patches.fixes/ext4-fix-error-handling-in-ext4_fill_super        
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.fixes/ext4-fix-error-handling-in-ext4_fill_super        
2013-02-26 04:27:14.000000000 +0100
@@ -0,0 +1,110 @@
+From 07aa2ea13814ea60d12f7330b6d5ccfdb0c3ba4d Mon Sep 17 00:00:00 2001
+From: Lukas Czerner <[email protected]>
+Date: Thu, 8 Nov 2012 15:16:54 -0500
+Subject: ext4: fix error handling in ext4_fill_super()
+Git-commit: 07aa2ea13814ea60d12f7330b6d5ccfdb0c3ba4d
+Patch-mainline: v3.8-rc2
+
+Commit 07aa2ea13814ea60d12f7330b6d5ccfdb0c3ba4d upstream.
+
+There are some places in ext4_fill_super() where we would not return
+proper error code if something fails. The confusion is caused probably
+due to the fact that we have two "kind-of" return variables 'ret'and
+'err'.
+
+'ret' is used to return error code from ext4_fill_super() where err is
+used to store return values from other functions within ext4_fill_super().
+However some places were missing the obligatory 'ret = err'. We could
+put the assignment where it is missing, but we can have better "future
+proof" solution. Or we could convert the code to use just one, but it
+would require more rewrites.
+
+This commit fixes the problem by returning value from 'err' variable if
+it is set and 'ret' otherwise in error handling branch of the
+ext4_fill_super(). The reasoning is that 'ret' value is often set to
+default "-EINVAL" or explicit value, where 'err' is used to store
+return value from other functions and should be otherwise zero.
+
+https://bugzilla.kernel.org/show_bug.cgi?id=48431
+
+Signed-off-by: Lukas Czerner <[email protected]>
+Signed-off-by: "Theodore Ts'o" <[email protected]>
+Signed-off-by: Jeff Mahoney <[email protected]>
+---
+ fs/ext4/super.c |   16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -3266,7 +3266,7 @@ static int ext4_fill_super(struct super_
+       unsigned int i;
+       int needs_recovery, has_huge_files, has_bigalloc;
+       __u64 blocks_count;
+-      int err;
++      int err = 0;
+       unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
+       ext4_group_t first_not_zeroed;
+ 
+@@ -3295,6 +3295,7 @@ static int ext4_fill_super(struct super_
+       for (cp = sb->s_id; (cp = strchr(cp, '/'));)
+               *cp = '!';
+ 
++      /* -EINVAL is default */
+       ret = -EINVAL;
+       blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE);
+       if (!blocksize) {
+@@ -3664,7 +3665,6 @@ static int ext4_fill_super(struct super_
+                        " too large to mount safely on this system");
+               if (sizeof(sector_t) < 8)
+                       ext4_msg(sb, KERN_WARNING, "CONFIG_LBDAF not enabled");
+-              ret = err;
+               goto failed_mount;
+       }
+ 
+@@ -3772,7 +3772,6 @@ static int ext4_fill_super(struct super_
+       }
+       if (err) {
+               ext4_msg(sb, KERN_ERR, "insufficient memory");
+-              ret = err;
+               goto failed_mount3;
+       }
+ 
+@@ -3899,8 +3898,8 @@ no_journal:
+       if (es->s_overhead_clusters)
+               sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters);
+       else {
+-              ret = ext4_calculate_overhead(sb);
+-              if (ret)
++              err = ext4_calculate_overhead(sb);
++              if (err)
+                       goto failed_mount_wq;
+       }
+ 
+@@ -3912,6 +3911,7 @@ no_journal:
+               alloc_workqueue("ext4-dio-unwritten", WQ_MEM_RECLAIM | 
WQ_UNBOUND, 1);
+       if (!EXT4_SB(sb)->dio_unwritten_wq) {
+               printk(KERN_ERR "EXT4-fs: failed to create DIO workqueue\n");
++              ret = -ENOMEM;
+               goto failed_mount_wq;
+       }
+ 
+@@ -4014,8 +4014,8 @@ no_journal:
+       /* Enable quota usage during mount. */
+       if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA) &&
+           !(sb->s_flags & MS_RDONLY)) {
+-              ret = ext4_enable_quotas(sb);
+-              if (ret)
++              err = ext4_enable_quotas(sb);
++              if (err)
+                       goto failed_mount7;
+       }
+ #endif  /* CONFIG_QUOTA */
+@@ -4086,7 +4086,7 @@ out_fail:
+       kfree(sbi);
+ out_free_orig:
+       kfree(orig_data);
+-      return ret;
++      return err ? err : ret;
+ }
+ 
+ /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/ext4-release-sysfs-kobject-when-failing-to-enable-quotas-on-mount
 
new/patches.fixes/ext4-release-sysfs-kobject-when-failing-to-enable-quotas-on-mount
--- 
old/patches.fixes/ext4-release-sysfs-kobject-when-failing-to-enable-quotas-on-mount
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.fixes/ext4-release-sysfs-kobject-when-failing-to-enable-quotas-on-mount
 2013-02-26 04:27:14.000000000 +0100
@@ -0,0 +1,58 @@
+From: Theodore Ts'o <[email protected]>
+Date: Fri, 25 Jan 2013 04:24:54 +0000 (-0500)
+Subject: ext4: release sysfs kobject when failing to enable quotas on mount
+Git-commit: 72ba74508b2857e71d65fc93f0d6b684492fc740
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git
+Patch-mainline: Queued in subsystem maintainer repo
+
+ext4: release sysfs kobject when failing to enable quotas on mount
+
+In addition, print the error returned from ext4_enable_quotas()
+
+Signed-off-by: "Theodore Ts'o" <[email protected]>
+Reviewed-by: Carlos Maiolino <[email protected]>
+Cc: [email protected]
+Acked-by: Jeff Mahoney <[email protected]>
+---
+
+ fs/ext4/super.c |   12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index c014edd..3ac3060 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -4009,7 +4009,7 @@ no_journal:
+           !(sb->s_flags & MS_RDONLY)) {
+               err = ext4_enable_quotas(sb);
+               if (err)
+-                      goto failed_mount7;
++                      goto failed_mount8;
+       }
+ #endif  /* CONFIG_QUOTA */
+ 
+@@ -4036,6 +4036,10 @@ cantfind_ext4:
+               ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
+       goto failed_mount;
+ 
++#ifdef CONFIG_QUOTA
++failed_mount8:
++      kobject_del(&sbi->s_kobj);
++#endif
+ failed_mount7:
+       ext4_unregister_li_request(sb);
+ failed_mount6:
+@@ -5006,9 +5010,9 @@ static int ext4_enable_quotas(struct super_block *sb)
+                                               DQUOT_USAGE_ENABLED);
+                       if (err) {
+                               ext4_warning(sb,
+-                                      "Failed to enable quota (type=%d) "
+-                                      "tracking. Please run e2fsck to fix.",
+-                                      type);
++                                      "Failed to enable quota tracking "
++                                      "(type=%d, err=%d). Please run "
++                                      "e2fsck to fix.", type, err);
+                               return err;
+                       }
+               }
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/kvm-ioapic.patch 
new/patches.fixes/kvm-ioapic.patch
--- old/patches.fixes/kvm-ioapic.patch  2013-02-19 09:08:52.000000000 +0100
+++ new/patches.fixes/kvm-ioapic.patch  2013-02-26 04:27:14.000000000 +0100
@@ -10,8 +10,8 @@
 --- a/virt/kvm/ioapic.c
 +++ b/virt/kvm/ioapic.c
 @@ -205,7 +205,8 @@ int kvm_ioapic_set_irq(struct kvm_ioapic
-       irq_level = __kvm_irq_line_state(&ioapic->irq_states[irq],
-                                        irq_source_id, level);
+       irq_level = __kvm_irq_line_state(&ioapic->irq_states[irq],
+                                        irq_source_id, level);
        entry = ioapic->redirtbl[irq];
 -      irq_level ^= entry.fields.polarity;
 +// polarity is always active high in qemu
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/kvm-macos.patch 
new/patches.fixes/kvm-macos.patch
--- old/patches.fixes/kvm-macos.patch   2013-02-19 09:08:52.000000000 +0100
+++ new/patches.fixes/kvm-macos.patch   2013-02-26 04:27:14.000000000 +0100
@@ -61,7 +61,7 @@
 +      case MSR_NHM_SNB_PKG_CST_CFG_CTL: /* 0xe2 */
                data = 0;
                break;
-       case MSR_P6_PERFCTR0:
+       case MSR_P6_PERFCTR0:
 --- a/arch/x86/kvm/cpuid.c
 +++ b/arch/x86/kvm/cpuid.c
 @@ -1985,7 +1987,7 @@ static void do_cpuid_ent(struct kvm_cpui
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/nfs-connect-timeout 
new/patches.fixes/nfs-connect-timeout
--- old/patches.fixes/nfs-connect-timeout       2013-02-19 09:08:52.000000000 
+0100
+++ new/patches.fixes/nfs-connect-timeout       2013-02-26 04:27:14.000000000 
+0100
@@ -38,8 +38,8 @@
 --- a/include/linux/sunrpc/sched.h
 +++ b/include/linux/sunrpc/sched.h
 @@ -236,6 +236,7 @@ void               rpc_wake_up_queued_task(struct 
rpc_wait_queue *,
-                                       bool (*)(struct rpc_task *, void *),
-                                       void *);
+                                       bool (*)(struct rpc_task *, void *),
+                                       void *);
  void          rpc_wake_up_status(struct rpc_wait_queue *, int);
 +void          rpc_wake_up_softconn_status(struct rpc_wait_queue *, int);
  int           rpc_queue_empty(struct rpc_wait_queue *);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/remount-no-shrink-dcache 
new/patches.fixes/remount-no-shrink-dcache
--- old/patches.fixes/remount-no-shrink-dcache  2013-02-19 09:08:52.000000000 
+0100
+++ new/patches.fixes/remount-no-shrink-dcache  2013-02-26 04:27:14.000000000 
+0100
@@ -53,7 +53,7 @@
        if (remount_ro) {
 -              if (force) {
 +              if (rflags & REMOUNT_FORCE) {
-                       mark_files_ro(sb);
+                       mark_files_ro(sb);
                } else {
                        retval = sb_prepare_remount_readonly(sb);
 @@ -728,7 +723,7 @@ int do_remount_sb(struct super_block *sb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/scsi-dh-queuedata-accessors 
new/patches.fixes/scsi-dh-queuedata-accessors
--- old/patches.fixes/scsi-dh-queuedata-accessors       2013-02-19 
09:08:52.000000000 +0100
+++ new/patches.fixes/scsi-dh-queuedata-accessors       2013-02-26 
04:27:14.000000000 +0100
@@ -28,8 +28,8 @@
 -      sdev = q->queuedata;
 +      sdev = scsi_device_from_queue(q);
        if (!sdev) {
-               spin_unlock_irqrestore(q->queue_lock, flags);
-               err = SCSI_DH_NOSYS;
+               spin_unlock_irqrestore(q->queue_lock, flags);
+               err = SCSI_DH_NOSYS;
 @@ -484,7 +484,7 @@ int scsi_dh_attach(struct request_queue
                return -EINVAL;
  
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/sock_diag-simplify-sock_diag_handlers-handling-in-_sock_diag_rcv_msg
 
new/patches.fixes/sock_diag-simplify-sock_diag_handlers-handling-in-_sock_diag_rcv_msg
--- 
old/patches.fixes/sock_diag-simplify-sock_diag_handlers-handling-in-_sock_diag_rcv_msg
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.fixes/sock_diag-simplify-sock_diag_handlers-handling-in-_sock_diag_rcv_msg
      2013-02-26 04:27:14.000000000 +0100
@@ -0,0 +1,67 @@
+From 8e904550d0fffcda2b18d7ab12750b0c75757e89 Mon Sep 17 00:00:00 2001
+From: Mathias Krause <[email protected]>
+Date: Sat, 23 Feb 2013 01:13:48 +0000
+Subject: sock_diag: Simplify sock_diag_handlers[] handling in 
__sock_diag_rcv_msg
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+Git-commit: 8e904550d0fffcda2b18d7ab12750b0c75757e89
+Patch-mainline: Queued in subsystem maintainer repo
+References: bnc#805633 CVE-2013-1763
+
+The sock_diag_lock_handler() and sock_diag_unlock_handler() actually
+make the code less readable. Get rid of them and make the lock usage
+and access to sock_diag_handlers[] clear on the first sight.
+
+Signed-off-by: Mathias Krause <[email protected]>
+Signed-off-by: David S. Miller <[email protected]>
+Acked-by: Jeff Mahoney <[email protected]>
+---
+ net/core/sock_diag.c |   24 +++++++-----------------
+ 1 files changed, 7 insertions(+), 17 deletions(-)
+
+diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
+index 750f44f..a29e90c 100644
+--- a/net/core/sock_diag.c
++++ b/net/core/sock_diag.c
+@@ -97,21 +97,6 @@ void sock_diag_unregister(const struct sock_diag_handler 
*hnld)
+ }
+ EXPORT_SYMBOL_GPL(sock_diag_unregister);
+ 
+-static const inline struct sock_diag_handler *sock_diag_lock_handler(int 
family)
+-{
+-      if (sock_diag_handlers[family] == NULL)
+-              request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
+-                              NETLINK_SOCK_DIAG, family);
+-
+-      mutex_lock(&sock_diag_table_mutex);
+-      return sock_diag_handlers[family];
+-}
+-
+-static inline void sock_diag_unlock_handler(const struct sock_diag_handler *h)
+-{
+-      mutex_unlock(&sock_diag_table_mutex);
+-}
+-
+ static int __sock_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+ {
+       int err;
+@@ -124,12 +109,17 @@ static int __sock_diag_rcv_msg(struct sk_buff *skb, 
struct nlmsghdr *nlh)
+       if (req->sdiag_family >= AF_MAX)
+               return -EINVAL;
+ 
+-      hndl = sock_diag_lock_handler(req->sdiag_family);
++      if (sock_diag_handlers[req->sdiag_family] == NULL)
++              request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
++                              NETLINK_SOCK_DIAG, req->sdiag_family);
++
++      mutex_lock(&sock_diag_table_mutex);
++      hndl = sock_diag_handlers[req->sdiag_family];
+       if (hndl == NULL)
+               err = -ENOENT;
+       else
+               err = hndl->dump(skb, nlh);
+-      sock_diag_unlock_handler(hndl);
++      mutex_unlock(&sock_diag_table_mutex);
+ 
+       return err;
+ }
+

++++++ patches.kernel.org.tar.bz2 ++++++
++++ 2478 lines of diff (skipped)

++++++ patches.suse.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/0016-ext4-Implement-richacl-support-in-ext4.patch 
new/patches.suse/0016-ext4-Implement-richacl-support-in-ext4.patch
--- old/patches.suse/0016-ext4-Implement-richacl-support-in-ext4.patch  
2013-02-11 15:18:11.000000000 +0100
+++ new/patches.suse/0016-ext4-Implement-richacl-support-in-ext4.patch  
2013-02-25 20:57:27.000000000 +0100
@@ -27,7 +27,7 @@
 
 --- a/fs/ext4/Kconfig
 +++ b/fs/ext4/Kconfig
-@@ -83,3 +83,13 @@ config EXT4_DEBUG
+@@ -85,3 +85,13 @@ config EXT4_DEBUG
  
          If you select Y here, then you will be able to turn on debugging
          with a command such as "echo 1 > /sys/kernel/debug/ext4/mballoc-debug"
@@ -50,7 +50,7 @@
 +ext4-$(CONFIG_EXT4_FS_RICHACL)                += richacl.o
 --- a/fs/ext4/ext4.h
 +++ b/fs/ext4/ext4.h
-@@ -908,6 +908,10 @@ struct ext4_inode_info {
+@@ -924,6 +924,10 @@ struct ext4_inode_info {
  
        /* Precomputed uuid+inum+igen checksum for seeding inode checksums */
        __u32 i_csum_seed;
@@ -71,7 +71,7 @@
  
  /*
   * Called when an inode is released. Note that this is different
-@@ -258,5 +259,8 @@ const struct inode_operations ext4_file_
+@@ -334,5 +335,8 @@ const struct inode_operations ext4_file_
  #endif
        .get_acl        = ext4_get_acl,
        .fiemap         = ext4_fiemap,
@@ -90,7 +90,7 @@
  
  #include <trace/events/ext4.h>
  
-@@ -861,7 +862,11 @@ got:
+@@ -908,7 +909,11 @@ got:
        if (err)
                goto fail_drop;
  
@@ -113,7 +113,7 @@
  
  #include <trace/events/ext4.h>
  
-@@ -3654,6 +3655,9 @@ struct inode *ext4_iget(struct super_blo
+@@ -3828,6 +3829,9 @@ struct inode *ext4_iget(struct super_blo
        set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
  
        ext4_clear_state_flags(ei);     /* Only relevant on 32-bit archs */
@@ -123,7 +123,7 @@
        ei->i_dir_start_lookup = 0;
        ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
        /* We now have enough fields to check if the inode was active or not.
-@@ -4078,7 +4082,11 @@ int ext4_setattr(struct dentry *dentry,
+@@ -4253,7 +4257,11 @@ int ext4_setattr(struct dentry *dentry,
        int orphan = 0;
        const unsigned int ia_valid = attr->ia_valid;
  
@@ -136,7 +136,7 @@
        if (error)
                return error;
  
-@@ -4178,9 +4186,12 @@ int ext4_setattr(struct dentry *dentry,
+@@ -4361,9 +4369,12 @@ int ext4_setattr(struct dentry *dentry,
        if (orphan && inode->i_nlink)
                ext4_orphan_del(NULL, inode);
  
@@ -162,7 +162,7 @@
  
  #include <trace/events/ext4.h>
  /*
-@@ -2587,6 +2588,9 @@ const struct inode_operations ext4_dir_i
+@@ -3052,6 +3053,9 @@ const struct inode_operations ext4_dir_i
  #endif
        .get_acl        = ext4_get_acl,
        .fiemap         = ext4_fiemap,
@@ -172,7 +172,7 @@
  };
  
  const struct inode_operations ext4_special_inode_operations = {
-@@ -2598,4 +2602,7 @@ const struct inode_operations ext4_speci
+@@ -3063,4 +3067,7 @@ const struct inode_operations ext4_speci
        .removexattr    = generic_removexattr,
  #endif
        .get_acl        = ext4_get_acl,
@@ -545,7 +545,7 @@
  
  #define CREATE_TRACE_POINTS
  #include <trace/events/ext4.h>
-@@ -921,7 +922,9 @@ static struct inode *ext4_alloc_inode(st
+@@ -937,7 +938,9 @@ static struct inode *ext4_alloc_inode(st
        ei = kmem_cache_alloc(ext4_inode_cachep, GFP_NOFS);
        if (!ei)
                return NULL;
@@ -556,7 +556,7 @@
        ei->vfs_inode.i_version = 1;
        ei->vfs_inode.i_data.writeback_index = 0;
        memset(&ei->i_cached_extent, 0, sizeof(struct ext4_ext_cache));
-@@ -1009,6 +1012,13 @@ void ext4_clear_inode(struct inode *inod
+@@ -1030,6 +1033,13 @@ void ext4_clear_inode(struct inode *inod
        invalidate_inode_buffers(inode);
        clear_inode(inode);
        dquot_drop(inode);
@@ -570,7 +570,7 @@
        ext4_discard_preallocations(inode);
        if (EXT4_I(inode)->jinode) {
                jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
-@@ -1171,7 +1181,7 @@ enum {
+@@ -1207,7 +1217,7 @@ enum {
        Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
        Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
        Opt_nouid32, Opt_debug, Opt_removed,
@@ -579,7 +579,7 @@
        Opt_auto_da_alloc, Opt_noauto_da_alloc, Opt_noload,
        Opt_commit, Opt_min_batch_time, Opt_max_batch_time,
        Opt_journal_dev, Opt_journal_checksum, Opt_journal_async_commit,
-@@ -1208,6 +1218,7 @@ static const match_table_t tokens = {
+@@ -1245,6 +1255,7 @@ static const match_table_t tokens = {
        {Opt_user_xattr, "user_xattr"},
        {Opt_nouser_xattr, "nouser_xattr"},
        {Opt_acl, "acl"},
@@ -587,7 +587,7 @@
        {Opt_noacl, "noacl"},
        {Opt_noload, "norecovery"},
        {Opt_noload, "noload"},
-@@ -1457,6 +1468,9 @@ static int handle_mount_opt(struct super
+@@ -1508,6 +1519,9 @@ static int handle_mount_opt(struct super
        case Opt_nouser_xattr:
                ext4_msg(sb, KERN_WARNING, deprecated_msg, opt, "3.5");
                break;
@@ -597,7 +597,7 @@
        case Opt_sb:
                return 1;       /* handled by get_sb_block() */
        case Opt_removed:
-@@ -1648,6 +1662,10 @@ static int parse_options(char *options,
+@@ -1709,6 +1723,10 @@ static int parse_options(char *options,
                        return 0;
                }
        }
@@ -608,9 +608,9 @@
        return 1;
  }
  
-@@ -1772,6 +1790,9 @@ static int _ext4_show_options(struct seq
-       if (nodefs || sbi->s_max_dir_size_kb)
-               SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
+@@ -1837,6 +1855,9 @@ static int _ext4_show_options(struct seq
+       if (nodefs || sbi->s_max_dir_size_kb)
+               SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
  
 +      if (sb->s_flags & MS_RICHACL)
 +              SEQ_OPTS_PUTS("richacl");
@@ -618,15 +618,15 @@
        ext4_show_quota_options(seq, sb);
        return 0;
  }
-@@ -2983,6 +3004,7 @@ static int ext4_fill_super(struct super_
-       int err;
+@@ -3269,6 +3290,7 @@ static int ext4_fill_super(struct super_
+       int err = 0;
        unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
        ext4_group_t first_not_zeroed;
 +      unsigned long acl_flags = 0;
  
        sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
        if (!sbi)
-@@ -3054,7 +3076,7 @@ static int ext4_fill_super(struct super_
+@@ -3383,7 +3405,7 @@ static int ext4_fill_super(struct super_
  #ifdef CONFIG_EXT4_FS_XATTR
        set_opt(sb, XATTR_USER);
  #endif
@@ -635,7 +635,7 @@
        set_opt(sb, POSIX_ACL);
  #endif
        set_opt(sb, MBLK_IO_SUBMIT);
-@@ -3137,8 +3159,12 @@ static int ext4_fill_super(struct super_
+@@ -3457,8 +3479,12 @@ static int ext4_fill_super(struct super_
                        clear_opt(sb, DELALLOC);
        }
  
@@ -650,7 +650,7 @@
  
        if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV &&
            (EXT4_HAS_COMPAT_FEATURE(sb, ~0U) ||
-@@ -4249,6 +4275,7 @@ static int ext4_remount(struct super_blo
+@@ -4587,6 +4613,7 @@ static int ext4_remount(struct super_blo
        ext4_group_t g;
        unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
        int err = 0;
@@ -658,7 +658,7 @@
  #ifdef CONFIG_QUOTA
        int i;
  #endif
-@@ -4283,8 +4310,12 @@ static int ext4_remount(struct super_blo
+@@ -4620,8 +4647,12 @@ static int ext4_remount(struct super_blo
        if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
                ext4_abort(sb, "Abort forced by user");
  
@@ -705,7 +705,7 @@
  
  struct ext4_xattr_header {
        __le32  h_magic;        /* magic number for identification */
-@@ -70,6 +71,10 @@ extern const struct xattr_handler ext4_x
+@@ -72,6 +73,10 @@ extern const struct xattr_handler ext4_x
  extern const struct xattr_handler ext4_xattr_acl_access_handler;
  extern const struct xattr_handler ext4_xattr_acl_default_handler;
  extern const struct xattr_handler ext4_xattr_security_handler;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0955-fix-hash-overflow-handling.patch 
new/patches.suse/btrfs-0955-fix-hash-overflow-handling.patch
--- old/patches.suse/btrfs-0955-fix-hash-overflow-handling.patch        
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.suse/btrfs-0955-fix-hash-overflow-handling.patch        
2013-02-25 20:57:27.000000000 +0100
@@ -0,0 +1,192 @@
+From: Chris Mason <[email protected]>
+Date: Mon, 17 Dec 2012 14:26:57 -0500
+Patch-mainline: 3.8
+Git-commit: 9c52057c698fb96f8f07e7a4bcf4801a092bda89
+References: bnc#804738
+Subject: [PATCH] Btrfs: fix hash overflow handling
+
+The handling for directory crc hash overflows was fairly obscure,
+split_leaf returns EOVERFLOW when we try to extend the item and that is
+supposed to bubble up to userland.  For a while it did so, but along the
+way we added better handling of errors and forced the FS readonly if we
+hit IO errors during the directory insertion.
+
+Along the way, we started testing only for EEXIST and the EOVERFLOW case
+was dropped.  The end result is that we may force the FS readonly if we
+catch a directory hash bucket overflow.
+
+This fixes a few problem spots.  First I add tests for EOVERFLOW in the
+places where we can safely just return the error up the chain.
+
+btrfs_rename is harder though, because it tries to insert the new
+directory item only after it has already unlinked anything the rename
+was going to overwrite.  Rather than adding very complex logic, I added
+a helper to test for the hash overflow case early while it is still safe
+to bail out.
+
+Snapshot and subvolume creation had a similar problem, so they are using
+the new helper now too.
+
+Signed-off-by: Chris Mason <[email protected]>
+Reported-by: Pascal Junod <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/ctree.h       |    2 +
+ fs/btrfs/dir-item.c    |   59 
+++++++++++++++++++++++++++++++++++++++++++++++++
+ fs/btrfs/inode.c       |   26 +++++++++++++++++++--
+ fs/btrfs/ioctl.c       |   10 ++++++++
+ fs/btrfs/transaction.c |    2 -
+ 5 files changed, 96 insertions(+), 3 deletions(-)
+
+--- a/fs/btrfs/ctree.h
++++ b/fs/btrfs/ctree.h
+@@ -3157,6 +3157,8 @@ void btrfs_update_root_times(struct btrf
+                            struct btrfs_root *root);
+ 
+ /* dir-item.c */
++int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
++                        const char *name, int name_len);
+ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
+                         struct btrfs_root *root, const char *name,
+                         int name_len, struct inode *dir,
+--- a/fs/btrfs/dir-item.c
++++ b/fs/btrfs/dir-item.c
+@@ -213,6 +213,65 @@ struct btrfs_dir_item *btrfs_lookup_dir_
+       return btrfs_match_dir_item_name(root, path, name, name_len);
+ }
+ 
++int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
++                                 const char *name, int name_len)
++{
++      int ret;
++      struct btrfs_key key;
++      struct btrfs_dir_item *di;
++      int data_size;
++      struct extent_buffer *leaf;
++      int slot;
++      struct btrfs_path *path;
++
++
++      path = btrfs_alloc_path();
++      if (!path)
++              return -ENOMEM;
++
++      key.objectid = dir;
++      btrfs_set_key_type(&key, BTRFS_DIR_ITEM_KEY);
++      key.offset = btrfs_name_hash(name, name_len);
++
++      ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
++
++      /* return back any errors */
++      if (ret < 0)
++              goto out;
++
++      /* nothing found, we're safe */
++      if (ret > 0) {
++              ret = 0;
++              goto out;
++      }
++
++      /* we found an item, look for our name in the item */
++      di = btrfs_match_dir_item_name(root, path, name, name_len);
++      if (di) {
++              /* our exact name was found */
++              ret = -EEXIST;
++              goto out;
++      }
++
++      /*
++       * see if there is room in the item to insert this
++       * name
++       */
++      data_size = sizeof(*di) + name_len + sizeof(struct btrfs_item);
++      leaf = path->nodes[0];
++      slot = path->slots[0];
++      if (data_size + btrfs_item_size_nr(leaf, slot) +
++          sizeof(struct btrfs_item) > BTRFS_LEAF_DATA_SIZE(root)) {
++              ret = -EOVERFLOW;
++      } else {
++              /* plenty of insertion room */
++              ret = 0;
++      }
++out:
++      btrfs_free_path(path);
++      return ret;
++}
++
+ /*
+  * lookup a directory item based on index.  'dir' is the objectid
+  * we're searching in, and 'mod' tells us if you plan on deleting the
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -4842,9 +4842,9 @@ int btrfs_add_link(struct btrfs_trans_ha
+       ret = btrfs_insert_dir_item(trans, root, name, name_len,
+                                   parent_inode, &key,
+                                   btrfs_inode_type(inode), index);
+-      if (ret == -EEXIST)
++      if (ret == -EEXIST || ret == -EOVERFLOW) {
+               goto fail_dir_item;
+-      else if (ret) {
++      } else if (ret) {
+               btrfs_abort_transaction(trans, root, ret);
+               return ret;
+       }
+@@ -7308,6 +7308,28 @@ static int btrfs_rename(struct inode *ol
+       if (S_ISDIR(old_inode->i_mode) && new_inode &&
+           new_inode->i_size > BTRFS_EMPTY_DIR_SIZE)
+               return -ENOTEMPTY;
++
++
++      /* check for collisions, even if the  name isn't there */
++      ret = btrfs_check_dir_item_collision(root, new_dir->i_ino,
++                           new_dentry->d_name.name,
++                           new_dentry->d_name.len);
++
++      if (ret) {
++              if (ret == -EEXIST) {
++                      /* we shouldn't get
++                       * eexist without a new_inode */
++                      if (!new_inode) {
++                              WARN_ON(1);
++                              return ret;
++                      }
++              } else {
++                      /* maybe -EOVERFLOW */
++                      return ret;
++              }
++      }
++      ret = 0;
++
+       /*
+        * we're using rename to replace one file with another.
+        * and the replacement file is large.  Start IO on it now so
+--- a/fs/btrfs/ioctl.c
++++ b/fs/btrfs/ioctl.c
+@@ -705,6 +705,16 @@ static noinline int btrfs_mksubvol(struc
+       if (error)
+               goto out_dput;
+ 
++      /*
++       * even if this name doesn't exist, we may get hash collisions.
++       * check for them now when we can safely fail
++       */
++      error = btrfs_check_dir_item_collision(BTRFS_I(dir)->root,
++                                             dir->i_ino, name,
++                                             namelen);
++      if (error)
++              goto out_dput;
++
+       down_read(&BTRFS_I(dir)->root->fs_info->subvol_sem);
+ 
+       if (btrfs_root_refs(&BTRFS_I(dir)->root->root_item) == 0)
+--- a/fs/btrfs/transaction.c
++++ b/fs/btrfs/transaction.c
+@@ -1191,7 +1191,7 @@ static noinline int create_pending_snaps
+                                   parent_inode, &key,
+                                   BTRFS_FT_DIR, index);
+       /* We have check then name at the beginning, so it is impossible. */
+-      BUG_ON(ret == -EEXIST);
++      BUG_ON(ret == -EEXIST || ret == -EOVERFLOW);
+       if (ret) {
+               btrfs_abort_transaction(trans, root, ret);
+               goto fail;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/suse-hv-register-clocksource-only-if-its-adverti.patch 
new/patches.suse/suse-hv-register-clocksource-only-if-its-adverti.patch
--- old/patches.suse/suse-hv-register-clocksource-only-if-its-adverti.patch     
2013-02-11 15:18:11.000000000 +0100
+++ new/patches.suse/suse-hv-register-clocksource-only-if-its-adverti.patch     
1970-01-01 01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-From b2cd0a665f7d14d48a64459d22ee8342515fc7cb Mon Sep 17 00:00:00 2001
-From: Olaf Hering <[email protected]>
-Date: Tue, 15 Jan 2013 14:19:55 +0100
-Subject: [PATCH] x86: Hyper-V: register clocksource only if its advertised
-References: bnc#792500
-Patch-mainline: submitted
-
-Enable hyperv_clocksource only if its advertised as a feature.
-XenServer 6 returns the signature which is checked in
-ms_hyperv_platform(), but it does not offer all features. Currently the
-clocksource is enabled unconditionally in ms_hyperv_init_platform(), and
-the result is a hanging guest.
-
-Hyper-V spec Bit 1 indicates the availability of Partition Reference
-Counter.  Register the clocksource only if this bit is set.
-
-The guest in question prints this in dmesg:
- [    0.000000] Hypervisor detected: Microsoft HyperV
- [    0.000000] HyperV: features 0x70, hints 0x0
-
-Signed-off-by: Olaf Hering <[email protected]>
-Cc: [email protected]
-Cc: KY Srinivasan <[email protected]>
-cc: Greg KH <[email protected]>
-Acked-by: <[email protected]>
----
- arch/x86/kernel/cpu/mshyperv.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
-index 0a630dd..646d192 100644
---- a/arch/x86/kernel/cpu/mshyperv.c
-+++ b/arch/x86/kernel/cpu/mshyperv.c
-@@ -68,7 +68,8 @@ static void __init ms_hyperv_init_platform(void)
-       printk(KERN_INFO "HyperV: features 0x%x, hints 0x%x\n",
-              ms_hyperv.features, ms_hyperv.hints);
- 
--      clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100);
-+      if (ms_hyperv.features & HV_X64_MSR_TIME_REF_COUNT_AVAILABLE)
-+              clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100);
- }
- 
- const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = {
--- 
-1.8.0.1
-

++++++ patches.xen.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.xen/xen-pciback-ratelimit 
new/patches.xen/xen-pciback-ratelimit
--- old/patches.xen/xen-pciback-ratelimit       2013-02-21 17:15:10.000000000 
+0100
+++ new/patches.xen/xen-pciback-ratelimit       1970-01-01 01:00:00.000000000 
+0100
@@ -1,51 +0,0 @@
-From: [email protected]
-Subject: xen-pciback: rate limit error messages from xen_pcibk_enable_msi{,x}()
-References: CVE-2013-0231 XSA-43 bnc#801178
-Patch-mainline: n/a
-
-... as being guest triggerable (e.g. by invoking
-XEN_PCI_OP_enable_msi{,x} on a device not being MSI/MSI-X capable).
-
-This is CVE-2013-0231 / XSA-43.
-
-Also make the two messages uniform in both their wording and severity.
-
-Signed-off-by: Jan Beulich <[email protected]>
-
---- head.orig/drivers/xen/xen-pciback/pciback_ops.c    2012-04-10 
17:21:35.000000000 +0200
-+++ head/drivers/xen/xen-pciback/pciback_ops.c 2013-01-28 16:17:29.000000000 
+0100
-@@ -148,7 +148,6 @@ int xen_pcibk_enable_msi(struct xen_pcib
- #ifndef CONFIG_XEN
-       struct xen_pcibk_dev_data *dev_data;
- #endif
--      int otherend = pdev->xdev->otherend_id;
-       int status;
- 
-       if (unlikely(verbose_request))
-@@ -157,8 +156,9 @@ int xen_pcibk_enable_msi(struct xen_pcib
-       status = pci_enable_msi(dev);
- 
-       if (status) {
--              printk(KERN_ERR "error enable msi for guest %x status %x\n",
--                      otherend, status);
-+              pr_warn_ratelimited(DRV_NAME ": %s: error enabling MSI for 
guest %u: err %d\n",
-+                                  pci_name(dev), pdev->xdev->otherend_id,
-+                                  status);
-               op->value = 0;
-               return XEN_PCI_ERR_op_failed;
-       }
-@@ -256,10 +256,10 @@ int xen_pcibk_enable_msix(struct xen_pci
-                                               pci_name(dev), i,
-                                               op->msix_entries[i].vector);
-               }
--      } else {
--              printk(KERN_WARNING DRV_NAME ": %s: failed to enable MSI-X: err 
%d!\n",
--                      pci_name(dev), result);
--      }
-+      } else
-+              pr_warn_ratelimited(DRV_NAME ": %s: error enabling MSI-X for 
guest %u: err %d!\n",
-+                                  pci_name(dev), pdev->xdev->otherend_id,
-+                                  result);
-       kfree(entries);
- 
-       op->value = result;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.xen/xen3-patch-2.6.31 
new/patches.xen/xen3-patch-2.6.31
--- old/patches.xen/xen3-patch-2.6.31   2013-02-21 17:15:10.000000000 +0100
+++ new/patches.xen/xen3-patch-2.6.31   2013-02-27 20:44:57.000000000 +0100
@@ -6184,7 +6184,7 @@
  struct per_user_data {
        struct mutex bind_mutex; /* serialize bind/unbind operations */
 @@ -278,6 +285,9 @@ static void evtchn_unbind_from_user(stru
-       int irq = irq_from_evtchn(port);
+       BUG_ON(irq < 0);
  
        unbind_from_irqhandler(irq, (void *)(unsigned long)port);
 +#ifdef CONFIG_XEN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.xen/xen3-patch-3.1 
new/patches.xen/xen3-patch-3.1
--- old/patches.xen/xen3-patch-3.1      2013-02-21 17:15:10.000000000 +0100
+++ new/patches.xen/xen3-patch-3.1      2013-02-27 20:44:57.000000000 +0100
@@ -2813,9 +2813,9 @@
 +#ifndef CONFIG_XEN
        struct xen_pcibk_dev_data *dev_data;
 +#endif
-       int otherend = pdev->xdev->otherend_id;
        int status;
  
+       if (unlikely(verbose_request))
 @@ -153,14 +166,20 @@ int xen_pcibk_enable_msi(struct xen_pcib
        /* The value the guest needs is actually the IDT vector, not the
         * the local domain's IRQ number. */

++++++ series.conf ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:58.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:58.000000000 +0100
@@ -36,6 +36,7 @@
        patches.kernel.org/patch-3.7.6-7
        patches.kernel.org/patch-3.7.7-8
        patches.kernel.org/patch-3.7.8-9
+       patches.kernel.org/patch-3.7.9-10
 
         ########################################################
         # Build fixes that apply to the vanilla kernel too.
@@ -232,12 +233,10 @@
        ########################################################
        # AGP, graphics related stuff
        ########################################################
-       patches.fixes/drm-nouveau-vm-fix-memory-corruption-when-pgt-alloca.patch
 
        ########################################################
        # Suse specific stuff
        ########################################################
-       patches.suse/suse-hv-register-clocksource-only-if-its-adverti.patch
        
patches.suse/suse-hv-fate314663-0001-mm-Export-a-function-to-get-vm-committed-memory.patch
        
patches.suse/suse-hv-fate314663-0002-Drivers-hv-Add-Hyper-V-balloon-driver.patch
        
patches.suse/suse-hv-fate314663-0003-Drivers-hv-balloon-Fix-a-bug-in-the-definition-of-st.patch
@@ -308,11 +307,14 @@
        ########################################################
        # ext4
        ########################################################
+       patches.fixes/ext4-fix-error-handling-in-ext4_fill_super
+       
patches.fixes/ext4-release-sysfs-kobject-when-failing-to-enable-quotas-on-mount
 
        ########################################################
        # btrfs
        ########################################################
        patches.suse/btrfs-use-correct-device-for-maps.patch
+       patches.suse/btrfs-0955-fix-hash-overflow-handling.patch
 
        ########################################################
        # Reiserfs Patches
@@ -437,6 +439,7 @@
        ########################################################
        patches.fixes/tulip-quad-NIC-ifdown
        patches.drivers/ehea-modinfo.patch
+       
patches.fixes/sock_diag-simplify-sock_diag_handlers-handling-in-_sock_diag_rcv_msg
 
        ########################################################
        # Wireless Networking
@@ -483,6 +486,7 @@
        ########################################################
        # Char / serial
        ########################################################
+       patches.fixes/TTY-do-not-update-atime-mtime-on-read-write.patch
 
        ########################################################
        # Other driver fixes
@@ -713,7 +717,6 @@
        patches.xen/xen-netback-generalize
        patches.xen/xen-netback-multiple-tasklets
        patches.xen/xen-netback-kernel-threads
-       patches.xen/xen-pciback-ratelimit
        patches.xen/xen-cxgb3
        patches.xen/xen-dcdbas
        patches.xen/xen-x86-panic-no-reboot

++++++ source-timestamp ++++++
--- /var/tmp/diff_new_pack.tWPnny/_old  2013-03-01 11:24:58.000000000 +0100
+++ /var/tmp/diff_new_pack.tWPnny/_new  2013-03-01 11:24:58.000000000 +0100
@@ -1,3 +1,3 @@
-2013-02-21 17:15:10 +0100
-GIT Revision: 8dec9689de608ccde8b8c596455fc596be0bff90
+2013-02-28 16:06:29 +0100
+GIT Revision: 82d3f2183acfef1671c853eff4ba201fe0702e18
 GIT Branch: openSUSE-12.3

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to