Hello community,

here is the log from the commit of package kernel-source for openSUSE:Factory 
checked in at 2014-08-30 16:04:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kernel-source (Old)
 and      /work/SRC/openSUSE:Factory/.kernel-source.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kernel-source"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kernel-source/kernel-debug.changes       
2014-08-11 10:08:40.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kernel-source.new/kernel-debug.changes  
2014-08-30 16:04:31.000000000 +0200
@@ -1,0 +2,191 @@
+Wed Aug 27 16:45:38 CEST 2014 - [email protected]
+
+- rpm/config.sh Use the same repository setup as the master branch
+- commit 90bc0f1
+
+-------------------------------------------------------------------
+Tue Aug 26 14:16:14 CEST 2014 - [email protected]
+
+- rpm/config.sh: build against factory
+- commit 768ed24
+
+-------------------------------------------------------------------
+Tue Aug 26 13:57:20 CEST 2014 - [email protected]
+
+- Btrfs stable updates.
+  Pending or future 3.16.y fixes
+- Btrfs: read lock extent buffer while walking backrefs.
+- Btrfs: fix compressed write corruption on enospc.
+- Btrfs: fix csum tree corruption, duplicate and outdated
+  checksums.
+- Btrfs: fill_holes: Fix slot number passed to hole_mergeable()
+  call.
+- Btrfs: fix wrong write range for filemap_fdatawrite_range().
+- Btrfs: fix wrong extent mapping for DirectIO.
+- btrfs: Return right extent when fiemap gives unaligned offset
+  and len.
+- Btrfs: ensure tmpfile inode is always persisted with link
+  count of 0.
+- Btrfs: don't monopolize a core when evicting inode.
+- Btrfs: fix task hang under heavy compressed write.
+- Refresh
+  patches.fixes/Btrfs-Fix-memory-corruption-by-ulist_add_merge-on-32.
+- commit c40eb71
+
+-------------------------------------------------------------------
+Thu Aug 21 17:46:08 CEST 2014 - [email protected]
+
+- Btrfs: Fix memory corruption by ulist_add_merge() on 32bit arch
+  (bnc#887046).
+- commit b1e2a41
+
+-------------------------------------------------------------------
+Thu Aug 21 16:48:07 CEST 2014 - [email protected]
+
+- rpm/kernel-binary.spec.in: Fix the version variables in the generated
+  Makefile (bnc#892973)
+- commit 8331f47
+
+-------------------------------------------------------------------
+Wed Aug 20 17:36:52 CEST 2014 - [email protected]
+
+- rpm/compress-vmlinux.sh: Do not duplicate the job of brp-99-compress-vmlinux
+- commit e561498
+
+-------------------------------------------------------------------
+Wed Aug 20 12:32:25 CEST 2014 - [email protected]
+
+- config: arm64: Enable RTC_DRV_HID_SENSOR_TIME
+  For consistency across ARM configs.
+  This drags in IIO. For consistency, in turn use:
+  CONFIG_IIO_SIMPLE_DUMMY=m
+  CONFIG_HID_SENSOR_IIO_TRIGGER=m
+  CONFIG_IIO_PERIODIC_RTC_TRIGGER=m
+  CONFIG_IIO_INTERRUPT_TRIGGER=m
+  CONFIG_IIO_SYSFS_TRIGGER=m
+  CONFIG_IIO_BUFFER=y
+  CONFIG_IIO_KFIFO_BUF=m
+  CONFIG_HID_SENSOR_*=m
+- commit 7a6e5f7
+
+-------------------------------------------------------------------
+Wed Aug 20 11:15:39 CEST 2014 - [email protected]
+
+- config: armv6hl: Re-enable DWC2 USB support
+  The config update/cleanup for v3.16-rc3 mistakenly disabled USB_DWC2,
+  which is needed for the Raspberry Pi.
+  Fixes: d2f49e165ca3 ("config: armv6hl: Update config for 3.16-rc3")
+- commit cc9f241
+
+-------------------------------------------------------------------
+Wed Aug 20 10:40:38 CEST 2014 - [email protected]
+
+- config: ARM: Change RTC drivers to built-in
+  Consistently do not build RTC drivers as modules. This fixes subtle
+  differences between armv7hl default and lpae flavors and avoids any
+  timing-related driver initialization issues.
+  To make RTC_DRV_88PM80X built-in, make MFD_88PM800 built-in, too.
+  To make RTC_DRV_PM8XXX built-in, make MFD_PM8921_CORE built-in, too.
+- commit cf526c8
+
+-------------------------------------------------------------------
+Mon Aug 18 15:26:34 CEST 2014 - [email protected]
+
+- rpm/config.sh: Drop the ARM repo, it is covered by the ports repo
+- commit 84ffa90
+
+-------------------------------------------------------------------
+Mon Aug 18 15:12:21 CEST 2014 - [email protected]
+
+- rpm/kernel-binary.spec.in: Fix missing quotes around %build_flavor
+  %build_flavor can be an arbitrary string, so it needs to be quoted for
+  string comparison.
+- commit 0134440
+
+-------------------------------------------------------------------
+Mon Aug 18 13:58:23 CEST 2014 - [email protected]
+
+- rpm/kernel-obs-build.spec.in: Use dracut for SLE12
+- commit ec64eaf
+
+-------------------------------------------------------------------
+Mon Aug 18 04:50:46 CEST 2014 - [email protected]
+
+- config: armv6hl: Enable DMA_BCM2835
+  Only bcm2835 option missing.
+- commit 1fd2cdd
+
+-------------------------------------------------------------------
+Mon Aug 18 03:41:01 CEST 2014 - [email protected]
+
+- config: armv7hl: Enable DWMAC_SUNXI for lpae flavor as well
+  Without this, the Cubietruck has no network in LPAE mode.
+- commit 4f16280
+
+-------------------------------------------------------------------
+Sun Aug 17 10:28:54 CEST 2014 - [email protected]
+
+- Linux 3.16.1.
+- commit 9353bcb
+
+-------------------------------------------------------------------
+Wed Aug 13 18:23:31 CEST 2014 - [email protected]
+
+- Revert "config: armv7hl: Disable OMAP DRM"
+  This reverts commit f92487dbd7a305531e4cc54c41609b8f77a1bc30.
+  The previous commit should fix the build error of omapdrm.
+- commit 07174c1
+
+-------------------------------------------------------------------
+Wed Aug 13 18:23:18 CEST 2014 - [email protected]
+
+- drm: omapdrm: fix compiler errors.
+- commit ee3abc8
+
+-------------------------------------------------------------------
+Wed Aug 13 15:20:31 CEST 2014 - [email protected]
+
+- config: armv7hl: Disable OMAP DRM
+  To avoid errors such as:
+  ../drivers/gpu/drm/omapdrm/omap_plane.c: In function 'omap_plane_pre_apply':
+  ../drivers/gpu/drm/omapdrm/omap_plane.c:145:2: error: format '%x' expects 
argument of type 'unsigned int', but argument 5 has type 'dma_addr_t' 
[-Werror=format=]
+    DBG("%d,%d %08x %08x", info->pos_x, info->pos_y,
+    ^
+  ../drivers/gpu/drm/omapdrm/omap_plane.c:145:2: error: format '%x' expects 
argument of type 'unsigned int', but argument 6 has type 'dma_addr_t' 
[-Werror=format=]
+  cc1: all warnings being treated as errors
+  disable OMAP DRM for now.
+  Two patches were sent upstream by Matwey V. Kornilov but didn't find
+  their way into v3.16. Once patches are applied, revert this commit.
+- commit f92487d
+
+-------------------------------------------------------------------
+Wed Aug 13 14:47:17 CEST 2014 - [email protected]
+
+- config: arm64: Disable ARM64 crypto extensions
+  To avoid build errors such as:
+  ld: cannot find arch/arm64/crypto/aes-glue-ce.o: No such file or directory
+  ../scripts/Makefile.build:411: recipe for target 
'arch/arm64/crypto/aes-ce-blk.o' failed
+  disable support for ARM64 crypto extensions for now.
+  A patch was submitted upstream by Andreas Schwab but didn't make it into
+  v3.16. Once that is available, this commit should be reverted.
+- commit 5f99cfd
+
+-------------------------------------------------------------------
+Tue Aug 12 08:50:20 CEST 2014 - [email protected]
+
+- config: arm64/default: make rtc-pl03[01] built-in
+- commit 1b1d9da
+
+-------------------------------------------------------------------
+Fri Aug  8 23:31:50 CEST 2014 - [email protected]
+
+- rtsx_usb: export device table (bnc#890096).
+- commit a29135e
+
+-------------------------------------------------------------------
+Fri Aug  8 12:46:34 CEST 2014 - [email protected]
+
+- Delete patches.drivers/drm-cirrus-Use-16bpp-as-default (bnc#890599).
+- commit 820d92f
+
+-------------------------------------------------------------------
@@ -8,0 +200,7 @@
+Tue Aug  5 06:15:41 CEST 2014 - [email protected]
+
+- nfs: nfs3_list_one_acl(): check get_acl() result with
+  IS_ERR_OR_NULL (bko#81111 bnc#889790).
+- commit 258e3b0
++++ 3196 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/kernel-source/kernel-debug.changes
++++ and /work/SRC/openSUSE:Factory/.kernel-source.new/kernel-debug.changes
kernel-default.changes: same change
kernel-desktop.changes: same change
kernel-docs.changes: same change
kernel-ec2.changes: same change
kernel-lpae.changes: same change
kernel-obs-build.changes: same change
kernel-obs-qa-xen.changes: same change
kernel-obs-qa.changes: same change
kernel-pae.changes: same change
kernel-source.changes: same change
kernel-syms.changes: same change
kernel-vanilla.changes: same change
kernel-xen.changes: same change

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

Other differences:
------------------
++++++ kernel-debug.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   debug
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        A Debug Version of the Kernel
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -816,7 +816,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-default.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   default
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        The Standard Kernel
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -837,7 +837,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-desktop.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   desktop
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        Kernel optimized for the desktop
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -825,7 +825,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-docs.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -16,7 +16,7 @@
 #
 
 
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 
 %include %_sourcedir/kernel-spec-macros
@@ -25,11 +25,11 @@
 Summary:        Kernel Documentation
 License:        GPL-2.0
 Group:          Documentation/Man
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 BuildRequires:  docbook-toys
 BuildRequires:  docbook-utils

++++++ kernel-ec2.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   ec2
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        The Amazon EC2 Xen Kernel
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -815,7 +815,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-lpae.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   lpae
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        Kernel for LPAE enabled systems
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -813,7 +813,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-obs-build.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -19,7 +19,7 @@
 
 #!BuildIgnore: post-build-checks
 
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 
 %include %_sourcedir/kernel-spec-macros
@@ -34,7 +34,7 @@
 BuildRequires:  kernel-xen
 %endif
 ExclusiveArch:  aarch64 armv6hl armv7hl %ix86 ppc ppc64 ppc64le s390x x86_64
-%if 0%{?suse_version} < 1320
+%if 0%{?suse_version} < 1315
 # For SLE 11 
 BuildRequires:  mkinitrd
 BuildRequires:  perl-Bootloader
@@ -45,11 +45,11 @@
 Summary:        package kernel and initrd for OBS VM builds
 License:        GPL-2.0
 Group:          SLES
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 
 %description
@@ -105,7 +105,7 @@
 %define kernel_name Image
 %endif
 
-%if 0%{?suse_version} < 1320
+%if 0%{?suse_version} < 1315
 # For SLE 11 
 /sbin/mkinitrd $ROOT \
                -m "$KERNEL_MODULES" \

++++++ kernel-obs-qa-xen.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -17,7 +17,7 @@
 # needsrootforbuild
 
 
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 
 %include %_sourcedir/kernel-spec-macros
@@ -36,11 +36,11 @@
 Summary:        Basic QA tests for the kernel
 License:        GPL-2.0
 Group:          SLES
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 
 %description

kernel-obs-qa.spec: same change
++++++ kernel-pae.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   pae
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        Kernel with PAE Support
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -824,7 +824,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-source.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -18,7 +18,7 @@
 
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -30,11 +30,11 @@
 Summary:        The Linux Kernel Sources
 License:        GPL-2.0
 Group:          Development/Sources
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 AutoReqProv:    off

++++++ kernel-syms.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -24,12 +24,12 @@
 Summary:        Kernel Symbol Versions (modversions)
 License:        GPL-2.0
 Group:          Development/Sources
-Version:        3.16.0
+Version:        3.16.1
 %if %using_buildservice
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 %else
 %define kernel_source_release %(LC_ALL=C rpm -q kernel-devel%variant-%version 
--qf "%{RELEASE}" | grep -v 'not installed' || echo 0)

++++++ kernel-vanilla.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   vanilla
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        The Standard Kernel - without any SUSE patches
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -812,7 +812,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-xen.spec ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:36.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:36.000000000 +0200
@@ -20,16 +20,16 @@
 # needssslcertforbuild
 
 %define srcversion 3.16
-%define patchversion 3.16.0
+%define patchversion 3.16.1
 %define variant %{nil}
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   xen
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -59,11 +59,11 @@
 Summary:        The Xen Kernel
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        3.16.0
+Version:        3.16.1
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g0e31675
+Release:        <RELEASE>.g90bc0f1
 %else
-Release:        0
+Release:        <RELEASE>.g90bc0f1
 %endif
 Url:            http://www.kernel.org/
 BuildRequires:  bc
@@ -818,7 +818,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ compress-vmlinux.sh ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:37.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:37.000000000 +0200
@@ -2,6 +2,11 @@
 
 set -x
 
+# Once the brp script is reasonably widespread, we will remove the specfile
+# hack and this script
+if test -x /usr/lib/rpm/brp-suse.d/brp-99-compress-vmlinux; then
+       exit 0
+fi
 vmlinux=$1
 if test -e "$vmlinux" -a -e "$vmlinux.gz"; then
        # Deliberately not using gzip -n; the vmlinux image has a predictable

++++++ config.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/arm64/default new/config/arm64/default
--- old/config/arm64/default    2014-08-04 18:50:24.000000000 +0200
+++ new/config/arm64/default    2014-08-20 13:07:13.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm64 3.16.0 Kernel Configuration
+# Linux/arm64 3.16.1 Kernel Configuration
 #
 CONFIG_ARM64=y
 CONFIG_64BIT=y
@@ -103,7 +103,7 @@
 CONFIG_RCU_NOCB_CPU_ALL=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=14
+CONFIG_LOG_BUF_SHIFT=18
 CONFIG_GENERIC_SCHED_CLOCK=y
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
@@ -2425,6 +2425,7 @@
 CONFIG_POWER_SUPPLY=y
 # CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_PDA_POWER=m
+# CONFIG_GENERIC_ADC_BATTERY is not set
 # CONFIG_TEST_POWER is not set
 CONFIG_BATTERY_DS2760=m
 CONFIG_BATTERY_DS2780=m
@@ -2485,6 +2486,7 @@
 # CONFIG_SENSORS_HIH6130 is not set
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
+# CONFIG_SENSORS_IIO_HWMON is not set
 CONFIG_SENSORS_IT87=m
 # CONFIG_SENSORS_JC42 is not set
 # CONFIG_SENSORS_LINEAGE is not set
@@ -3590,8 +3592,8 @@
 #
 # on-CPU RTC drivers
 #
-CONFIG_RTC_DRV_PL030=m
-CONFIG_RTC_DRV_PL031=m
+CONFIG_RTC_DRV_PL030=y
+CONFIG_RTC_DRV_PL031=y
 # CONFIG_RTC_DRV_SNVS is not set
 # CONFIG_RTC_DRV_MOXART is not set
 CONFIG_RTC_DRV_XGENE=y
@@ -3599,7 +3601,7 @@
 #
 # HID Sensor RTC drivers
 #
-# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
+CONFIG_RTC_DRV_HID_SENSOR_TIME=m
 CONFIG_DMADEVICES=y
 # CONFIG_DMADEVICES_DEBUG is not set
 
@@ -3687,6 +3689,75 @@
 # CONFIG_LINE6_USB is not set
 CONFIG_USB_SERIAL_QUATECH2=m
 CONFIG_VT6656=m
+
+#
+# IIO staging drivers
+#
+
+#
+# Accelerometers
+#
+
+#
+# Analog to digital converters
+#
+# CONFIG_AD7291 is not set
+# CONFIG_AD7606 is not set
+
+#
+# Analog digital bi-direction converters
+#
+# CONFIG_ADT7316 is not set
+
+#
+# Capacitance to digital converters
+#
+# CONFIG_AD7150 is not set
+# CONFIG_AD7152 is not set
+# CONFIG_AD7746 is not set
+
+#
+# Direct Digital Synthesis
+#
+
+#
+# Digital gyroscope sensors
+#
+
+#
+# Network Analyzer, Impedance Converters
+#
+# CONFIG_AD5933 is not set
+
+#
+# Light sensors
+#
+# CONFIG_SENSORS_ISL29018 is not set
+# CONFIG_SENSORS_ISL29028 is not set
+# CONFIG_TSL2583 is not set
+# CONFIG_TSL2x7x is not set
+
+#
+# Magnetometer sensors
+#
+# CONFIG_SENSORS_HMC5843 is not set
+
+#
+# Active energy metering IC
+#
+# CONFIG_ADE7854 is not set
+
+#
+# Resolver to digital converters
+#
+
+#
+# Triggers - standalone
+#
+CONFIG_IIO_PERIODIC_RTC_TRIGGER=m
+CONFIG_IIO_SIMPLE_DUMMY=m
+# CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set
+# CONFIG_IIO_SIMPLE_DUMMY_BUFFER is not set
 CONFIG_USB_ENESTORAGE=m
 # CONFIG_BCM_WIMAX is not set
 CONFIG_FT1000=m
@@ -3787,7 +3858,136 @@
 # CONFIG_PM_DEVFREQ is not set
 # CONFIG_EXTCON is not set
 # CONFIG_MEMORY is not set
-# CONFIG_IIO is not set
+CONFIG_IIO=m
+CONFIG_IIO_BUFFER=y
+# CONFIG_IIO_BUFFER_CB is not set
+CONFIG_IIO_KFIFO_BUF=m
+CONFIG_IIO_TRIGGERED_BUFFER=m
+CONFIG_IIO_TRIGGER=y
+CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+
+#
+# Accelerometers
+#
+# CONFIG_BMA180 is not set
+CONFIG_HID_SENSOR_ACCEL_3D=m
+# CONFIG_IIO_ST_ACCEL_3AXIS is not set
+# CONFIG_MMA8452 is not set
+
+#
+# Analog to digital converters
+#
+# CONFIG_AD799X is not set
+# CONFIG_MAX1363 is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
+# CONFIG_TI_ADC081C is not set
+# CONFIG_TI_AM335X_ADC is not set
+# CONFIG_VF610_ADC is not set
+# CONFIG_VIPERBOARD_ADC is not set
+
+#
+# Amplifiers
+#
+
+#
+# Hid Sensor IIO Common
+#
+CONFIG_HID_SENSOR_IIO_COMMON=m
+CONFIG_HID_SENSOR_IIO_TRIGGER=m
+
+#
+# Digital to analog converters
+#
+# CONFIG_AD5064 is not set
+# CONFIG_AD5380 is not set
+# CONFIG_AD5446 is not set
+# CONFIG_MAX517 is not set
+# CONFIG_MCP4725 is not set
+
+#
+# Frequency Synthesizers DDS/PLL
+#
+
+#
+# Clock Generator/Distribution
+#
+
+#
+# Phase-Locked Loop (PLL) frequency synthesizers
+#
+
+#
+# Digital gyroscope sensors
+#
+CONFIG_HID_SENSOR_GYRO_3D=m
+# CONFIG_IIO_ST_GYRO_3AXIS is not set
+# CONFIG_ITG3200 is not set
+
+#
+# Humidity sensors
+#
+# CONFIG_DHT11 is not set
+# CONFIG_SI7005 is not set
+
+#
+# Inertial measurement units
+#
+# CONFIG_INV_MPU6050_IIO is not set
+
+#
+# Light sensors
+#
+# CONFIG_ADJD_S311 is not set
+# CONFIG_APDS9300 is not set
+# CONFIG_CM32181 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
+CONFIG_HID_SENSOR_ALS=m
+CONFIG_HID_SENSOR_PROX=m
+# CONFIG_LTR501 is not set
+# CONFIG_TCS3472 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_TSL4531 is not set
+# CONFIG_VCNL4000 is not set
+
+#
+# Magnetometer sensors
+#
+# CONFIG_AK8975 is not set
+# CONFIG_MAG3110 is not set
+CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
+# CONFIG_IIO_ST_MAGN_3AXIS is not set
+
+#
+# Inclinometer sensors
+#
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
+CONFIG_HID_SENSOR_DEVICE_ROTATION=m
+
+#
+# Triggers - standalone
+#
+CONFIG_IIO_INTERRUPT_TRIGGER=m
+CONFIG_IIO_SYSFS_TRIGGER=m
+
+#
+# Pressure sensors
+#
+CONFIG_HID_SENSOR_PRESS=m
+# CONFIG_MPL115 is not set
+# CONFIG_MPL3115 is not set
+# CONFIG_IIO_ST_PRESS is not set
+
+#
+# Lightning sensors
+#
+
+#
+# Temperature sensors
+#
+# CONFIG_MLX90614 is not set
+# CONFIG_TMP006 is not set
 CONFIG_PWM=y
 CONFIG_PWM_SYSFS=y
 # CONFIG_PWM_FSL_FTM is not set
@@ -4382,7 +4582,6 @@
 CONFIG_CRYPTO_CRYPTD=m
 CONFIG_CRYPTO_AUTHENC=m
 # CONFIG_CRYPTO_TEST is not set
-CONFIG_CRYPTO_ABLK_HELPER=m
 
 #
 # Authenticated Encryption with Associated Data
@@ -4474,14 +4673,7 @@
 CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
 CONFIG_PUBLIC_KEY_ALGO_RSA=m
 CONFIG_X509_CERTIFICATE_PARSER=m
-CONFIG_ARM64_CRYPTO=y
-CONFIG_CRYPTO_SHA1_ARM64_CE=m
-CONFIG_CRYPTO_SHA2_ARM64_CE=m
-CONFIG_CRYPTO_GHASH_ARM64_CE=m
-CONFIG_CRYPTO_AES_ARM64_CE=m
-CONFIG_CRYPTO_AES_ARM64_CE_CCM=m
-CONFIG_CRYPTO_AES_ARM64_CE_BLK=m
-CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m
+# CONFIG_ARM64_CRYPTO is not set
 CONFIG_BINARY_PRINTF=y
 
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/armv6hl/default new/config/armv6hl/default
--- old/config/armv6hl/default  2014-08-04 18:50:24.000000000 +0200
+++ new/config/armv6hl/default  2014-08-20 13:07:13.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.16.0 Kernel Configuration
+# Linux/arm 3.16.1 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
@@ -3211,7 +3211,7 @@
 CONFIG_HTC_PASIC3=m
 CONFIG_HTC_I2CPLD=y
 CONFIG_MFD_KEMPLD=m
-CONFIG_MFD_88PM800=m
+CONFIG_MFD_88PM800=y
 CONFIG_MFD_88PM805=m
 CONFIG_MFD_88PM860X=y
 # CONFIG_MFD_MAX14577 is not set
@@ -4280,7 +4280,16 @@
 CONFIG_USB_MICROTEK=m
 # CONFIG_USB_MUSB_HDRC is not set
 # CONFIG_USB_DWC3 is not set
-# CONFIG_USB_DWC2 is not set
+CONFIG_USB_DWC2=y
+CONFIG_USB_DWC2_HOST=m
+CONFIG_USB_DWC2_PLATFORM=y
+
+#
+# Gadget mode requires USB Gadget support to be enabled
+#
+CONFIG_USB_DWC2_PERIPHERAL=m
+# CONFIG_USB_DWC2_DEBUG is not set
+# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
 # CONFIG_USB_CHIPIDEA is not set
 
 #
@@ -4568,8 +4577,8 @@
 # I2C RTC drivers
 #
 CONFIG_RTC_DRV_88PM860X=y
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_AS3722=m
+CONFIG_RTC_DRV_88PM80X=y
+CONFIG_RTC_DRV_AS3722=y
 CONFIG_RTC_DRV_DS1307=y
 CONFIG_RTC_DRV_DS1374=y
 CONFIG_RTC_DRV_DS1672=y
@@ -4588,7 +4597,7 @@
 # CONFIG_RTC_DRV_ISL12057 is not set
 CONFIG_RTC_DRV_X1205=y
 CONFIG_RTC_DRV_PALMAS=y
-CONFIG_RTC_DRV_PCF2127=m
+CONFIG_RTC_DRV_PCF2127=y
 CONFIG_RTC_DRV_PCF8523=y
 CONFIG_RTC_DRV_PCF8563=y
 CONFIG_RTC_DRV_PCF8583=y
@@ -4681,7 +4690,7 @@
 CONFIG_IMX_SDMA=m
 CONFIG_IMX_DMA=m
 CONFIG_DMA_OMAP=y
-# CONFIG_DMA_BCM2835 is not set
+CONFIG_DMA_BCM2835=m
 CONFIG_TI_CPPI41=m
 # CONFIG_FSL_EDMA is not set
 CONFIG_DMA_ENGINE=y
@@ -5106,7 +5115,7 @@
 #
 # Inclinometer sensors
 #
-# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
 CONFIG_HID_SENSOR_DEVICE_ROTATION=m
 
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/armv7hl/default new/config/armv7hl/default
--- old/config/armv7hl/default  2014-08-04 18:50:24.000000000 +0200
+++ new/config/armv7hl/default  2014-08-20 13:07:13.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.16.0 Kernel Configuration
+# Linux/arm 3.16.1 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
@@ -4010,7 +4010,7 @@
 # CONFIG_LPC_SCH is not set
 # CONFIG_MFD_JANZ_CMODIO is not set
 CONFIG_MFD_KEMPLD=m
-CONFIG_MFD_88PM800=m
+CONFIG_MFD_88PM800=y
 CONFIG_MFD_88PM805=m
 CONFIG_MFD_88PM860X=y
 # CONFIG_MFD_MAX14577 is not set
@@ -4025,8 +4025,8 @@
 # CONFIG_MFD_RETU is not set
 # CONFIG_MFD_PCF50633 is not set
 CONFIG_UCB1400_CORE=m
-CONFIG_MFD_PM8XXX=m
-CONFIG_MFD_PM8921_CORE=m
+CONFIG_MFD_PM8XXX=y
+CONFIG_MFD_PM8921_CORE=y
 # CONFIG_MFD_RDC321X is not set
 # CONFIG_MFD_RTSX_PCI is not set
 CONFIG_MFD_RTSX_USB=m
@@ -5831,8 +5831,8 @@
 # I2C RTC drivers
 #
 CONFIG_RTC_DRV_88PM860X=y
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_AS3722=m
+CONFIG_RTC_DRV_88PM80X=y
+CONFIG_RTC_DRV_AS3722=y
 CONFIG_RTC_DRV_DS1307=y
 CONFIG_RTC_DRV_DS1374=y
 CONFIG_RTC_DRV_DS1672=y
@@ -5851,7 +5851,7 @@
 # CONFIG_RTC_DRV_ISL12057 is not set
 CONFIG_RTC_DRV_X1205=y
 CONFIG_RTC_DRV_PALMAS=y
-CONFIG_RTC_DRV_PCF2127=m
+CONFIG_RTC_DRV_PCF2127=y
 CONFIG_RTC_DRV_PCF8523=y
 CONFIG_RTC_DRV_PCF8563=y
 CONFIG_RTC_DRV_PCF8583=y
@@ -5878,7 +5878,7 @@
 # CONFIG_RTC_DRV_M41T94 is not set
 # CONFIG_RTC_DRV_DS1305 is not set
 # CONFIG_RTC_DRV_DS1343 is not set
-CONFIG_RTC_DRV_DS1347=m
+CONFIG_RTC_DRV_DS1347=y
 # CONFIG_RTC_DRV_DS1390 is not set
 # CONFIG_RTC_DRV_MAX6902 is not set
 # CONFIG_RTC_DRV_R9701 is not set
@@ -5923,10 +5923,10 @@
 CONFIG_RTC_DRV_PL030=y
 CONFIG_RTC_DRV_PL031=y
 CONFIG_RTC_DRV_VT8500=y
-CONFIG_RTC_DRV_SUNXI=m
-CONFIG_RTC_DRV_MV=m
-CONFIG_RTC_DRV_PM8XXX=m
-CONFIG_RTC_DRV_TEGRA=m
+CONFIG_RTC_DRV_SUNXI=y
+CONFIG_RTC_DRV_MV=y
+CONFIG_RTC_DRV_PM8XXX=y
+CONFIG_RTC_DRV_TEGRA=y
 CONFIG_RTC_DRV_MXC=y
 CONFIG_RTC_DRV_SNVS=y
 # CONFIG_RTC_DRV_MOXART is not set
@@ -6534,7 +6534,7 @@
 #
 # Inclinometer sensors
 #
-# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
 CONFIG_HID_SENSOR_DEVICE_ROTATION=m
 
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/armv7hl/lpae new/config/armv7hl/lpae
--- old/config/armv7hl/lpae     2014-08-04 18:50:24.000000000 +0200
+++ new/config/armv7hl/lpae     2014-08-20 13:07:13.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.16.0 Kernel Configuration
+# Linux/arm 3.16.1 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
@@ -2385,7 +2385,12 @@
 # CONFIG_SMSC911X_ARCH_HOOKS is not set
 # CONFIG_SMSC9420 is not set
 CONFIG_NET_VENDOR_STMICRO=y
-# CONFIG_STMMAC_ETH is not set
+CONFIG_STMMAC_ETH=m
+CONFIG_STMMAC_PLATFORM=y
+CONFIG_DWMAC_SUNXI=y
+# CONFIG_STMMAC_PCI is not set
+# CONFIG_STMMAC_DEBUG_FS is not set
+# CONFIG_STMMAC_DA is not set
 CONFIG_NET_VENDOR_SUN=y
 # CONFIG_HAPPYMEAL is not set
 # CONFIG_SUNGEM is not set
@@ -3770,7 +3775,7 @@
 # CONFIG_LPC_SCH is not set
 # CONFIG_MFD_JANZ_CMODIO is not set
 CONFIG_MFD_KEMPLD=m
-CONFIG_MFD_88PM800=m
+CONFIG_MFD_88PM800=y
 CONFIG_MFD_88PM805=m
 CONFIG_MFD_88PM860X=y
 # CONFIG_MFD_MAX14577 is not set
@@ -3785,8 +3790,8 @@
 # CONFIG_MFD_RETU is not set
 # CONFIG_MFD_PCF50633 is not set
 CONFIG_UCB1400_CORE=m
-CONFIG_MFD_PM8XXX=m
-CONFIG_MFD_PM8921_CORE=m
+CONFIG_MFD_PM8XXX=y
+CONFIG_MFD_PM8921_CORE=y
 # CONFIG_MFD_RDC321X is not set
 # CONFIG_MFD_RTSX_PCI is not set
 CONFIG_MFD_RTSX_USB=m
@@ -5483,8 +5488,8 @@
 # I2C RTC drivers
 #
 CONFIG_RTC_DRV_88PM860X=y
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_AS3722=m
+CONFIG_RTC_DRV_88PM80X=y
+CONFIG_RTC_DRV_AS3722=y
 CONFIG_RTC_DRV_DS1307=y
 CONFIG_RTC_DRV_DS1374=y
 CONFIG_RTC_DRV_DS1672=y
@@ -5503,7 +5508,7 @@
 # CONFIG_RTC_DRV_ISL12057 is not set
 CONFIG_RTC_DRV_X1205=y
 CONFIG_RTC_DRV_PALMAS=y
-CONFIG_RTC_DRV_PCF2127=m
+CONFIG_RTC_DRV_PCF2127=y
 CONFIG_RTC_DRV_PCF8523=y
 CONFIG_RTC_DRV_PCF8563=y
 CONFIG_RTC_DRV_PCF8583=y
@@ -5571,7 +5576,7 @@
 CONFIG_RTC_DRV_PL030=y
 CONFIG_RTC_DRV_PL031=y
 CONFIG_RTC_DRV_SUNXI=y
-CONFIG_RTC_DRV_PM8XXX=m
+CONFIG_RTC_DRV_PM8XXX=y
 CONFIG_RTC_DRV_TEGRA=y
 CONFIG_RTC_DRV_SNVS=y
 # CONFIG_RTC_DRV_MOXART is not set
@@ -6118,7 +6123,7 @@
 #
 # Inclinometer sensors
 #
-# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
 CONFIG_HID_SENSOR_DEVICE_ROTATION=m
 
 #

++++++ kernel-binary.spec.in ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:37.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:37.000000000 +0200
@@ -27,9 +27,9 @@
 %include %_sourcedir/kernel-spec-macros
 
 %define build_flavor   @FLAVOR@
-%define build_default  (%build_flavor == "default")
-%define build_xen      (%build_flavor == "xen" || %build_flavor == "ec2")
-%define build_vanilla  (%build_flavor == "vanilla")
+%define build_default  ("%build_flavor" == "default")
+%define build_xen      ("%build_flavor" == "xen" || "%build_flavor" == "ec2")
+%define build_vanilla  ("%build_flavor" == "vanilla")
 
 %define build_src_dir %my_builddir/linux-%srcversion
 %define src_install_dir /usr/src/linux-%kernelrelease%variant
@@ -688,7 +688,7 @@
     # Recreate the generated Makefile with correct path
     sh ../scripts/mkmakefile ../../../linux-%kernelrelease%variant \
         %rpm_install_dir/%cpu_arch_flavor \
-        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+)[\.-].*/\1 \2/')
+        $(echo %srcversion | sed -r 's/^([0-9]+)\.([0-9]+).*/\1 \2/')
 fi
 
 add_dirs_to_filelist() {

++++++ kernel-obs-build.spec.in ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:37.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:37.000000000 +0200
@@ -34,7 +34,7 @@
 BuildRequires:  kernel-xen
 %endif
 ExclusiveArch:  @ARCHS@
-%if 0%{?suse_version} < 1320
+%if 0%{?suse_version} < 1315
 # For SLE 11 
 BuildRequires:  mkinitrd
 BuildRequires:  perl-Bootloader
@@ -105,7 +105,7 @@
 %define kernel_name Image
 %endif
 
-%if 0%{?suse_version} < 1320
+%if 0%{?suse_version} < 1315
 # For SLE 11 
 /sbin/mkinitrd $ROOT \
                -m "$KERNEL_MODULES" \

++++++ patches.drivers.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.drivers/drm-cirrus-Use-16bpp-as-default 
new/patches.drivers/drm-cirrus-Use-16bpp-as-default
--- old/patches.drivers/drm-cirrus-Use-16bpp-as-default 2013-07-23 
01:54:52.000000000 +0200
+++ new/patches.drivers/drm-cirrus-Use-16bpp-as-default 1970-01-01 
01:00:00.000000000 +0100
@@ -1,49 +0,0 @@
-From: Takashi Iwai <[email protected]>
-Date: Fri, 25 Jan 2013 17:08:03 +0100
-Subject: [PATCH] drm/cirrus: Use 16bpp as default
-Patch-mainline: Submitted
-References: bnc#799216
-
-We've got a bug report that GNOME on QEMU shows wrong colors.
-It turned out that it's because Cairo doesn't support 24bpp well.
-This hasn't been an issue until now because we (at least SUSE and
-Fedora) have a patch to use 16bpp for QEMU in Xorg cirrus UMS driver.
-
-Since cirrus KMS driver is mainly targeted for the use on QEMU/KVM, we
-should choose 16bpp as default, too.
-
-Also, it's not convenient to set the default bpp in multiple places.
-cirrus_fbdev_init() should check the original preferred depth set in
-cirrus_modeset_init().
-
-Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=799216
-
-Signed-off-by: Takashi Iwai <[email protected]>
-
----
- drivers/gpu/drm/cirrus/cirrus_fbdev.c |    2 +-
- drivers/gpu/drm/cirrus/cirrus_mode.c  |    2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
-+++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
-@@ -273,7 +273,7 @@ int cirrus_fbdev_init(struct cirrus_devi
- {
-       struct cirrus_fbdev *gfbdev;
-       int ret;
--      int bpp_sel = 24;
-+      int bpp_sel = cdev->dev->mode_config.preferred_depth;
- 
-       /*bpp_sel = 8;*/
-       gfbdev = kzalloc(sizeof(struct cirrus_fbdev), GFP_KERNEL);
---- a/drivers/gpu/drm/cirrus/cirrus_mode.c
-+++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
-@@ -588,7 +588,7 @@ int cirrus_modeset_init(struct cirrus_de
-       cdev->dev->mode_config.max_height = CIRRUS_MAX_FB_HEIGHT;
- 
-       cdev->dev->mode_config.fb_base = cdev->mc.vram_base;
--      cdev->dev->mode_config.preferred_depth = 24;
-+      cdev->dev->mode_config.preferred_depth = 16;
-       /* don't prefer a shadow on virt GPU */
-       cdev->dev->mode_config.prefer_shadow = 0;
- 

++++++ patches.fixes.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/Btrfs-Fix-memory-corruption-by-ulist_add_merge-on-32 
new/patches.fixes/Btrfs-Fix-memory-corruption-by-ulist_add_merge-on-32
--- old/patches.fixes/Btrfs-Fix-memory-corruption-by-ulist_add_merge-on-32      
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.fixes/Btrfs-Fix-memory-corruption-by-ulist_add_merge-on-32      
2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,114 @@
+From 4eb1f66dce6c4dc28dd90a7ffbe6b2b1cb08aa4e Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <[email protected]>
+Date: Mon, 28 Jul 2014 10:57:04 +0200
+Subject: [PATCH] Btrfs: Fix memory corruption by ulist_add_merge() on 32bit 
arch
+Git-commit: 4eb1f66dce6c4dc28dd90a7ffbe6b2b1cb08aa4e
+Patch-mainline: 3.17-rc1
+References: bnc#887046
+
+We've got bug reports that btrfs crashes when quota is enabled on
+32bit kernel, typically with the Oops like below:
+ BUG: unable to handle kernel NULL pointer dereference at 00000004
+ IP: [<f9234590>] find_parent_nodes+0x360/0x1380 [btrfs]
+ *pde = 00000000
+ Oops: 0000 [#1] SMP
+ CPU: 0 PID: 151 Comm: kworker/u8:2 Tainted: G S      W 
3.15.2-1.gd43d97e-default #1
+ Workqueue: btrfs-qgroup-rescan normal_work_helper [btrfs]
+ task: f1478130 ti: f147c000 task.ti: f147c000
+ EIP: 0060:[<f9234590>] EFLAGS: 00010213 CPU: 0
+ EIP is at find_parent_nodes+0x360/0x1380 [btrfs]
+ EAX: f147dda8 EBX: f147ddb0 ECX: 00000011 EDX: 00000000
+ ESI: 00000000 EDI: f147dda4 EBP: f147ddf8 ESP: f147dd38
+  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
+ CR0: 8005003b CR2: 00000004 CR3: 00bf3000 CR4: 00000690
+ Stack:
+  00000000 00000000 f147dda4 00000050 00000001 00000000 00000001 00000050
+  00000001 00000000 d3059000 00000001 00000022 000000a8 00000000 00000000
+  00000000 000000a1 00000000 00000000 00000001 00000000 00000000 11800000
+ Call Trace:
+  [<f923564d>] __btrfs_find_all_roots+0x9d/0xf0 [btrfs]
+  [<f9237bb1>] btrfs_qgroup_rescan_worker+0x401/0x760 [btrfs]
+  [<f9206148>] normal_work_helper+0xc8/0x270 [btrfs]
+  [<c025e38b>] process_one_work+0x11b/0x390
+  [<c025eea1>] worker_thread+0x101/0x340
+  [<c026432b>] kthread+0x9b/0xb0
+  [<c0712a71>] ret_from_kernel_thread+0x21/0x30
+  [<c0264290>] kthread_create_on_node+0x110/0x110
+
+This indicates a NULL corruption in prefs_delayed list.  The further
+investigation and bisection pointed that the call of ulist_add_merge()
+results in the corruption.
+
+ulist_add_merge() takes u64 as aux and writes a 64bit value into
+old_aux.  The callers of this function in backref.c, however, pass a
+pointer of a pointer to old_aux.  That is, the function overwrites
+64bit value on 32bit pointer.  This caused a NULL in the adjacent
+variable, in this case, prefs_delayed.
+
+Here is a quick attempt to band-aid over this: a new function,
+ulist_add_merge_ptr() is introduced to pass/store properly a pointer
+value instead of u64.  There are still ugly void ** cast remaining
+in the callers because void ** cannot be taken implicitly.  But, it's
+safer than explicit cast to u64, anyway.
+
+Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=887046
+Cc: <[email protected]> [v3.11+]
+Signed-off-by: Takashi Iwai <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+
+---
+ fs/btrfs/backref.c |   11 +++++------
+ fs/btrfs/ulist.h   |   15 +++++++++++++++
+ 2 files changed, 20 insertions(+), 6 deletions(-)
+
+--- a/fs/btrfs/backref.c
++++ b/fs/btrfs/backref.c
+@@ -276,9 +276,8 @@ static int add_all_parents(struct btrfs_
+                       }
+                       if (ret > 0)
+                               goto next;
+-                      ret = ulist_add_merge(parents, eb->start,
+-                                            (uintptr_t)eie,
+-                                            (u64 *)&old, GFP_NOFS);
++                      ret = ulist_add_merge_ptr(parents, eb->start,
++                                                eie, (void **)&old, GFP_NOFS);
+                       if (ret < 0)
+                               break;
+                       if (!ret && extent_item_pos) {
+@@ -1011,9 +1010,9 @@ again:
+                                       goto out;
+                               ref->inode_list = eie;
+                       }
+-                      ret = ulist_add_merge(refs, ref->parent,
+-                                            (uintptr_t)ref->inode_list,
+-                                            (u64 *)&eie, GFP_NOFS);
++                      ret = ulist_add_merge_ptr(refs, ref->parent,
++                                                ref->inode_list,
++                                                (void **)&eie, GFP_NOFS);
+                       if (ret < 0)
+                               goto out;
+                       if (!ret && extent_item_pos) {
+--- a/fs/btrfs/ulist.h
++++ b/fs/btrfs/ulist.h
+@@ -57,6 +57,21 @@ void ulist_free(struct ulist *ulist);
+ int ulist_add(struct ulist *ulist, u64 val, u64 aux, gfp_t gfp_mask);
+ int ulist_add_merge(struct ulist *ulist, u64 val, u64 aux,
+                   u64 *old_aux, gfp_t gfp_mask);
++
++/* just like ulist_add_merge() but take a pointer for the aux data */
++static inline int ulist_add_merge_ptr(struct ulist *ulist, u64 val, void *aux,
++                                    void **old_aux, gfp_t gfp_mask)
++{
++#if BITS_PER_LONG == 32
++      u64 old64 = (uintptr_t)*old_aux;
++      int ret = ulist_add_merge(ulist, val, (uintptr_t)aux, &old64, gfp_mask);
++      *old_aux = (void *)((uintptr_t)old64);
++      return ret;
++#else
++      return ulist_add_merge(ulist, val, (u64)aux, (u64 *)old_aux, gfp_mask);
++#endif
++}
++
+ struct ulist_node *ulist_next(struct ulist *ulist,
+                             struct ulist_iterator *uiter);
+ 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/drm-omapdrm-fix-compiler-errors 
new/patches.fixes/drm-omapdrm-fix-compiler-errors
--- old/patches.fixes/drm-omapdrm-fix-compiler-errors   1970-01-01 
01:00:00.000000000 +0100
+++ new/patches.fixes/drm-omapdrm-fix-compiler-errors   2014-08-26 
13:57:20.000000000 +0200
@@ -0,0 +1,113 @@
+From 2d31ca3ad7d5d44c8adc7f253c96ce33f3a2e931 Mon Sep 17 00:00:00 2001
+From: Russell King <[email protected]>
+Date: Sat, 12 Jul 2014 10:53:41 +0100
+Subject: [PATCH] drm: omapdrm: fix compiler errors
+Git-commit: 2d31ca3ad7d5d44c8adc7f253c96ce33f3a2e931
+Patch-mainline: 3.17-rc1
+
+Regular randconfig nightly testing has detected problems with omapdrm.
+
+omapdrm fails to build when the kernel is built to support 64-bit DMA
+addresses and/or 64-bit physical addresses due to an assumption about
+the width of these types.
+
+Use %pad to print DMA addresses, rather than %x or %Zx (which is even
+more wrong than %x).  Avoid passing a uint32_t pointer into a function
+which expects dma_addr_t pointer.
+
+Drivers/gpu/drm/omapdrm/omap_plane.c: In function 'omap_plane_pre_apply':
+drivers/gpu/drm/omapdrm/omap_plane.c:145:2: error: format '%x' expects 
argument of type 'unsigned int', but argument 5 has type 'dma_addr_t' 
[-Werror=format]
+drivers/gpu/drm/omapdrm/omap_plane.c:145:2: error: format '%x' expects 
argument of type 'unsigned int', but argument 6 has type 'dma_addr_t' 
[-Werror=format]
+Make[5]: *** [drivers/gpu/drm/omapdrm/omap_plane.o] Error 1
+Drivers/gpu/drm/omapdrm/omap_gem.c: In function 'omap_gem_get_paddr':
+drivers/gpu/drm/omapdrm/omap_gem.c:794:4: error: format '%x' expects argument 
of type 'unsigned int', but argument 3 has type 'dma_addr_t' [-Werror=format]
+Drivers/gpu/drm/omapdrm/omap_gem.c: In function 'omap_gem_describe':
+drivers/gpu/drm/omapdrm/omap_gem.c:991:4: error: format '%Zx' expects argument 
of type 'size_t', but argument 7 has type 'dma_addr_t' [-Werror=format]
+Drivers/gpu/drm/omapdrm/omap_gem.c: In function 'omap_gem_init':
+drivers/gpu/drm/omapdrm/omap_gem.c:1470:4: error: format '%x' expects argument 
of type 'unsigned int', but argument 7 has type 'dma_addr_t' [-Werror=format]
+Make[5]: *** [drivers/gpu/drm/omapdrm/omap_gem.o] Error 1
+Drivers/gpu/drm/omapdrm/omap_dmm_tiler.c: In function 'dmm_txn_append':
+drivers/gpu/drm/omapdrm/omap_dmm_tiler.c:226:2: error: passing argument 3 of 
'alloc_dma' from incompatible pointer type [-Werror]
+Make[5]: *** [drivers/gpu/drm/omapdrm/omap_dmm_tiler.o] Error 1
+Make[5]: Target `__build' not remade because of errors.
+Make[4]: *** [drivers/gpu/drm/omapdrm] Error 2
+
+Signed-off-by: Russell King <[email protected]>
+Signed-off-by: Dave Airlie <[email protected]>
+Acked-by: Takashi Iwai <[email protected]>
+
+---
+ drivers/gpu/drm/omapdrm/omap_dmm_tiler.c |    6 ++++--
+ drivers/gpu/drm/omapdrm/omap_gem.c       |   10 +++++-----
+ drivers/gpu/drm/omapdrm/omap_plane.c     |    4 ++--
+ 3 files changed, 11 insertions(+), 9 deletions(-)
+
+--- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
++++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
+@@ -199,7 +199,7 @@ static struct dmm_txn *dmm_txn_init(stru
+ static void dmm_txn_append(struct dmm_txn *txn, struct pat_area *area,
+               struct page **pages, uint32_t npages, uint32_t roll)
+ {
+-      dma_addr_t pat_pa = 0;
++      dma_addr_t pat_pa = 0, data_pa = 0;
+       uint32_t *data;
+       struct pat *pat;
+       struct refill_engine *engine = txn->engine_handle;
+@@ -223,7 +223,9 @@ static void dmm_txn_append(struct dmm_tx
+                       .lut_id = engine->tcm->lut_id,
+               };
+ 
+-      data = alloc_dma(txn, 4*i, &pat->data_pa);
++      data = alloc_dma(txn, 4*i, &data_pa);
++      /* FIXME: what if data_pa is more than 32-bit ? */
++      pat->data_pa = data_pa;
+ 
+       while (i--) {
+               int n = i + roll;
+--- a/drivers/gpu/drm/omapdrm/omap_gem.c
++++ b/drivers/gpu/drm/omapdrm/omap_gem.c
+@@ -791,7 +791,7 @@ int omap_gem_get_paddr(struct drm_gem_ob
+                       omap_obj->paddr = tiler_ssptr(block);
+                       omap_obj->block = block;
+ 
+-                      DBG("got paddr: %08x", omap_obj->paddr);
++                      DBG("got paddr: %pad", &omap_obj->paddr);
+               }
+ 
+               omap_obj->paddr_cnt++;
+@@ -985,9 +985,9 @@ void omap_gem_describe(struct drm_gem_ob
+ 
+       off = drm_vma_node_start(&obj->vma_node);
+ 
+-      seq_printf(m, "%08x: %2d (%2d) %08llx %08Zx (%2d) %p %4d",
++      seq_printf(m, "%08x: %2d (%2d) %08llx %pad (%2d) %p %4d",
+                       omap_obj->flags, obj->name, 
obj->refcount.refcount.counter,
+-                      off, omap_obj->paddr, omap_obj->paddr_cnt,
++                      off, &omap_obj->paddr, omap_obj->paddr_cnt,
+                       omap_obj->vaddr, omap_obj->roll);
+ 
+       if (omap_obj->flags & OMAP_BO_TILED) {
+@@ -1467,8 +1467,8 @@ void omap_gem_init(struct drm_device *de
+                       entry->paddr = tiler_ssptr(block);
+                       entry->block = block;
+ 
+-                      DBG("%d:%d: %dx%d: paddr=%08x stride=%d", i, j, w, h,
+-                                      entry->paddr,
++                      DBG("%d:%d: %dx%d: paddr=%pad stride=%d", i, j, w, h,
++                                      &entry->paddr,
+                                       usergart[i].stride_pfn << PAGE_SHIFT);
+               }
+       }
+--- a/drivers/gpu/drm/omapdrm/omap_plane.c
++++ b/drivers/gpu/drm/omapdrm/omap_plane.c
+@@ -142,8 +142,8 @@ static void omap_plane_pre_apply(struct
+       DBG("%dx%d -> %dx%d (%d)", info->width, info->height,
+                       info->out_width, info->out_height,
+                       info->screen_width);
+-      DBG("%d,%d %08x %08x", info->pos_x, info->pos_y,
+-                      info->paddr, info->p_uv_addr);
++      DBG("%d,%d %pad %pad", info->pos_x, info->pos_y,
++                      &info->paddr, &info->p_uv_addr);
+ 
+       /* TODO: */
+       ilace = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.fixes/rtsx_usb-export-device-table 
new/patches.fixes/rtsx_usb-export-device-table
--- old/patches.fixes/rtsx_usb-export-device-table      1970-01-01 
01:00:00.000000000 +0100
+++ new/patches.fixes/rtsx_usb-export-device-table      2014-08-26 
13:57:20.000000000 +0200
@@ -0,0 +1,28 @@
+From: Jeff Mahoney <[email protected]>
+Subject: rtsx_usb: export device table
+References: bnc#890096
+Patch-mainline: Submitted to LKML 8 Aug 2014
+
+The rtsx_usb driver contains the table for the devices it supports but
+doesn't export it. As a result, no alias is generated and it doesn't
+get loaded automatically.
+
+Via https://bugzilla.novell.com/show_bug.cgi?id=890096
+
+Reported-by: Marcel Witte <[email protected]>
+Signed-off-by: Jeff Mahoney <[email protected]>
+---
+ drivers/mfd/rtsx_usb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/mfd/rtsx_usb.c
++++ b/drivers/mfd/rtsx_usb.c
+@@ -744,6 +744,7 @@ static struct usb_device_id rtsx_usb_usb
+       { USB_DEVICE(0x0BDA, 0x0140) },
+       { }
+ };
++MODULE_DEVICE_TABLE(usb, rtsx_usb_usb_ids);
+ 
+ static struct usb_driver rtsx_usb_driver = {
+       .name                   = "rtsx_usb",
+

++++++ patches.kernel.org.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.kernel.org/patch-3.16.1 
new/patches.kernel.org/patch-3.16.1
--- old/patches.kernel.org/patch-3.16.1 1970-01-01 01:00:00.000000000 +0100
+++ new/patches.kernel.org/patch-3.16.1 2014-08-17 10:28:54.000000000 +0200
@@ -0,0 +1,530 @@
+From: Jiri Slaby <[email protected]>
+Subject: Linux 3.16.1
+Patch-mainline: 3.16.1
+Git-commit: 093758e3daede29cb4ce6aedb111becf9d4bfc57
+Git-commit: 4ec1b01029b4facb651b8ef70bc20a4be4cebc63
+Git-commit: fe418231b195c205701c0cc550a03f6c9758fd9e
+Git-commit: 5cdceab3d5e02eb69ea0f5d8fa9181800baf6f77
+Git-commit: 4ca9a23765da3260058db3431faf5b4efd8cf926
+Git-commit: 18f38132528c3e603c66ea464727b29e9bbcb91b
+Git-commit: 4d8fdc95c60e90d84c8257a0067ff4b1729a3757
+Git-commit: 757efd32d5ce31f67193cc0e6a56e4dffcc42fb1
+Git-commit: ce7991e8198b80eb6b4441b6f6114bea4a665d66
+Git-commit: d9124268d84a836f14a6ead54ff9d8eee4c43be5
+Git-commit: 06ebb06d49486676272a3c030bfeef4bd969a8e6
+Git-commit: fcdfe3a7fa4cb74391d42b6a26dc07c20dab1d82
+Git-commit: 081e83a78db9b0ae1f5eabc2dedecc865f509b98
+Git-commit: c36c9d50cc6af5c5bfcc195f21b73f55520c15f9
+Git-commit: 1f74e613ded11517db90b2bd57e9464d9e0fb161
+Git-commit: 45a07695bc64b3ab5d6d2215f9677e5b8c05a7d0
+Git-commit: 95cb5745983c222867cc9ac593aebb2ad67d72c0
+
+Signed-off-by: Jiri Slaby <[email protected]>
+---
+diff --git a/Makefile b/Makefile
+index d0901b46b4bf..87663a2d1d10 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,8 +1,8 @@
+ VERSION = 3
+ PATCHLEVEL = 16
+-SUBLEVEL = 0
++SUBLEVEL = 1
+ EXTRAVERSION =
+-NAME = Shuffling Zombie Juror
++NAME = Museum of Fishiegoodies
+ 
+ # *DOCUMENTATION*
+ # To see a list of typical targets execute "make help"
+diff --git a/arch/sparc/include/asm/tlbflush_64.h 
b/arch/sparc/include/asm/tlbflush_64.h
+index 816d8202fa0a..dea1cfa2122b 100644
+--- a/arch/sparc/include/asm/tlbflush_64.h
++++ b/arch/sparc/include/asm/tlbflush_64.h
+@@ -34,6 +34,8 @@ static inline void flush_tlb_range(struct vm_area_struct 
*vma,
+ {
+ }
+ 
++void flush_tlb_kernel_range(unsigned long start, unsigned long end);
++
+ #define __HAVE_ARCH_ENTER_LAZY_MMU_MODE
+ 
+ void flush_tlb_pending(void);
+@@ -48,11 +50,6 @@ void __flush_tlb_kernel_range(unsigned long start, unsigned 
long end);
+ 
+ #ifndef CONFIG_SMP
+ 
+-#define flush_tlb_kernel_range(start,end) \
+-do {  flush_tsb_kernel_range(start,end); \
+-      __flush_tlb_kernel_range(start,end); \
+-} while (0)
+-
+ static inline void global_flush_tlb_page(struct mm_struct *mm, unsigned long 
vaddr)
+ {
+       __flush_tlb_page(CTX_HWBITS(mm->context), vaddr);
+@@ -63,11 +60,6 @@ static inline void global_flush_tlb_page(struct mm_struct 
*mm, unsigned long vad
+ void smp_flush_tlb_kernel_range(unsigned long start, unsigned long end);
+ void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr);
+ 
+-#define flush_tlb_kernel_range(start, end) \
+-do {  flush_tsb_kernel_range(start,end); \
+-      smp_flush_tlb_kernel_range(start, end); \
+-} while (0)
+-
+ #define global_flush_tlb_page(mm, vaddr) \
+       smp_flush_tlb_page(mm, vaddr)
+ 
+diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
+index e01d75d40329..66dacd56bb10 100644
+--- a/arch/sparc/kernel/ldc.c
++++ b/arch/sparc/kernel/ldc.c
+@@ -1336,7 +1336,7 @@ int ldc_connect(struct ldc_channel *lp)
+       if (!(lp->flags & LDC_FLAG_ALLOCED_QUEUES) ||
+           !(lp->flags & LDC_FLAG_REGISTERED_QUEUES) ||
+           lp->hs_state != LDC_HS_OPEN)
+-              err = -EINVAL;
++              err = ((lp->hs_state > LDC_HS_OPEN) ? 0 : -EINVAL);
+       else
+               err = start_handshake(lp);
+ 
+diff --git a/arch/sparc/math-emu/math_32.c b/arch/sparc/math-emu/math_32.c
+index aa4d55b0bdf0..5ce8f2f64604 100644
+--- a/arch/sparc/math-emu/math_32.c
++++ b/arch/sparc/math-emu/math_32.c
+@@ -499,7 +499,7 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, 
unsigned long *fregs)
+               case 0: fsr = *pfsr;
+                       if (IR == -1) IR = 2;
+                       /* fcc is always fcc0 */
+-                      fsr &= ~0xc00; fsr |= (IR << 10); break;
++                      fsr &= ~0xc00; fsr |= (IR << 10);
+                       *pfsr = fsr;
+                       break;
+               case 1: rd->s = IR; break;
+diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
+index 16b58ff11e65..2cfb0f25e0ed 100644
+--- a/arch/sparc/mm/init_64.c
++++ b/arch/sparc/mm/init_64.c
+@@ -351,6 +351,10 @@ void update_mmu_cache(struct vm_area_struct *vma, 
unsigned long address, pte_t *
+ 
+       mm = vma->vm_mm;
+ 
++      /* Don't insert a non-valid PTE into the TSB, we'll deadlock.  */
++      if (!pte_accessible(mm, pte))
++              return;
++
+       spin_lock_irqsave(&mm->context.lock, flags);
+ 
+ #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
+@@ -2619,6 +2623,10 @@ void update_mmu_cache_pmd(struct vm_area_struct *vma, 
unsigned long addr,
+ 
+       pte = pmd_val(entry);
+ 
++      /* Don't insert a non-valid PMD into the TSB, we'll deadlock.  */
++      if (!(pte & _PAGE_VALID))
++              return;
++
+       /* We are fabricating 8MB pages using 4MB real hw pages.  */
+       pte |= (addr & (1UL << REAL_HPAGE_SHIFT));
+ 
+@@ -2699,3 +2707,26 @@ void hugetlb_setup(struct pt_regs *regs)
+       }
+ }
+ #endif
++
++#ifdef CONFIG_SMP
++#define do_flush_tlb_kernel_range     smp_flush_tlb_kernel_range
++#else
++#define do_flush_tlb_kernel_range     __flush_tlb_kernel_range
++#endif
++
++void flush_tlb_kernel_range(unsigned long start, unsigned long end)
++{
++      if (start < HI_OBP_ADDRESS && end > LOW_OBP_ADDRESS) {
++              if (start < LOW_OBP_ADDRESS) {
++                      flush_tsb_kernel_range(start, LOW_OBP_ADDRESS);
++                      do_flush_tlb_kernel_range(start, LOW_OBP_ADDRESS);
++              }
++              if (end > HI_OBP_ADDRESS) {
++                      flush_tsb_kernel_range(end, HI_OBP_ADDRESS);
++                      do_flush_tlb_kernel_range(end, HI_OBP_ADDRESS);
++              }
++      } else {
++              flush_tsb_kernel_range(start, end);
++              do_flush_tlb_kernel_range(start, end);
++      }
++}
+diff --git a/drivers/net/ethernet/broadcom/tg3.c 
b/drivers/net/ethernet/broadcom/tg3.c
+index 8afa579e7c40..a3dd5dc64f4c 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -7830,17 +7830,18 @@ static int tigon3_dma_hwbug_workaround(struct tg3_napi 
*tnapi,
+ 
+ static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
+ 
+-/* Use GSO to workaround a rare TSO bug that may be triggered when the
+- * TSO header is greater than 80 bytes.
++/* Use GSO to workaround all TSO packets that meet HW bug conditions
++ * indicated in tg3_tx_frag_set()
+  */
+-static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
++static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
++                     struct netdev_queue *txq, struct sk_buff *skb)
+ {
+       struct sk_buff *segs, *nskb;
+       u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
+ 
+       /* Estimate the number of fragments in the worst case */
+-      if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
+-              netif_stop_queue(tp->dev);
++      if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
++              netif_tx_stop_queue(txq);
+ 
+               /* netif_tx_stop_queue() must be done before checking
+                * checking tx index in tg3_tx_avail() below, because in
+@@ -7848,13 +7849,14 @@ static int tg3_tso_bug(struct tg3 *tp, struct sk_buff 
*skb)
+                * netif_tx_queue_stopped().
+                */
+               smp_mb();
+-              if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
++              if (tg3_tx_avail(tnapi) <= frag_cnt_est)
+                       return NETDEV_TX_BUSY;
+ 
+-              netif_wake_queue(tp->dev);
++              netif_tx_wake_queue(txq);
+       }
+ 
+-      segs = skb_gso_segment(skb, tp->dev->features & ~(NETIF_F_TSO | 
NETIF_F_TSO6));
++      segs = skb_gso_segment(skb, tp->dev->features &
++                                  ~(NETIF_F_TSO | NETIF_F_TSO6));
+       if (IS_ERR(segs) || !segs)
+               goto tg3_tso_bug_end;
+ 
+@@ -7930,7 +7932,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, 
struct net_device *dev)
+               if (!skb_is_gso_v6(skb)) {
+                       if (unlikely((ETH_HLEN + hdr_len) > 80) &&
+                           tg3_flag(tp, TSO_BUG))
+-                              return tg3_tso_bug(tp, skb);
++                              return tg3_tso_bug(tp, tnapi, txq, skb);
+ 
+                       ip_csum = iph->check;
+                       ip_tot_len = iph->tot_len;
+@@ -8061,7 +8063,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, 
struct net_device *dev)
+                               iph->tot_len = ip_tot_len;
+                       }
+                       tcph->check = tcp_csum;
+-                      return tg3_tso_bug(tp, skb);
++                      return tg3_tso_bug(tp, tnapi, txq, skb);
+               }
+ 
+               /* If the workaround fails due to memory/mapping
+diff --git a/drivers/net/ethernet/brocade/bna/bnad.c 
b/drivers/net/ethernet/brocade/bna/bnad.c
+index 3a77f9ead004..556aab75f490 100644
+--- a/drivers/net/ethernet/brocade/bna/bnad.c
++++ b/drivers/net/ethernet/brocade/bna/bnad.c
+@@ -600,9 +600,9 @@ bnad_cq_process(struct bnad *bnad, struct bna_ccb *ccb, 
int budget)
+       prefetch(bnad->netdev);
+ 
+       cq = ccb->sw_q;
+-      cmpl = &cq[ccb->producer_index];
+ 
+       while (packets < budget) {
++              cmpl = &cq[ccb->producer_index];
+               if (!cmpl->valid)
+                       break;
+               /* The 'valid' field is set by the adapter, only after writing
+diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
+index 958df383068a..ef8a5c20236a 100644
+--- a/drivers/net/macvlan.c
++++ b/drivers/net/macvlan.c
+@@ -646,6 +646,7 @@ static int macvlan_init(struct net_device *dev)
+                                 (lowerdev->state & MACVLAN_STATE_MASK);
+       dev->features           = lowerdev->features & MACVLAN_FEATURES;
+       dev->features           |= ALWAYS_ON_FEATURES;
++      dev->vlan_features      = lowerdev->vlan_features & MACVLAN_FEATURES;
+       dev->gso_max_size       = lowerdev->gso_max_size;
+       dev->iflink             = lowerdev->ifindex;
+       dev->hard_header_len    = lowerdev->hard_header_len;
+diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
+index 203651ebccb0..4eaadcfcb0fe 100644
+--- a/drivers/net/phy/mdio_bus.c
++++ b/drivers/net/phy/mdio_bus.c
+@@ -255,7 +255,6 @@ int mdiobus_register(struct mii_bus *bus)
+ 
+       bus->dev.parent = bus->parent;
+       bus->dev.class = &mdio_bus_class;
+-      bus->dev.driver = bus->parent->driver;
+       bus->dev.groups = NULL;
+       dev_set_name(&bus->dev, "%s", bus->id);
+ 
+diff --git a/drivers/sbus/char/bbc_envctrl.c b/drivers/sbus/char/bbc_envctrl.c
+index 160e7510aca6..0787b9756165 100644
+--- a/drivers/sbus/char/bbc_envctrl.c
++++ b/drivers/sbus/char/bbc_envctrl.c
+@@ -452,6 +452,9 @@ static void attach_one_temp(struct bbc_i2c_bus *bp, struct 
platform_device *op,
+       if (!tp)
+               return;
+ 
++      INIT_LIST_HEAD(&tp->bp_list);
++      INIT_LIST_HEAD(&tp->glob_list);
++
+       tp->client = bbc_i2c_attach(bp, op);
+       if (!tp->client) {
+               kfree(tp);
+@@ -497,6 +500,9 @@ static void attach_one_fan(struct bbc_i2c_bus *bp, struct 
platform_device *op,
+       if (!fp)
+               return;
+ 
++      INIT_LIST_HEAD(&fp->bp_list);
++      INIT_LIST_HEAD(&fp->glob_list);
++
+       fp->client = bbc_i2c_attach(bp, op);
+       if (!fp->client) {
+               kfree(fp);
+diff --git a/drivers/sbus/char/bbc_i2c.c b/drivers/sbus/char/bbc_i2c.c
+index c7763e482eb2..812b5f0361b6 100644
+--- a/drivers/sbus/char/bbc_i2c.c
++++ b/drivers/sbus/char/bbc_i2c.c
+@@ -300,13 +300,18 @@ static struct bbc_i2c_bus * attach_one_i2c(struct 
platform_device *op, int index
+       if (!bp)
+               return NULL;
+ 
++      INIT_LIST_HEAD(&bp->temps);
++      INIT_LIST_HEAD(&bp->fans);
++
+       bp->i2c_control_regs = of_ioremap(&op->resource[0], 0, 0x2, 
"bbc_i2c_regs");
+       if (!bp->i2c_control_regs)
+               goto fail;
+ 
+-      bp->i2c_bussel_reg = of_ioremap(&op->resource[1], 0, 0x1, 
"bbc_i2c_bussel");
+-      if (!bp->i2c_bussel_reg)
+-              goto fail;
++      if (op->num_resources == 2) {
++              bp->i2c_bussel_reg = of_ioremap(&op->resource[1], 0, 0x1, 
"bbc_i2c_bussel");
++              if (!bp->i2c_bussel_reg)
++                      goto fail;
++      }
+ 
+       bp->waiting = 0;
+       init_waitqueue_head(&bp->wq);
+diff --git a/drivers/tty/serial/sunsab.c b/drivers/tty/serial/sunsab.c
+index 2f57df9a71d9..a1e09c0d46f2 100644
+--- a/drivers/tty/serial/sunsab.c
++++ b/drivers/tty/serial/sunsab.c
+@@ -157,6 +157,15 @@ receive_chars(struct uart_sunsab_port *up,
+           (up->port.line == up->port.cons->index))
+               saw_console_brk = 1;
+ 
++      if (count == 0) {
++              if (unlikely(stat->sreg.isr1 & SAB82532_ISR1_BRK)) {
++                      stat->sreg.isr0 &= ~(SAB82532_ISR0_PERR |
++                                           SAB82532_ISR0_FERR);
++                      up->port.icount.brk++;
++                      uart_handle_break(&up->port);
++              }
++      }
++
+       for (i = 0; i < count; i++) {
+               unsigned char ch = buf[i], flag;
+ 
+diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
+index a4daf9eb8562..8dd8cab88b87 100644
+--- a/include/net/ip_tunnels.h
++++ b/include/net/ip_tunnels.h
+@@ -40,6 +40,7 @@ struct ip_tunnel_prl_entry {
+ 
+ struct ip_tunnel_dst {
+       struct dst_entry __rcu          *dst;
++      __be32                           saddr;
+ };
+ 
+ struct ip_tunnel {
+diff --git a/lib/iovec.c b/lib/iovec.c
+index 7a7c2da4cddf..df3abd1eaa4a 100644
+--- a/lib/iovec.c
++++ b/lib/iovec.c
+@@ -85,6 +85,10 @@ EXPORT_SYMBOL(memcpy_toiovecend);
+ int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,
+                       int offset, int len)
+ {
++      /* No data? Done! */
++      if (len == 0)
++              return 0;
++
+       /* Skip over the finished iovecs */
+       while (offset >= iov->iov_len) {
+               offset -= iov->iov_len;
+diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
+index f14e54a05691..022d18ab27a6 100644
+--- a/net/batman-adv/fragmentation.c
++++ b/net/batman-adv/fragmentation.c
+@@ -128,6 +128,7 @@ static bool batadv_frag_insert_packet(struct 
batadv_orig_node *orig_node,
+ {
+       struct batadv_frag_table_entry *chain;
+       struct batadv_frag_list_entry *frag_entry_new = NULL, *frag_entry_curr;
++      struct batadv_frag_list_entry *frag_entry_last = NULL;
+       struct batadv_frag_packet *frag_packet;
+       uint8_t bucket;
+       uint16_t seqno, hdr_size = sizeof(struct batadv_frag_packet);
+@@ -180,11 +181,14 @@ static bool batadv_frag_insert_packet(struct 
batadv_orig_node *orig_node,
+                       ret = true;
+                       goto out;
+               }
++
++              /* store current entry because it could be the last in list */
++              frag_entry_last = frag_entry_curr;
+       }
+ 
+-      /* Reached the end of the list, so insert after 'frag_entry_curr'. */
+-      if (likely(frag_entry_curr)) {
+-              hlist_add_after(&frag_entry_curr->list, &frag_entry_new->list);
++      /* Reached the end of the list, so insert after 'frag_entry_last'. */
++      if (likely(frag_entry_last)) {
++              hlist_add_after(&frag_entry_last->list, &frag_entry_new->list);
+               chain->size += skb->len - hdr_size;
+               chain->timestamp = jiffies;
+               ret = true;
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index c1a33033cbe2..58ff88edbefd 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -2976,9 +2976,9 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,
+               tail = nskb;
+ 
+               __copy_skb_header(nskb, head_skb);
+-              nskb->mac_len = head_skb->mac_len;
+ 
+               skb_headers_offset_update(nskb, skb_headroom(nskb) - headroom);
++              skb_reset_mac_len(nskb);
+ 
+               skb_copy_from_linear_data_offset(head_skb, -tnl_hlen,
+                                                nskb->data - tnl_hlen,
+diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
+index 6f9de61dce5f..45920d928341 100644
+--- a/net/ipv4/ip_tunnel.c
++++ b/net/ipv4/ip_tunnel.c
+@@ -69,23 +69,25 @@ static unsigned int ip_tunnel_hash(__be32 key, __be32 
remote)
+ }
+ 
+ static void __tunnel_dst_set(struct ip_tunnel_dst *idst,
+-                           struct dst_entry *dst)
++                           struct dst_entry *dst, __be32 saddr)
+ {
+       struct dst_entry *old_dst;
+ 
+       dst_clone(dst);
+       old_dst = xchg((__force struct dst_entry **)&idst->dst, dst);
+       dst_release(old_dst);
++      idst->saddr = saddr;
+ }
+ 
+-static void tunnel_dst_set(struct ip_tunnel *t, struct dst_entry *dst)
++static void tunnel_dst_set(struct ip_tunnel *t,
++                         struct dst_entry *dst, __be32 saddr)
+ {
+-      __tunnel_dst_set(this_cpu_ptr(t->dst_cache), dst);
++      __tunnel_dst_set(this_cpu_ptr(t->dst_cache), dst, saddr);
+ }
+ 
+ static void tunnel_dst_reset(struct ip_tunnel *t)
+ {
+-      tunnel_dst_set(t, NULL);
++      tunnel_dst_set(t, NULL, 0);
+ }
+ 
+ void ip_tunnel_dst_reset_all(struct ip_tunnel *t)
+@@ -93,20 +95,25 @@ void ip_tunnel_dst_reset_all(struct ip_tunnel *t)
+       int i;
+ 
+       for_each_possible_cpu(i)
+-              __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
++              __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL, 0);
+ }
+ EXPORT_SYMBOL(ip_tunnel_dst_reset_all);
+ 
+-static struct rtable *tunnel_rtable_get(struct ip_tunnel *t, u32 cookie)
++static struct rtable *tunnel_rtable_get(struct ip_tunnel *t,
++                                      u32 cookie, __be32 *saddr)
+ {
++      struct ip_tunnel_dst *idst;
+       struct dst_entry *dst;
+ 
+       rcu_read_lock();
+-      dst = rcu_dereference(this_cpu_ptr(t->dst_cache)->dst);
++      idst = this_cpu_ptr(t->dst_cache);
++      dst = rcu_dereference(idst->dst);
+       if (dst && !atomic_inc_not_zero(&dst->__refcnt))
+               dst = NULL;
+       if (dst) {
+-              if (dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
++              if (!dst->obsolete || dst->ops->check(dst, cookie)) {
++                      *saddr = idst->saddr;
++              } else {
+                       tunnel_dst_reset(t);
+                       dst_release(dst);
+                       dst = NULL;
+@@ -367,7 +374,7 @@ static int ip_tunnel_bind_dev(struct net_device *dev)
+ 
+               if (!IS_ERR(rt)) {
+                       tdev = rt->dst.dev;
+-                      tunnel_dst_set(tunnel, &rt->dst);
++                      tunnel_dst_set(tunnel, &rt->dst, fl4.saddr);
+                       ip_rt_put(rt);
+               }
+               if (dev->type != ARPHRD_ETHER)
+@@ -610,7 +617,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device 
*dev,
+       init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr,
+                        tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link);
+ 
+-      rt = connected ? tunnel_rtable_get(tunnel, 0) : NULL;
++      rt = connected ? tunnel_rtable_get(tunnel, 0, &fl4.saddr) : NULL;
+ 
+       if (!rt) {
+               rt = ip_route_output_key(tunnel->net, &fl4);
+@@ -620,7 +627,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device 
*dev,
+                       goto tx_error;
+               }
+               if (connected)
+-                      tunnel_dst_set(tunnel, &rt->dst);
++                      tunnel_dst_set(tunnel, &rt->dst, fl4.saddr);
+       }
+ 
+       if (rt->dst.dev == dev) {
+diff --git a/net/ipv4/tcp_vegas.c b/net/ipv4/tcp_vegas.c
+index 9a5e05f27f4f..b40ad897f945 100644
+--- a/net/ipv4/tcp_vegas.c
++++ b/net/ipv4/tcp_vegas.c
+@@ -218,7 +218,8 @@ static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, 
u32 acked)
+                        * This is:
+                        *     (actual rate in segments) * baseRTT
+                        */
+-                      target_cwnd = tp->snd_cwnd * vegas->baseRTT / rtt;
++                      target_cwnd = (u64)tp->snd_cwnd * vegas->baseRTT;
++                      do_div(target_cwnd, rtt);
+ 
+                       /* Calculate the difference between the window we had,
+                        * and the window we would like to have. This quantity
+diff --git a/net/ipv4/tcp_veno.c b/net/ipv4/tcp_veno.c
+index 27b9825753d1..8276977d2c85 100644
+--- a/net/ipv4/tcp_veno.c
++++ b/net/ipv4/tcp_veno.c
+@@ -144,7 +144,7 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, 
u32 acked)
+ 
+               rtt = veno->minrtt;
+ 
+-              target_cwnd = (tp->snd_cwnd * veno->basertt);
++              target_cwnd = (u64)tp->snd_cwnd * veno->basertt;
+               target_cwnd <<= V_PARAM_SHIFT;
+               do_div(target_cwnd, rtt);
+ 
+diff --git a/net/sctp/output.c b/net/sctp/output.c
+index 01ab8e0723f0..407ae2bf97b0 100644
+--- a/net/sctp/output.c
++++ b/net/sctp/output.c
+@@ -599,7 +599,7 @@ out:
+       return err;
+ no_route:
+       kfree_skb(nskb);
+-      IP_INC_STATS_BH(sock_net(asoc->base.sk), IPSTATS_MIB_OUTNOROUTES);
++      IP_INC_STATS(sock_net(asoc->base.sk), IPSTATS_MIB_OUTNOROUTES);
+ 
+       /* FIXME: Returning the 'err' will effect all the associations
+        * associated with a socket, although only one of the paths of the

++++++ patches.suse.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0003-read-lock-extent-buffer-while-walking-backrefs.patch
 
new/patches.suse/btrfs-0003-read-lock-extent-buffer-while-walking-backrefs.patch
--- 
old/patches.suse/btrfs-0003-read-lock-extent-buffer-while-walking-backrefs.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0003-read-lock-extent-buffer-while-walking-backrefs.patch
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,30 @@
+From: Filipe Manana <[email protected]>
+Date: Wed, 2 Jul 2014 20:07:54 +0100
+Patch-mainline: 3.17
+Git-commit: 6f7ff6d7832c6be13e8c95598884dbc40ad69fb7
+Subject: [PATCH] Btrfs: read lock extent buffer while walking backrefs
+
+Before processing the extent buffer, acquire a read lock on it, so
+that we're safe against concurrent updates on the extent buffer.
+
+Signed-off-by: Filipe Manana <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/backref.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/btrfs/backref.c
++++ b/fs/btrfs/backref.c
+@@ -1001,8 +1001,11 @@ again:
+                                       ret = -EIO;
+                                       goto out;
+                               }
++                              btrfs_tree_read_lock(eb);
++                              btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK);
+                               ret = find_extent_in_eb(eb, bytenr,
+                                                       *extent_item_pos, &eie);
++                              btrfs_tree_read_unlock_blocking(eb);
+                               free_extent_buffer(eb);
+                               if (ret < 0)
+                                       goto out;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0006-fix-compressed-write-corruption-on-enospc.patch 
new/patches.suse/btrfs-0006-fix-compressed-write-corruption-on-enospc.patch
--- old/patches.suse/btrfs-0006-fix-compressed-write-corruption-on-enospc.patch 
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.suse/btrfs-0006-fix-compressed-write-corruption-on-enospc.patch 
2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,41 @@
+From: Liu Bo <[email protected]>
+Date: Thu, 24 Jul 2014 22:48:05 +0800
+Patch-mainline: 3.17
+Git-commit: ce62003f690dff38d3164a632ec69efa15c32cbf
+Subject: [PATCH] Btrfs: fix compressed write corruption on enospc
+
+When failing to allocate space for the whole compressed extent, we'll
+fallback to uncompressed IO, but we've forgotten to redirty the pages
+which belong to this compressed extent, and these 'clean' pages will
+simply skip 'submit' part and go to endio directly, at last we got data
+corruption as we write nothing.
+
+Signed-off-by: Liu Bo <[email protected]>
+Tested-By: Martin Steigerwald <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/inode.c |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -709,6 +709,18 @@ retry:
+                               unlock_extent(io_tree, async_extent->start,
+                                             async_extent->start +
+                                             async_extent->ram_size - 1);
++
++                              /*
++                               * we need to redirty the pages if we decide to
++                               * fallback to uncompressed IO, otherwise we
++                               * will not submit these pages down to lower
++                               * layers.
++                               */
++                              extent_range_redirty_for_io(inode,
++                                              async_extent->start,
++                                              async_extent->start +
++                                              async_extent->ram_size - 1);
++
+                               goto retry;
+                       }
+                       goto out_free;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0008-fix-csum-tree-corruption-duplicate-and-outdate.patch
 
new/patches.suse/btrfs-0008-fix-csum-tree-corruption-duplicate-and-outdate.patch
--- 
old/patches.suse/btrfs-0008-fix-csum-tree-corruption-duplicate-and-outdate.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0008-fix-csum-tree-corruption-duplicate-and-outdate.patch
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,104 @@
+From: Filipe Manana <[email protected]>
+Date: Sat, 9 Aug 2014 21:22:27 +0100
+Patch-mainline: 3.17
+Git-commit: 27b9a8122ff71a8cadfbffb9c4f0694300464f3b
+Subject: [PATCH] Btrfs: fix csum tree corruption, duplicate and outdated
+ checksums
+
+Under rare circumstances we can end up leaving 2 versions of a checksum
+for the same file extent range.
+
+The reason for this is that after calling btrfs_next_leaf we process
+slot 0 of the leaf it returns, instead of processing the slot set in
+path->slots[0]. Most of the time (by far) path->slots[0] is 0, but after
+btrfs_next_leaf() releases the path and before it searches for the next
+leaf, another task might cause a split of the next leaf, which migrates
+some of its keys to the leaf we were processing before calling
+btrfs_next_leaf(). In this case btrfs_next_leaf() returns again the
+same leaf but with path->slots[0] having a slot number corresponding
+to the first new key it got, that is, a slot number that didn't exist
+before calling btrfs_next_leaf(), as the leaf now has more keys than
+it had before. So we must really process the returned leaf starting at
+path->slots[0] always, as it isn't always 0, and the key at slot 0 can
+have an offset much lower than our search offset/bytenr.
+
+For example, consider the following scenario, where we have:
+
+sums->bytenr: 40157184, sums->len: 16384, sums end: 40173568
+four 4kb file data blocks with offsets 40157184, 40161280, 40165376, 40169472
+
+  Leaf N:
+
+    slot = 0                           slot = btrfs_header_nritems() - 1
+  |-------------------------------------------------------------------|
+  | [(CSUM CSUM 39239680), size 8] ... [(CSUM CSUM 40116224), size 4] |
+  |-------------------------------------------------------------------|
+
+  Leaf N + 1:
+
+      slot = 0                          slot = btrfs_header_nritems() - 1
+  |--------------------------------------------------------------------|
+  | [(CSUM CSUM 40161280), size 32] ... [((CSUM CSUM 40615936), size 8 |
+  |--------------------------------------------------------------------|
+
+Because we are at the last slot of leaf N, we call btrfs_next_leaf() to
+find the next highest key, which releases the current path and then searches
+for that next key. However after releasing the path and before finding that
+next key, the item at slot 0 of leaf N + 1 gets moved to leaf N, due to a call
+to ctree.c:push_leaf_left() (via ctree.c:split_leaf()), and therefore
+btrfs_next_leaf() will returns us a path again with leaf N but with the slot
+pointing to its new last key (CSUM CSUM 40161280). This new version of leaf N
+is then:
+
+    slot = 0                        slot = btrfs_header_nritems() - 2  slot = 
btrfs_header_nritems() - 1
+  
|----------------------------------------------------------------------------------------------------|
+  | [(CSUM CSUM 39239680), size 8] ... [(CSUM CSUM 40116224), size 4]  [(CSUM 
CSUM 40161280), size 32] |
+  
|----------------------------------------------------------------------------------------------------|
+
+And incorrecly using slot 0, makes us set next_offset to 39239680 and we jump
+into the "insert:" label, which will set tmp to:
+
+    tmp = min((sums->len - total_bytes) >> blocksize_bits,
+        (next_offset - file_key.offset) >> blocksize_bits) =
+    min((16384 - 0) >> 12, (39239680 - 40157184) >> 12) =
+    min(4, (u64)-917504 = 18446744073708634112 >> 12) = 4
+
+and
+
+   ins_size = csum_size * tmp = 4 * 4 = 16 bytes.
+
+In other words, we insert a new csum item in the tree with key
+(CSUM_OBJECTID CSUM_KEY 40157184 = sums->bytenr) that contains the checksums
+for all the data (4 blocks of 4096 bytes each = sums->len). Which is wrong,
+because the item with key (CSUM CSUM 40161280) (the one that was moved from
+leaf N + 1 to the end of leaf N) contains the old checksums of the last 12288
+bytes of our data and won't get those old checksums removed.
+
+So this leaves us 2 different checksums for 3 4kb blocks of data in the tree,
+and breaks the logical rule:
+
+   Key_N+1.offset >= Key_N.offset + length_of_data_its_checksums_cover
+
+An obvious bad effect of this is that a subsequent csum tree lookup to get
+the checksum of any of the blocks with logical offset of 40161280, 40165376
+or 40169472 (the last 3 4kb blocks of file data), will get the old checksums.
+
+Cc: [email protected]
+Signed-off-by: Filipe Manana <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/file-item.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/btrfs/file-item.c
++++ b/fs/btrfs/file-item.c
+@@ -756,7 +756,7 @@ again:
+                               found_next = 1;
+                       if (ret != 0)
+                               goto insert;
+-                      slot = 0;
++                      slot = path->slots[0];
+               }
+               btrfs_item_key_to_cpu(path->nodes[0], &found_key, slot);
+               if (found_key.objectid != BTRFS_EXTENT_CSUM_OBJECTID ||
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0011-fill_holes-Fix-slot-number-passed-to-hole_merg.patch
 
new/patches.suse/btrfs-0011-fill_holes-Fix-slot-number-passed-to-hole_merg.patch
--- 
old/patches.suse/btrfs-0011-fill_holes-Fix-slot-number-passed-to-hole_merg.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0011-fill_holes-Fix-slot-number-passed-to-hole_merg.patch
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,37 @@
+From: chandan <[email protected]>
+Date: Tue, 1 Jul 2014 12:04:28 +0530
+Patch-mainline: 3.17
+Git-commit: 1707e26d6ab05c477a91d260e31fda7c6c38588e
+Subject: [PATCH] Btrfs: fill_holes: Fix slot number passed to
+ hole_mergeable() call.
+
+For a non-existent key, btrfs_search_slot() sets path->slots[0] to the slot
+where the key could have been present, which in this case would be the slot
+containing the extent item which would be the next neighbor of the file range
+being punched. The current code passes an incremented path->slots[0] and we
+skip to the wrong file extent item. This would mean that we would fail to
+merge the "yet to be created" hole with the next neighboring hole (if one
+exists). Fix this.
+
+Signed-off-by: Chandan Rajendra <[email protected]>
+Reviewed-by: Wang Shilong <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/file.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/fs/btrfs/file.c
++++ b/fs/btrfs/file.c
+@@ -2112,10 +2112,9 @@ static int fill_holes(struct btrfs_trans
+               goto out;
+       }
+ 
+-      if (hole_mergeable(inode, leaf, path->slots[0]+1, offset, end)) {
++      if (hole_mergeable(inode, leaf, path->slots[0], offset, end)) {
+               u64 num_bytes;
+ 
+-              path->slots[0]++;
+               key.offset = offset;
+               btrfs_set_item_key_safe(root, path, &key);
+               fi = btrfs_item_ptr(leaf, path->slots[0],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0016-fix-wrong-write-range-for-filemap_fdatawrite_r.patch
 
new/patches.suse/btrfs-0016-fix-wrong-write-range-for-filemap_fdatawrite_r.patch
--- 
old/patches.suse/btrfs-0016-fix-wrong-write-range-for-filemap_fdatawrite_r.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0016-fix-wrong-write-range-for-filemap_fdatawrite_r.patch
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,30 @@
+From: Wang Shilong <[email protected]>
+Date: Thu, 17 Jul 2014 11:44:13 +0800
+Patch-mainline: 3.17
+Git-commit: 9a025a0860ccc0f02af153c966bc1f83e5d9fc62
+Subject: [PATCH] Btrfs: fix wrong write range for
+ filemap_fdatawrite_range()
+
+filemap_fdatawrite_range() expect the third arg to be @end
+not @len, fix it.
+
+Signed-off-by: Wang Shilong <[email protected]>
+Reviewed-by: David Sterba <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/inode.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -7534,7 +7534,8 @@ static ssize_t btrfs_direct_IO(int rw, s
+       count = iov_iter_count(iter);
+       if (test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT,
+                    &BTRFS_I(inode)->runtime_flags))
+-              filemap_fdatawrite_range(inode->i_mapping, offset, count);
++              filemap_fdatawrite_range(inode->i_mapping, offset,
++                                       offset + count - 1);
+ 
+       if (rw & WRITE) {
+               /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0017-fix-wrong-extent-mapping-for-DirectIO.patch 
new/patches.suse/btrfs-0017-fix-wrong-extent-mapping-for-DirectIO.patch
--- old/patches.suse/btrfs-0017-fix-wrong-extent-mapping-for-DirectIO.patch     
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.suse/btrfs-0017-fix-wrong-extent-mapping-for-DirectIO.patch     
2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,39 @@
+From: Wang Shilong <[email protected]>
+Date: Thu, 17 Jul 2014 11:44:14 +0800
+Patch-mainline: 3.17
+Git-commit: e2eca69dc6c09d968d69312b9899968a9b03a4a9
+Subject: [PATCH] Btrfs: fix wrong extent mapping for DirectIO
+
+btrfs_next_leaf() will use current leaf's last key to search
+and then return a bigger one. So it may still return a file extent
+item that is smaller than expected value and we will
+get an overflow here for @em->len.
+
+This is easy to reproduce for Btrfs Direct writting, it did not
+cause any problem, because writting will re-insert right mapping later.
+
+However, by hacking code to make DIO support compression, wrong extent
+mapping is kept and it encounter merging failure(EEXIST) quickly.
+
+Fix this problem by looping to find next file extent item that is bigger
+than @start or we could not find anything more.
+
+Signed-off-by: Wang Shilong <[email protected]>
+Reviewed-by: David Sterba <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/inode.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -6275,6 +6275,8 @@ next:
+                       goto not_found;
+               if (start + len <= found_key.offset)
+                       goto not_found;
++              if (start > found_key.offset)
++                      goto next;
+               em->start = start;
+               em->orig_start = start;
+               em->len = found_key.offset - start;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0018-Return-right-extent-when-fiemap-gives-unaligne.patch
 
new/patches.suse/btrfs-0018-Return-right-extent-when-fiemap-gives-unaligne.patch
--- 
old/patches.suse/btrfs-0018-Return-right-extent-when-fiemap-gives-unaligne.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0018-Return-right-extent-when-fiemap-gives-unaligne.patch
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,37 @@
+From: Qu Wenruo <[email protected]>
+Date: Fri, 18 Jul 2014 09:55:43 +0800
+Patch-mainline: 3.17
+Git-commit: 2c91943b5066314a8bb9f0a65584e5e4cd92ea63
+Subject: [PATCH] btrfs: Return right extent when fiemap gives unaligned
+ offset and len.
+
+When page aligned start and len passed to extent_fiemap(), the result is
+good, but when start and len is not aligned, e.g. start = 1 and len =
+4095 is passed to extent_fiemap(), it returns no extent.
+
+The problem is that start and len is all rounded down which causes the
+problem. This patch will round down start and round up (start + len) to
+return right extent.
+
+Reported-by: Chandan Rajendra <[email protected]>
+Signed-off-by: Qu Wenruo <[email protected]>
+Reviewed-by: David Sterba <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/extent_io.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/btrfs/extent_io.c
++++ b/fs/btrfs/extent_io.c
+@@ -4213,8 +4213,8 @@ int extent_fiemap(struct inode *inode, s
+               return -ENOMEM;
+       path->leave_spinning = 1;
+ 
+-      start = ALIGN(start, BTRFS_I(inode)->root->sectorsize);
+-      len = ALIGN(len, BTRFS_I(inode)->root->sectorsize);
++      start = round_down(start, BTRFS_I(inode)->root->sectorsize);
++      len = round_up(max, BTRFS_I(inode)->root->sectorsize) - start;
+ 
+       /*
+        * lookup the last file extent.  We're not using i_size here
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0025-ensure-tmpfile-inode-is-always-persisted-with-.patch
 
new/patches.suse/btrfs-0025-ensure-tmpfile-inode-is-always-persisted-with-.patch
--- 
old/patches.suse/btrfs-0025-ensure-tmpfile-inode-is-always-persisted-with-.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0025-ensure-tmpfile-inode-is-always-persisted-with-.patch
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,76 @@
+From: Filipe Manana <[email protected]>
+Date: Fri, 1 Aug 2014 00:10:32 +0100
+Patch-mainline: 3.17
+Git-commit: 5762b5c958abbecb7fb9f4596a6476d1ce91ecf6
+Subject: [PATCH] Btrfs: ensure tmpfile inode is always persisted with
+ link count of 0
+
+If we open a file with O_TMPFILE, don't do any further operation on
+it (so that the inode item isn't updated) and then force a transaction
+commit, we get a persisted inode item with a link count of 1, and not 0
+as it should be.
+
+Steps to reproduce it (requires a modern xfs_io with -T support):
+
+    $ mkfs.btrfs -f /dev/sdd
+    $ mount -o /dev/sdd /mnt
+    $ xfs_io -T /mnt &
+    $ sync
+
+Then btrfs-debug-tree shows the inode item with a link count of 1:
+
+    $ btrfs-debug-tree /dev/sdd
+    (...)
+    fs tree key (FS_TREE ROOT_ITEM 0)
+    leaf 29556736 items 4 free space 15851 generation 6 owner 5
+    fs uuid f164d01b-1b92-481d-a4e4-435fb0f843d0
+    chunk uuid 0e3d0e56-bcca-4a1c-aa5f-cec2c6f4f7a6
+       item 0 key (256 INODE_ITEM 0) itemoff 16123 itemsize 160
+               inode generation 3 transid 6 size 0 block group 0 mode 40755 
links 1
+       item 1 key (256 INODE_REF 256) itemoff 16111 itemsize 12
+               inode ref index 0 namelen 2 name: ..
+       item 2 key (257 INODE_ITEM 0) itemoff 15951 itemsize 160
+               inode generation 6 transid 6 size 0 block group 0 mode 100600 
links 1
+       item 3 key (ORPHAN ORPHAN_ITEM 257) itemoff 15951 itemsize 0
+               orphan item
+    checksum tree key (CSUM_TREE ROOT_ITEM 0)
+    (...)
+
+Signed-off-by: Filipe Manana <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/inode.c |   15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -5606,6 +5606,13 @@ static struct inode *btrfs_new_inode(str
+       }
+ 
+       /*
++       * O_TMPFILE, set link count to 0, so that after this point,
++       * we fill in an inode item with the correct link count.
++       */
++      if (!name)
++              set_nlink(inode, 0);
++
++      /*
+        * we have to initialize this early, so we can reclaim the inode
+        * number if we fail afterwards in this function.
+        */
+@@ -9013,6 +9020,14 @@ static int btrfs_tmpfile(struct inode *d
+       if (ret)
+               goto out;
+ 
++      /*
++       * We set number of links to 0 in btrfs_new_inode(), and here we set
++       * it to 1 because d_tmpfile() will issue a warning if the count is 0,
++       * through:
++       *
++       *    d_tmpfile() -> inode_dec_link_count() -> drop_nlink()
++       */
++      set_nlink(inode, 1);
+       d_tmpfile(dentry, inode);
+       mark_inode_dirty(inode);
+ 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0027-don-t-monopolize-a-core-when-evicting-inode.patch 
new/patches.suse/btrfs-0027-don-t-monopolize-a-core-when-evicting-inode.patch
--- 
old/patches.suse/btrfs-0027-don-t-monopolize-a-core-when-evicting-inode.patch   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0027-don-t-monopolize-a-core-when-evicting-inode.patch   
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,80 @@
+From: Filipe Manana <[email protected]>
+Date: Fri, 8 Aug 2014 02:47:05 +0100
+Patch-mainline: 3.17
+Git-commit: 7064dd5c36187725e7ccfd837e07678ae435d3f5
+Subject: [PATCH] Btrfs: don't monopolize a core when evicting inode
+
+If an inode has a very large number of extent maps, we can spend
+a lot of time freeing them, which triggers a soft lockup warning.
+Therefore reschedule if we need to when freeing the extent maps
+while evicting the inode.
+
+I could trigger this all the time by running xfstests/generic/299 on
+a file system with the no-holes feature enabled. That test creates
+an inode with 11386677 extent maps.
+
+    $ mkfs.btrfs -f -O no-holes $TEST_DEV
+    $ MKFS_OPTIONS="-O no-holes" ./check generic/299
+    generic/299 382s ...
+    Message from syslogd@debian-vm3 at Aug  7 10:44:29 ...
+     kernel:[85304.208017] BUG: soft lockup - CPU#0 stuck for 22s! 
[umount:25330]
+     384s
+    Ran: generic/299
+    Passed all 1 tests
+
+    $ dmesg
+    (...)
+    [86304.300017] BUG: soft lockup - CPU#0 stuck for 23s! [umount:25330]
+    (...)
+    [86304.300036] Call Trace:
+    [86304.300036]  [<ffffffff81698ba9>] __slab_free+0x54/0x295
+    [86304.300036]  [<ffffffffa02ee9cc>] ? free_extent_map+0x5c/0xb0 [btrfs]
+    [86304.300036]  [<ffffffff811a6cd2>] kmem_cache_free+0x282/0x2a0
+    [86304.300036]  [<ffffffffa02ee9cc>] free_extent_map+0x5c/0xb0 [btrfs]
+    [86304.300036]  [<ffffffffa02e3775>] btrfs_evict_inode+0xd5/0x660 [btrfs]
+    [86304.300036]  [<ffffffff811e7c8d>] ? __inode_wait_for_writeback+0x6d/0xc0
+    [86304.300036]  [<ffffffff816a389b>] ? _raw_spin_unlock+0x2b/0x40
+    [86304.300036]  [<ffffffff811d8cbb>] evict+0xab/0x180
+    [86304.300036]  [<ffffffff811d8dce>] dispose_list+0x3e/0x60
+    [86304.300036]  [<ffffffff811d9b04>] evict_inodes+0xf4/0x110
+    [86304.300036]  [<ffffffff811bd953>] generic_shutdown_super+0x53/0x110
+    [86304.300036]  [<ffffffff811bdaa6>] kill_anon_super+0x16/0x30
+    [86304.300036]  [<ffffffffa02a78ba>] btrfs_kill_super+0x1a/0xa0 [btrfs]
+    [86304.300036]  [<ffffffff811bd3a9>] deactivate_locked_super+0x59/0x80
+    [86304.300036]  [<ffffffff811be44e>] deactivate_super+0x4e/0x70
+    [86304.300036]  [<ffffffff811dec14>] mntput_no_expire+0x174/0x1f0
+    [86304.300036]  [<ffffffff811deab7>] ? mntput_no_expire+0x17/0x1f0
+    [86304.300036]  [<ffffffff811e0517>] SyS_umount+0x97/0x100
+    (...)
+
+Signed-off-by: Filipe Manana <[email protected]>
+Reviewed-by: Satoru Takeuchi <[email protected]>
+Tested-by: Satoru Takeuchi <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/inode.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -4674,6 +4674,11 @@ static void evict_inode_truncate_pages(s
+               clear_bit(EXTENT_FLAG_LOGGING, &em->flags);
+               remove_extent_mapping(map_tree, em);
+               free_extent_map(em);
++              if (need_resched()) {
++                      write_unlock(&map_tree->lock);
++                      cond_resched();
++                      write_lock(&map_tree->lock);
++              }
+       }
+       write_unlock(&map_tree->lock);
+ 
+@@ -4696,6 +4701,7 @@ static void evict_inode_truncate_pages(s
+                                &cached_state, GFP_NOFS);
+               free_extent_state(state);
+ 
++              cond_resched();
+               spin_lock(&io_tree->lock);
+       }
+       spin_unlock(&io_tree->lock);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.suse/btrfs-0033-fix-task-hang-under-heavy-compressed-write.patch 
new/patches.suse/btrfs-0033-fix-task-hang-under-heavy-compressed-write.patch
--- 
old/patches.suse/btrfs-0033-fix-task-hang-under-heavy-compressed-write.patch    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches.suse/btrfs-0033-fix-task-hang-under-heavy-compressed-write.patch    
    2014-08-26 13:57:20.000000000 +0200
@@ -0,0 +1,567 @@
+From: Liu Bo <[email protected]>
+Date: Fri, 15 Aug 2014 23:36:53 +0800
+Patch-mainline: 3.17
+Git-commit: 9e0af23764344f7f1b68e4eefbe7dc865018b63d
+Subject: [PATCH] Btrfs: fix task hang under heavy compressed write
+
+This has been reported and discussed for a long time, and this hang occurs in
+both 3.15 and 3.16.
+
+Btrfs now migrates to use kernel workqueue, but it introduces this hang 
problem.
+
+Btrfs has a kind of work queued as an ordered way, which means that its
+ordered_func() must be processed in the way of FIFO, so it usually looks like 
--
+
+normal_work_helper(arg)
+    work = container_of(arg, struct btrfs_work, normal_work);
+
+    work->func() <---- (we name it work X)
+    for ordered_work in wq->ordered_list
+            ordered_work->ordered_func()
+            ordered_work->ordered_free()
+
+The hang is a rare case, first when we find free space, we get an uncached 
block
+group, then we go to read its free space cache inode for free space 
information,
+so it will
+
+file a readahead request
+    btrfs_readpages()
+         for page that is not in page cache
+                __do_readpage()
+                     submit_extent_page()
+                           btrfs_submit_bio_hook()
+                                 btrfs_bio_wq_end_io()
+                                 submit_bio()
+                                 end_workqueue_bio() <--(ret by the 1st endio)
+                                      queue a work(named work Y) for the 2nd
+                                      also the real endio()
+
+So the hang occurs when work Y's work_struct and work X's work_struct happens
+to share the same address.
+
+A bit more explanation,
+
+A,B,C -- struct btrfs_work
+arg   -- struct work_struct
+
+kthread:
+worker_thread()
+    pick up a work_struct from @worklist
+    process_one_work(arg)
+       worker->current_work = arg;  <-- arg is A->normal_work
+       worker->current_func(arg)
+               normal_work_helper(arg)
+                    A = container_of(arg, struct btrfs_work, normal_work);
+
+                    A->func()
+                    A->ordered_func()
+                    A->ordered_free()  <-- A gets freed
+
+                    B->ordered_func()
+                         submit_compressed_extents()
+                             find_free_extent()
+                                 load_free_space_inode()
+                                     ...   <-- (the above readhead stack)
+                                     end_workqueue_bio()
+                                          btrfs_queue_work(work C)
+                    B->ordered_free()
+
+As if work A has a high priority in wq->ordered_list and there are more ordered
+works queued after it, such as B->ordered_func(), its memory could have been
+freed before normal_work_helper() returns, which means that kernel workqueue
+code worker_thread() still has worker->current_work pointer to be work
+A->normal_work's, ie. arg's address.
+
+Meanwhile, work C is allocated after work A is freed, work C->normal_work
+and work A->normal_work are likely to share the same address(I confirmed this
+with ftrace output, so I'm not just guessing, it's rare though).
+
+When another kthread picks up work C->normal_work to process, and finds our
+kthread is processing it(see find_worker_executing_work()), it'll think
+work C as a collision and skip then, which ends up nobody processing work C.
+
+So the situation is that our kthread is waiting forever on work C.
+
+Besides, there're other cases that can lead to deadlock, but the real problem
+is that all btrfs workqueue shares one work->func, -- normal_work_helper,
+so this makes each workqueue to have its own helper function, but only a
+wraper pf normal_work_helper.
+
+With this patch, I no long hit the above hang.
+
+Signed-off-by: Liu Bo <[email protected]>
+Signed-off-by: Chris Mason <[email protected]>
+Signed-off-by: David Sterba <[email protected]>
+---
+ fs/btrfs/async-thread.c  |   44 +++++++++++++++++++++++++++++++--------
+ fs/btrfs/async-thread.h  |   28 +++++++++++++++++++++++-
+ fs/btrfs/delayed-inode.c |    4 +--
+ fs/btrfs/disk-io.c       |   53 
+++++++++++++++++++++++++----------------------
+ fs/btrfs/extent-tree.c   |    7 +++---
+ fs/btrfs/inode.c         |   35 ++++++++++++++++++++-----------
+ fs/btrfs/ordered-data.c  |    1 
+ fs/btrfs/qgroup.c        |    1 
+ fs/btrfs/raid56.c        |    9 +++++--
+ fs/btrfs/reada.c         |    3 +-
+ fs/btrfs/scrub.c         |   14 +++++++-----
+ fs/btrfs/volumes.c       |    3 +-
+ 12 files changed, 141 insertions(+), 61 deletions(-)
+
+--- a/fs/btrfs/async-thread.c
++++ b/fs/btrfs/async-thread.c
+@@ -22,7 +22,6 @@
+ #include <linux/list.h>
+ #include <linux/spinlock.h>
+ #include <linux/freezer.h>
+-#include <linux/workqueue.h>
+ #include "async-thread.h"
+ #include "ctree.h"
+ 
+@@ -55,8 +54,39 @@ struct btrfs_workqueue {
+       struct __btrfs_workqueue *high;
+ };
+ 
+-static inline struct __btrfs_workqueue
+-*__btrfs_alloc_workqueue(const char *name, int flags, int max_active,
++static void normal_work_helper(struct btrfs_work *work);
++
++#define BTRFS_WORK_HELPER(name)                                       \
++void btrfs_##name(struct work_struct *arg)                            \
++{                                                                     \
++      struct btrfs_work *work = container_of(arg, struct btrfs_work,  \
++                                             normal_work);            \
++      normal_work_helper(work);                                       \
++}
++
++BTRFS_WORK_HELPER(worker_helper);
++BTRFS_WORK_HELPER(delalloc_helper);
++BTRFS_WORK_HELPER(flush_delalloc_helper);
++BTRFS_WORK_HELPER(cache_helper);
++BTRFS_WORK_HELPER(submit_helper);
++BTRFS_WORK_HELPER(fixup_helper);
++BTRFS_WORK_HELPER(endio_helper);
++BTRFS_WORK_HELPER(endio_meta_helper);
++BTRFS_WORK_HELPER(endio_meta_write_helper);
++BTRFS_WORK_HELPER(endio_raid56_helper);
++BTRFS_WORK_HELPER(rmw_helper);
++BTRFS_WORK_HELPER(endio_write_helper);
++BTRFS_WORK_HELPER(freespace_write_helper);
++BTRFS_WORK_HELPER(delayed_meta_helper);
++BTRFS_WORK_HELPER(readahead_helper);
++BTRFS_WORK_HELPER(qgroup_rescan_helper);
++BTRFS_WORK_HELPER(extent_refs_helper);
++BTRFS_WORK_HELPER(scrub_helper);
++BTRFS_WORK_HELPER(scrubwrc_helper);
++BTRFS_WORK_HELPER(scrubnc_helper);
++
++static struct __btrfs_workqueue *
++__btrfs_alloc_workqueue(const char *name, int flags, int max_active,
+                        int thresh)
+ {
+       struct __btrfs_workqueue *ret = kzalloc(sizeof(*ret), GFP_NOFS);
+@@ -232,13 +262,11 @@ static void run_ordered_work(struct __bt
+       spin_unlock_irqrestore(lock, flags);
+ }
+ 
+-static void normal_work_helper(struct work_struct *arg)
++static void normal_work_helper(struct btrfs_work *work)
+ {
+-      struct btrfs_work *work;
+       struct __btrfs_workqueue *wq;
+       int need_order = 0;
+ 
+-      work = container_of(arg, struct btrfs_work, normal_work);
+       /*
+        * We should not touch things inside work in the following cases:
+        * 1) after work->func() if it has no ordered_free
+@@ -262,7 +290,7 @@ static void normal_work_helper(struct wo
+               trace_btrfs_all_work_done(work);
+ }
+ 
+-void btrfs_init_work(struct btrfs_work *work,
++void btrfs_init_work(struct btrfs_work *work, btrfs_work_func_t uniq_func,
+                    btrfs_func_t func,
+                    btrfs_func_t ordered_func,
+                    btrfs_func_t ordered_free)
+@@ -270,7 +298,7 @@ void btrfs_init_work(struct btrfs_work *
+       work->func = func;
+       work->ordered_func = ordered_func;
+       work->ordered_free = ordered_free;
+-      INIT_WORK(&work->normal_work, normal_work_helper);
++      INIT_WORK(&work->normal_work, uniq_func);
+       INIT_LIST_HEAD(&work->ordered_list);
+       work->flags = 0;
+ }
+--- a/fs/btrfs/async-thread.h
++++ b/fs/btrfs/async-thread.h
+@@ -19,12 +19,14 @@
+ 
+ #ifndef __BTRFS_ASYNC_THREAD_
+ #define __BTRFS_ASYNC_THREAD_
++#include <linux/workqueue.h>
+ 
+ struct btrfs_workqueue;
+ /* Internal use only */
+ struct __btrfs_workqueue;
+ struct btrfs_work;
+ typedef void (*btrfs_func_t)(struct btrfs_work *arg);
++typedef void (*btrfs_work_func_t)(struct work_struct *arg);
+ 
+ struct btrfs_work {
+       btrfs_func_t func;
+@@ -38,11 +40,35 @@ struct btrfs_work {
+       unsigned long flags;
+ };
+ 
++#define BTRFS_WORK_HELPER_PROTO(name)                                 \
++void btrfs_##name(struct work_struct *arg)
++
++BTRFS_WORK_HELPER_PROTO(worker_helper);
++BTRFS_WORK_HELPER_PROTO(delalloc_helper);
++BTRFS_WORK_HELPER_PROTO(flush_delalloc_helper);
++BTRFS_WORK_HELPER_PROTO(cache_helper);
++BTRFS_WORK_HELPER_PROTO(submit_helper);
++BTRFS_WORK_HELPER_PROTO(fixup_helper);
++BTRFS_WORK_HELPER_PROTO(endio_helper);
++BTRFS_WORK_HELPER_PROTO(endio_meta_helper);
++BTRFS_WORK_HELPER_PROTO(endio_meta_write_helper);
++BTRFS_WORK_HELPER_PROTO(endio_raid56_helper);
++BTRFS_WORK_HELPER_PROTO(rmw_helper);
++BTRFS_WORK_HELPER_PROTO(endio_write_helper);
++BTRFS_WORK_HELPER_PROTO(freespace_write_helper);
++BTRFS_WORK_HELPER_PROTO(delayed_meta_helper);
++BTRFS_WORK_HELPER_PROTO(readahead_helper);
++BTRFS_WORK_HELPER_PROTO(qgroup_rescan_helper);
++BTRFS_WORK_HELPER_PROTO(extent_refs_helper);
++BTRFS_WORK_HELPER_PROTO(scrub_helper);
++BTRFS_WORK_HELPER_PROTO(scrubwrc_helper);
++BTRFS_WORK_HELPER_PROTO(scrubnc_helper);
++
+ struct btrfs_workqueue *btrfs_alloc_workqueue(const char *name,
+                                             int flags,
+                                             int max_active,
+                                             int thresh);
+-void btrfs_init_work(struct btrfs_work *work,
++void btrfs_init_work(struct btrfs_work *work, btrfs_work_func_t helper,
+                    btrfs_func_t func,
+                    btrfs_func_t ordered_func,
+                    btrfs_func_t ordered_free);
+--- a/fs/btrfs/delayed-inode.c
++++ b/fs/btrfs/delayed-inode.c
+@@ -1395,8 +1395,8 @@ static int btrfs_wq_run_delayed_node(str
+               return -ENOMEM;
+ 
+       async_work->delayed_root = delayed_root;
+-      btrfs_init_work(&async_work->work, btrfs_async_run_delayed_root,
+-                      NULL, NULL);
++      btrfs_init_work(&async_work->work, btrfs_delayed_meta_helper,
++                      btrfs_async_run_delayed_root, NULL, NULL);
+       async_work->nr = nr;
+ 
+       btrfs_queue_work(root->fs_info->delayed_workers, &async_work->work);
+--- a/fs/btrfs/disk-io.c
++++ b/fs/btrfs/disk-io.c
+@@ -39,7 +39,6 @@
+ #include "btrfs_inode.h"
+ #include "volumes.h"
+ #include "print-tree.h"
+-#include "async-thread.h"
+ #include "locking.h"
+ #include "tree-log.h"
+ #include "free-space-cache.h"
+@@ -695,35 +694,41 @@ static void end_workqueue_bio(struct bio
+ {
+       struct end_io_wq *end_io_wq = bio->bi_private;
+       struct btrfs_fs_info *fs_info;
++      struct btrfs_workqueue *wq;
++      btrfs_work_func_t func;
+ 
+       fs_info = end_io_wq->info;
+       end_io_wq->error = err;
+-      btrfs_init_work(&end_io_wq->work, end_workqueue_fn, NULL, NULL);
+ 
+       if (bio->bi_rw & REQ_WRITE) {
+-              if (end_io_wq->metadata == BTRFS_WQ_ENDIO_METADATA)
+-                      btrfs_queue_work(fs_info->endio_meta_write_workers,
+-                                       &end_io_wq->work);
+-              else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_FREE_SPACE)
+-                      btrfs_queue_work(fs_info->endio_freespace_worker,
+-                                       &end_io_wq->work);
+-              else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56)
+-                      btrfs_queue_work(fs_info->endio_raid56_workers,
+-                                       &end_io_wq->work);
+-              else
+-                      btrfs_queue_work(fs_info->endio_write_workers,
+-                                       &end_io_wq->work);
++              if (end_io_wq->metadata == BTRFS_WQ_ENDIO_METADATA) {
++                      wq = fs_info->endio_meta_write_workers;
++                      func = btrfs_endio_meta_write_helper;
++              } else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_FREE_SPACE) {
++                      wq = fs_info->endio_freespace_worker;
++                      func = btrfs_freespace_write_helper;
++              } else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56) {
++                      wq = fs_info->endio_raid56_workers;
++                      func = btrfs_endio_raid56_helper;
++              } else {
++                      wq = fs_info->endio_write_workers;
++                      func = btrfs_endio_write_helper;
++              }
+       } else {
+-              if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56)
+-                      btrfs_queue_work(fs_info->endio_raid56_workers,
+-                                       &end_io_wq->work);
+-              else if (end_io_wq->metadata)
+-                      btrfs_queue_work(fs_info->endio_meta_workers,
+-                                       &end_io_wq->work);
+-              else
+-                      btrfs_queue_work(fs_info->endio_workers,
+-                                       &end_io_wq->work);
++              if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56) {
++                      wq = fs_info->endio_raid56_workers;
++                      func = btrfs_endio_raid56_helper;
++              } else if (end_io_wq->metadata) {
++                      wq = fs_info->endio_meta_workers;
++                      func = btrfs_endio_meta_helper;
++              } else {
++                      wq = fs_info->endio_workers;
++                      func = btrfs_endio_helper;
++              }
+       }
++
++      btrfs_init_work(&end_io_wq->work, func, end_workqueue_fn, NULL, NULL);
++      btrfs_queue_work(wq, &end_io_wq->work);
+ }
+ 
+ /*
+@@ -830,7 +835,7 @@ int btrfs_wq_submit_bio(struct btrfs_fs_
+       async->submit_bio_start = submit_bio_start;
+       async->submit_bio_done = submit_bio_done;
+ 
+-      btrfs_init_work(&async->work, run_one_async_start,
++      btrfs_init_work(&async->work, btrfs_worker_helper, run_one_async_start,
+                       run_one_async_done, run_one_async_free);
+ 
+       async->bio_flags = bio_flags;
+--- a/fs/btrfs/extent-tree.c
++++ b/fs/btrfs/extent-tree.c
+@@ -552,7 +552,8 @@ static int cache_block_group(struct btrf
+       caching_ctl->block_group = cache;
+       caching_ctl->progress = cache->key.objectid;
+       atomic_set(&caching_ctl->count, 1);
+-      btrfs_init_work(&caching_ctl->work, caching_thread, NULL, NULL);
++      btrfs_init_work(&caching_ctl->work, btrfs_cache_helper,
++                      caching_thread, NULL, NULL);
+ 
+       spin_lock(&cache->lock);
+       /*
+@@ -2749,8 +2750,8 @@ int btrfs_async_run_delayed_refs(struct
+               async->sync = 0;
+       init_completion(&async->wait);
+ 
+-      btrfs_init_work(&async->work, delayed_ref_async_start,
+-                      NULL, NULL);
++      btrfs_init_work(&async->work, btrfs_extent_refs_helper,
++                      delayed_ref_async_start, NULL, NULL);
+ 
+       btrfs_queue_work(root->fs_info->extent_workers, &async->work);
+ 
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -1096,8 +1096,10 @@ static int cow_file_range_async(struct i
+               async_cow->end = cur_end;
+               INIT_LIST_HEAD(&async_cow->extents);
+ 
+-              btrfs_init_work(&async_cow->work, async_cow_start,
+-                              async_cow_submit, async_cow_free);
++              btrfs_init_work(&async_cow->work,
++                              btrfs_delalloc_helper,
++                              async_cow_start, async_cow_submit,
++                              async_cow_free);
+ 
+               nr_pages = (cur_end - start + PAGE_CACHE_SIZE) >>
+                       PAGE_CACHE_SHIFT;
+@@ -1881,7 +1883,8 @@ static int btrfs_writepage_start_hook(st
+ 
+       SetPageChecked(page);
+       page_cache_get(page);
+-      btrfs_init_work(&fixup->work, btrfs_writepage_fixup_worker, NULL, NULL);
++      btrfs_init_work(&fixup->work, btrfs_fixup_helper,
++                      btrfs_writepage_fixup_worker, NULL, NULL);
+       fixup->page = page;
+       btrfs_queue_work(root->fs_info->fixup_workers, &fixup->work);
+       return -EBUSY;
+@@ -2822,7 +2825,8 @@ static int btrfs_writepage_end_io_hook(s
+       struct inode *inode = page->mapping->host;
+       struct btrfs_root *root = BTRFS_I(inode)->root;
+       struct btrfs_ordered_extent *ordered_extent = NULL;
+-      struct btrfs_workqueue *workers;
++      struct btrfs_workqueue *wq;
++      btrfs_work_func_t func;
+ 
+       trace_btrfs_writepage_end_io_hook(page, start, end, uptodate);
+ 
+@@ -2831,13 +2835,17 @@ static int btrfs_writepage_end_io_hook(s
+                                           end - start + 1, uptodate))
+               return 0;
+ 
+-      btrfs_init_work(&ordered_extent->work, finish_ordered_fn, NULL, NULL);
++      if (btrfs_is_free_space_inode(inode)) {
++              wq = root->fs_info->endio_freespace_worker;
++              func = btrfs_freespace_write_helper;
++      } else {
++              wq = root->fs_info->endio_write_workers;
++              func = btrfs_endio_write_helper;
++      }
+ 
+-      if (btrfs_is_free_space_inode(inode))
+-              workers = root->fs_info->endio_freespace_worker;
+-      else
+-              workers = root->fs_info->endio_write_workers;
+-      btrfs_queue_work(workers, &ordered_extent->work);
++      btrfs_init_work(&ordered_extent->work, func, finish_ordered_fn, NULL,
++                      NULL);
++      btrfs_queue_work(wq, &ordered_extent->work);
+ 
+       return 0;
+ }
+@@ -7173,7 +7181,8 @@ again:
+       if (!ret)
+               goto out_test;
+ 
+-      btrfs_init_work(&ordered->work, finish_ordered_fn, NULL, NULL);
++      btrfs_init_work(&ordered->work, btrfs_endio_write_helper,
++                      finish_ordered_fn, NULL, NULL);
+       btrfs_queue_work(root->fs_info->endio_write_workers,
+                        &ordered->work);
+ out_test:
+@@ -8542,7 +8551,9 @@ struct btrfs_delalloc_work *btrfs_alloc_
+       work->inode = inode;
+       work->wait = wait;
+       work->delay_iput = delay_iput;
+-      btrfs_init_work(&work->work, btrfs_run_delalloc_work, NULL, NULL);
++      WARN_ON_ONCE(!inode);
++      btrfs_init_work(&work->work, btrfs_flush_delalloc_helper,
++                      btrfs_run_delalloc_work, NULL, NULL);
+ 
+       return work;
+ }
+--- a/fs/btrfs/ordered-data.c
++++ b/fs/btrfs/ordered-data.c
+@@ -627,6 +627,7 @@ int btrfs_wait_ordered_extents(struct bt
+               spin_unlock(&root->ordered_extent_lock);
+ 
+               btrfs_init_work(&ordered->flush_work,
++                              btrfs_flush_delalloc_helper,
+                               btrfs_run_ordered_extent_work, NULL, NULL);
+               list_add_tail(&ordered->work_list, &works);
+               btrfs_queue_work(root->fs_info->flush_workers,
+--- a/fs/btrfs/qgroup.c
++++ b/fs/btrfs/qgroup.c
+@@ -2551,6 +2551,7 @@ qgroup_rescan_init(struct btrfs_fs_info
+       memset(&fs_info->qgroup_rescan_work, 0,
+              sizeof(fs_info->qgroup_rescan_work));
+       btrfs_init_work(&fs_info->qgroup_rescan_work,
++                      btrfs_qgroup_rescan_helper,
+                       btrfs_qgroup_rescan_worker, NULL, NULL);
+ 
+       if (ret) {
+--- a/fs/btrfs/raid56.c
++++ b/fs/btrfs/raid56.c
+@@ -1416,7 +1416,8 @@ cleanup:
+ 
+ static void async_rmw_stripe(struct btrfs_raid_bio *rbio)
+ {
+-      btrfs_init_work(&rbio->work, rmw_work, NULL, NULL);
++      btrfs_init_work(&rbio->work, btrfs_rmw_helper,
++                      rmw_work, NULL, NULL);
+ 
+       btrfs_queue_work(rbio->fs_info->rmw_workers,
+                        &rbio->work);
+@@ -1424,7 +1425,8 @@ static void async_rmw_stripe(struct btrf
+ 
+ static void async_read_rebuild(struct btrfs_raid_bio *rbio)
+ {
+-      btrfs_init_work(&rbio->work, read_rebuild_work, NULL, NULL);
++      btrfs_init_work(&rbio->work, btrfs_rmw_helper,
++                      read_rebuild_work, NULL, NULL);
+ 
+       btrfs_queue_work(rbio->fs_info->rmw_workers,
+                        &rbio->work);
+@@ -1665,7 +1667,8 @@ static void btrfs_raid_unplug(struct blk
+       plug = container_of(cb, struct btrfs_plug_cb, cb);
+ 
+       if (from_schedule) {
+-              btrfs_init_work(&plug->work, unplug_work, NULL, NULL);
++              btrfs_init_work(&plug->work, btrfs_rmw_helper,
++                              unplug_work, NULL, NULL);
+               btrfs_queue_work(plug->info->rmw_workers,
+                                &plug->work);
+               return;
+--- a/fs/btrfs/reada.c
++++ b/fs/btrfs/reada.c
+@@ -798,7 +798,8 @@ static void reada_start_machine(struct b
+               /* FIXME we cannot handle this properly right now */
+               BUG();
+       }
+-      btrfs_init_work(&rmw->work, reada_start_machine_worker, NULL, NULL);
++      btrfs_init_work(&rmw->work, btrfs_readahead_helper,
++                      reada_start_machine_worker, NULL, NULL);
+       rmw->fs_info = fs_info;
+ 
+       btrfs_queue_work(fs_info->readahead_workers, &rmw->work);
+--- a/fs/btrfs/scrub.c
++++ b/fs/btrfs/scrub.c
+@@ -428,8 +428,8 @@ struct scrub_ctx *scrub_setup_ctx(struct
+               sbio->index = i;
+               sbio->sctx = sctx;
+               sbio->page_count = 0;
+-              btrfs_init_work(&sbio->work, scrub_bio_end_io_worker,
+-                              NULL, NULL);
++              btrfs_init_work(&sbio->work, btrfs_scrub_helper,
++                              scrub_bio_end_io_worker, NULL, NULL);
+ 
+               if (i != SCRUB_BIOS_PER_SCTX - 1)
+                       sctx->bios[i]->next_free = i + 1;
+@@ -999,8 +999,8 @@ nodatasum_case:
+               fixup_nodatasum->root = fs_info->extent_root;
+               fixup_nodatasum->mirror_num = failed_mirror_index + 1;
+               scrub_pending_trans_workers_inc(sctx);
+-              btrfs_init_work(&fixup_nodatasum->work, scrub_fixup_nodatasum,
+-                              NULL, NULL);
++              btrfs_init_work(&fixup_nodatasum->work, btrfs_scrub_helper,
++                              scrub_fixup_nodatasum, NULL, NULL);
+               btrfs_queue_work(fs_info->scrub_workers,
+                                &fixup_nodatasum->work);
+               goto out;
+@@ -1616,7 +1616,8 @@ static void scrub_wr_bio_end_io(struct b
+       sbio->err = err;
+       sbio->bio = bio;
+ 
+-      btrfs_init_work(&sbio->work, scrub_wr_bio_end_io_worker, NULL, NULL);
++      btrfs_init_work(&sbio->work, btrfs_scrubwrc_helper,
++                       scrub_wr_bio_end_io_worker, NULL, NULL);
+       btrfs_queue_work(fs_info->scrub_wr_completion_workers, &sbio->work);
+ }
+ 
+@@ -3203,7 +3204,8 @@ static int copy_nocow_pages(struct scrub
+       nocow_ctx->len = len;
+       nocow_ctx->mirror_num = mirror_num;
+       nocow_ctx->physical_for_dev_replace = physical_for_dev_replace;
+-      btrfs_init_work(&nocow_ctx->work, copy_nocow_pages_worker, NULL, NULL);
++      btrfs_init_work(&nocow_ctx->work, btrfs_scrubnc_helper,
++                      copy_nocow_pages_worker, NULL, NULL);
+       INIT_LIST_HEAD(&nocow_ctx->inodes);
+       btrfs_queue_work(fs_info->scrub_nocow_workers,
+                        &nocow_ctx->work);
+--- a/fs/btrfs/volumes.c
++++ b/fs/btrfs/volumes.c
+@@ -5800,7 +5800,8 @@ struct btrfs_device *btrfs_alloc_device(
+       else
+               generate_random_uuid(dev->uuid);
+ 
+-      btrfs_init_work(&dev->work, pending_bios_fn, NULL, NULL);
++      btrfs_init_work(&dev->work, btrfs_submit_helper,
++                      pending_bios_fn, NULL, NULL);
+ 
+       return dev;
+ }

++++++ series.conf ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:38.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:38.000000000 +0200
@@ -27,6 +27,7 @@
        # DO NOT MODIFY THEM!
        # Send separate patches upstream if you find a problem...
        ########################################################
+       patches.kernel.org/patch-3.16.1
 
         ########################################################
         # Build fixes that apply to the vanilla kernel too.
@@ -250,6 +251,17 @@
        ########################################################
        patches.suse/btrfs-use-correct-device-for-maps.patch
        patches.suse/btrfs-check-index-in-extent_buffer_page
+       
patches.suse/btrfs-0003-read-lock-extent-buffer-while-walking-backrefs.patch
+       patches.suse/btrfs-0006-fix-compressed-write-corruption-on-enospc.patch
+       patches.fixes/Btrfs-Fix-memory-corruption-by-ulist_add_merge-on-32
+       
patches.suse/btrfs-0008-fix-csum-tree-corruption-duplicate-and-outdate.patch
+       
patches.suse/btrfs-0011-fill_holes-Fix-slot-number-passed-to-hole_merg.patch
+       
patches.suse/btrfs-0016-fix-wrong-write-range-for-filemap_fdatawrite_r.patch
+       patches.suse/btrfs-0017-fix-wrong-extent-mapping-for-DirectIO.patch
+       
patches.suse/btrfs-0018-Return-right-extent-when-fiemap-gives-unaligne.patch
+       
patches.suse/btrfs-0025-ensure-tmpfile-inode-is-always-persisted-with-.patch
+       
patches.suse/btrfs-0027-don-t-monopolize-a-core-when-evicting-inode.patch
+       patches.suse/btrfs-0033-fix-task-hang-under-heavy-compressed-write.patch
 
        ########################################################
        # Reiserfs Patches
@@ -358,8 +370,8 @@
        ########################################################
        # DRM/Video
        ########################################################
-       patches.drivers/drm-cirrus-Use-16bpp-as-default
        patches.fixes/nouveau-fix-race-with-fence-signaling
+       patches.fixes/drm-omapdrm-fix-compiler-errors
 
        ########################################################
        # video4linux
@@ -395,6 +407,7 @@
        ########################################################
        # USB
        ########################################################
+       patches.fixes/rtsx_usb-export-device-table
 
        ########################################################
        # I2C

++++++ source-timestamp ++++++
--- /var/tmp/diff_new_pack.jHtM3G/_old  2014-08-30 16:04:38.000000000 +0200
+++ /var/tmp/diff_new_pack.jHtM3G/_new  2014-08-30 16:04:38.000000000 +0200
@@ -1,3 +1,3 @@
-2014-08-06 15:37:49 +0200
-GIT Revision: 0e31675b91f2087bc1b543ca380779d32dc821ed
-GIT Branch: master
+2014-08-27 16:52:25 +0200
+GIT Revision: 90bc0f1c2238b9aec5a78d9c76dc9663e8fa0316
+GIT Branch: stable

++++++ sysctl.tar.bz2 ++++++

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

Reply via email to