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 - mmarek@suse.cz + +- rpm/config.sh Use the same repository setup as the master branch +- commit 90bc0f1 + +------------------------------------------------------------------- +Tue Aug 26 14:16:14 CEST 2014 - jslaby@suse.cz + +- rpm/config.sh: build against factory +- commit 768ed24 + +------------------------------------------------------------------- +Tue Aug 26 13:57:20 CEST 2014 - dsterba@suse.cz + +- 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 - tiwai@suse.de + +- Btrfs: Fix memory corruption by ulist_add_merge() on 32bit arch + (bnc#887046). +- commit b1e2a41 + +------------------------------------------------------------------- +Thu Aug 21 16:48:07 CEST 2014 - mmarek@suse.cz + +- 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 - mmarek@suse.cz + +- rpm/compress-vmlinux.sh: Do not duplicate the job of brp-99-compress-vmlinux +- commit e561498 + +------------------------------------------------------------------- +Wed Aug 20 12:32:25 CEST 2014 - afaerber@suse.de + +- 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 - afaerber@suse.de + +- 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 - afaerber@suse.de + +- 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 - mmarek@suse.cz + +- rpm/config.sh: Drop the ARM repo, it is covered by the ports repo +- commit 84ffa90 + +------------------------------------------------------------------- +Mon Aug 18 15:12:21 CEST 2014 - schwab@suse.de + +- 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 - dvaleev@suse.com + +- rpm/kernel-obs-build.spec.in: Use dracut for SLE12 +- commit ec64eaf + +------------------------------------------------------------------- +Mon Aug 18 04:50:46 CEST 2014 - afaerber@suse.de + +- config: armv6hl: Enable DMA_BCM2835 + Only bcm2835 option missing. +- commit 1fd2cdd + +------------------------------------------------------------------- +Mon Aug 18 03:41:01 CEST 2014 - afaerber@suse.de + +- 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 - jslaby@suse.cz + +- Linux 3.16.1. +- commit 9353bcb + +------------------------------------------------------------------- +Wed Aug 13 18:23:31 CEST 2014 - tiwai@suse.de + +- 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 - tiwai@suse.de + +- drm: omapdrm: fix compiler errors. +- commit ee3abc8 + +------------------------------------------------------------------- +Wed Aug 13 15:20:31 CEST 2014 - afaerber@suse.de + +- 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 - afaerber@suse.de + +- 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 - schwab@suse.de + +- config: arm64/default: make rtc-pl03[01] built-in +- commit 1b1d9da + +------------------------------------------------------------------- +Fri Aug 8 23:31:50 CEST 2014 - jeffm@suse.com + +- rtsx_usb: export device table (bnc#890096). +- commit a29135e + +------------------------------------------------------------------- +Fri Aug 8 12:46:34 CEST 2014 - tiwai@suse.de + +- 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 - jeffm@suse.com + +- 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 tiwai@suse.de -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 tiwai@suse.de - ---- - 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 tiwai@suse.de +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: stable@vger.kernel.org [v3.11+] +Signed-off-by: Takashi Iwai tiwai@suse.de +Signed-off-by: Chris Mason clm@fb.com + +--- + 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 rmk+kernel@arm.linux.org.uk +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 rmk+kernel@arm.linux.org.uk +Signed-off-by: Dave Airlie airlied@redhat.com +Acked-by: Takashi Iwai tiwai@suse.de + +--- + 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 jeffm@suse.com +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 wittemar@googlemail.com +Signed-off-by: Jeff Mahoney jeffm@suse.com +--- + 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 jslaby@suse.cz +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 jslaby@suse.cz +--- +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 fdmanana@suse.com +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 fdmanana@suse.com +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 bo.li.liu@oracle.com +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 bo.li.liu@oracle.com +Tested-By: Martin Steigerwald martin@lichtvoll.de +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 fdmanana@suse.com +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: stable@vger.kernel.org +Signed-off-by: Filipe Manana fdmanana@suse.com +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 chandan@linux.vnet.ibm.com +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 chandan@linux.vnet.ibm.com +Reviewed-by: Wang Shilong wangsl.fnst@cn.fujitsu.com +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 wangsl.fnst@cn.fujitsu.com +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 wangsl.fnst@cn.fujitsu.com +Reviewed-by: David Sterba dsterba@suse.cz +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 wangsl.fnst@cn.fujitsu.com +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 wangsl.fnst@cn.fujitsu.com +Reviewed-by: David Sterba dsterba@suse.cz +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 quwenruo@cn.fujitsu.com +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 chandan@linux.vnet.ibm.com +Signed-off-by: Qu Wenruo quwenruo@cn.fujitsu.com +Reviewed-by: David Sterba dsterba@suse.cz +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 fdmanana@suse.com +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 fdmanana@suse.com +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 fdmanana@suse.com +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 fdmanana@suse.com +Reviewed-by: Satoru Takeuchi takeuchi_satoru@jp.fujitsu.com +Tested-by: Satoru Takeuchi takeuchi_satoru@jp.fujitsu.com +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 bo.li.liu@oracle.com +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 bo.li.liu@oracle.com +Signed-off-by: Chris Mason clm@fb.com +Signed-off-by: David Sterba dsterba@suse.cz +--- + 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 ++++++