[kernel] r18790 - in dists/trunk/linux-2.6: . debian debian/abi debian/config debian/config/alpha debian/config/amd64 debian/config/amd64/none debian/config/armel debian/config/armhf debian/config/hppa debian/config/i386 debian/config/i386/none debian/config/ia64 debian/config/kernelarch-mips debian/config/kernelarch-x86 debian/config/m68k debian/config/mips debian/config/mipsel debian/config/powerpc debian/config/sh4 debian/config/sparc debian/installer/amd64/modules/amd64 debian/installer/hppa/modules/hppa debian/installer/i386/modules/i386 debian/installer/mips/modules/mips debian/installer/mips/modules/mips-4kc-malta debian/installer/mips/modules/mips-sb1-bcm91250a debian/installer/mipsel/modules/mipsel-4kc-malta debian/installer/mipsel/modules/mipsel-loongson-2f debian/installer/mipsel/modules/mipsel-r5k-cobalt debian/installer/mipsel/modules/mipsel-sb1-bcm91250a debian/installer/modules debian/installer/powerpc/modules/powerpc debian/installer/powerpc/modules/powerpc-powerpc-miboot debian/installer/powerpc/modules/powerpc-powerpc64 debian/installer/sparc/modules/sparc debian/installer/sparc64/modules/sparc64 debian/patches/bugfix/all debian/patches/debian debian/patches/features/all debian/patches/features/all/rt debian/patches/series debian/po debian/templates

Ben Hutchings benh at alioth.debian.org
Sun Mar 4 20:27:16 UTC 2012


Author: benh
Date: Sun Mar  4 20:27:13 2012
New Revision: 18790

Log:
Merge changes from sid branch up to 3.2.9-1

Added:
   dists/trunk/linux-2.6/debian/config/amd64/none/
      - copied from r18789, dists/sid/linux-2.6/debian/config/amd64/none/
   dists/trunk/linux-2.6/debian/config/i386/none/defines
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/config/i386/none/defines
   dists/trunk/linux-2.6/debian/config/kernelarch-mips/
      - copied from r18789, dists/sid/linux-2.6/debian/config/kernelarch-mips/
   dists/trunk/linux-2.6/debian/patches/bugfix/all/iwlwifi-fix-key-removal.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/bugfix/all/iwlwifi-fix-key-removal.patch
   dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restriction-cleanup.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restriction-cleanup.patch
   dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions-fix.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions-fix.patch
   dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions.patch
   dists/trunk/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch
   dists/trunk/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/check-series
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/check-series
   dists/trunk/linux-2.6/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-dentry-use-seqlock.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-dentry-use-seqlock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-protect-opencoded-isize-seqcount.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-protect-opencoded-isize-seqcount.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-struct-use-seqlock.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-struct-use-seqlock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/ia64-vdso-use-seqcount.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/ia64-vdso-use-seqcount.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/net-u64-stat-protect-seqcount.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/net-u64-stat-protect-seqcount.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-timer-fix-hotplug-for-rt.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-timer-fix-hotplug-for-rt.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-provide-seq-spin-lock.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/seqlock-provide-seq-spin-lock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/time-remove-bogus-comments.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/time-remove-bogus-comments.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/x86-vdso-use-seqcount.patch
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/x86-vdso-use-seqcount.patch
   dists/trunk/linux-2.6/debian/po/pl.po
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/po/pl.po
   dists/trunk/linux-2.6/debian/po/tr.po
      - copied unchanged from r18789, dists/sid/linux-2.6/debian/po/tr.po
Deleted:
   dists/trunk/linux-2.6/debian/abi/
   dists/trunk/linux-2.6/debian/config/m68k/config.hp
   dists/trunk/linux-2.6/debian/config/m68k/config.q40
   dists/trunk/linux-2.6/debian/config/m68k/config.sun3
   dists/trunk/linux-2.6/debian/installer/amd64/modules/amd64/ide-core-modules
   dists/trunk/linux-2.6/debian/installer/amd64/modules/amd64/ide-modules
   dists/trunk/linux-2.6/debian/installer/hppa/modules/hppa/ide-modules
   dists/trunk/linux-2.6/debian/installer/i386/modules/i386/ide-core-modules
   dists/trunk/linux-2.6/debian/installer/i386/modules/i386/ide-modules
   dists/trunk/linux-2.6/debian/installer/mips/modules/mips-4kc-malta/ext4-modules
   dists/trunk/linux-2.6/debian/installer/mips/modules/mips-sb1-bcm91250a/ext4-modules
   dists/trunk/linux-2.6/debian/installer/mips/modules/mips/ext4-modules
   dists/trunk/linux-2.6/debian/installer/mipsel/modules/mipsel-4kc-malta/ext4-modules
   dists/trunk/linux-2.6/debian/installer/mipsel/modules/mipsel-loongson-2f/ext4-modules
   dists/trunk/linux-2.6/debian/installer/mipsel/modules/mipsel-r5k-cobalt/ext4-modules
   dists/trunk/linux-2.6/debian/installer/mipsel/modules/mipsel-sb1-bcm91250a/ext4-modules
   dists/trunk/linux-2.6/debian/installer/powerpc/modules/powerpc-powerpc-miboot/ide-core-modules
   dists/trunk/linux-2.6/debian/installer/powerpc/modules/powerpc-powerpc-miboot/ide-modules
   dists/trunk/linux-2.6/debian/installer/powerpc/modules/powerpc-powerpc64/ide-core-modules
   dists/trunk/linux-2.6/debian/installer/powerpc/modules/powerpc-powerpc64/ide-modules
   dists/trunk/linux-2.6/debian/installer/powerpc/modules/powerpc/ide-core-modules
   dists/trunk/linux-2.6/debian/installer/powerpc/modules/powerpc/ide-modules
   dists/trunk/linux-2.6/debian/installer/sparc/modules/sparc/ide-modules
   dists/trunk/linux-2.6/debian/installer/sparc64/modules/sparc64/ide-modules
   dists/trunk/linux-2.6/debian/patches/features/all/rt/acpi-gpe-use-wait-simple.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/acpi-make-ec-lock-raw-as-well.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/acpi-make-gbl-hardware-lock-raw.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/genirq-handle-pending-irqs-in-irq-startup.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/genirq-unmask-oneshot-irqs-when-thread-is-not-woken.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-raw-seqlock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/timekeeping-covert-xtimelock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/wait-simple-version.patch
Modified:
   dists/trunk/linux-2.6/   (props changed)
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/config/alpha/config
   dists/trunk/linux-2.6/debian/config/amd64/defines
   dists/trunk/linux-2.6/debian/config/armel/config
   dists/trunk/linux-2.6/debian/config/armel/config.iop32x
   dists/trunk/linux-2.6/debian/config/armel/config.ixp4xx
   dists/trunk/linux-2.6/debian/config/armel/config.kirkwood
   dists/trunk/linux-2.6/debian/config/armel/config.mv78xx0
   dists/trunk/linux-2.6/debian/config/armel/config.orion5x
   dists/trunk/linux-2.6/debian/config/armel/config.versatile
   dists/trunk/linux-2.6/debian/config/armhf/config.mx5
   dists/trunk/linux-2.6/debian/config/armhf/config.omap
   dists/trunk/linux-2.6/debian/config/config
   dists/trunk/linux-2.6/debian/config/defines
   dists/trunk/linux-2.6/debian/config/hppa/config
   dists/trunk/linux-2.6/debian/config/i386/defines
   dists/trunk/linux-2.6/debian/config/ia64/config
   dists/trunk/linux-2.6/debian/config/kernelarch-x86/config
   dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-32
   dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-64
   dists/trunk/linux-2.6/debian/config/m68k/config
   dists/trunk/linux-2.6/debian/config/m68k/config.amiga
   dists/trunk/linux-2.6/debian/config/m68k/config.atari
   dists/trunk/linux-2.6/debian/config/m68k/config.bvme6000
   dists/trunk/linux-2.6/debian/config/m68k/config.mac
   dists/trunk/linux-2.6/debian/config/m68k/config.mvme147
   dists/trunk/linux-2.6/debian/config/m68k/config.mvme16x
   dists/trunk/linux-2.6/debian/config/m68k/defines
   dists/trunk/linux-2.6/debian/config/mips/config
   dists/trunk/linux-2.6/debian/config/mips/config.4kc-malta
   dists/trunk/linux-2.6/debian/config/mips/config.5kc-malta
   dists/trunk/linux-2.6/debian/config/mips/config.octeon
   dists/trunk/linux-2.6/debian/config/mips/config.r4k-ip22
   dists/trunk/linux-2.6/debian/config/mips/config.r5k-ip32
   dists/trunk/linux-2.6/debian/config/mips/config.sb1-bcm91250a
   dists/trunk/linux-2.6/debian/config/mips/config.sb1a-bcm91480b
   dists/trunk/linux-2.6/debian/config/mips/defines
   dists/trunk/linux-2.6/debian/config/mipsel/config
   dists/trunk/linux-2.6/debian/config/mipsel/config.loongson-2f
   dists/trunk/linux-2.6/debian/config/mipsel/config.r5k-cobalt
   dists/trunk/linux-2.6/debian/config/mipsel/defines
   dists/trunk/linux-2.6/debian/config/powerpc/config
   dists/trunk/linux-2.6/debian/config/powerpc/config.powerpc64
   dists/trunk/linux-2.6/debian/config/sh4/config.sh7751r
   dists/trunk/linux-2.6/debian/config/sh4/config.sh7785lcr
   dists/trunk/linux-2.6/debian/config/sparc/config
   dists/trunk/linux-2.6/debian/installer/modules/ide-modules
   dists/trunk/linux-2.6/debian/installer/modules/pcmcia-storage-modules
   dists/trunk/linux-2.6/debian/patches/debian/version.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/arm-enable-interrupts-in-signal-code.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-softirq-rt.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/filemap-fix-up.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/futex-requeue-pi-fix.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/latency-hist.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/localversion.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/net-wireless-warn-nort.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/oleg-signal-rt-fix.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/panic-disable-random-on-rt.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-re-_3_0-rt4.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-delay-put-task.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-migrate-disable.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-mmdrop-delayed.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-no-work-when-pi-blocked.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-use-seqcount.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/series
   dists/trunk/linux-2.6/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-local-lock.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch
   dists/trunk/linux-2.6/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch
   dists/trunk/linux-2.6/debian/patches/series/base
   dists/trunk/linux-2.6/debian/patches/series/base-extra
   dists/trunk/linux-2.6/debian/po/nl.po
   dists/trunk/linux-2.6/debian/rules.real
   dists/trunk/linux-2.6/debian/templates/control.image.type-plain.in
   dists/trunk/linux-2.6/debian/templates/control.image.type-standalone.in

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/changelog	Sun Mar  4 20:27:13 2012	(r18790)
@@ -8,6 +8,94 @@
 
  -- Ben Hutchings <ben at decadent.org.uk>  Sun, 19 Feb 2012 20:52:21 +0000
 
+linux-2.6 (3.2.9-1) unstable; urgency=high
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.8
+    - [i386] i387: move TS_USEDFPU flag from thread_info to task_struct
+    - [x86] additional refactoring of FPU/SSE state save and restore
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.9
+    - vfs: fix d_inode_lookup() dentry ref leak
+    - target: Allow control CDBs with data > 1 page
+    - epoll: introduce POLLFREE to flush ->signalfd_wqh before kfree()
+    - epoll: ep_unregister_pollwait() can use the freed pwq->whead
+    - epoll: limit paths (CVE-2011-1083)
+    - cdrom: use copy_to_user() without the underscores
+
+  [ Bastian Blank ]
+  * [mips,mipsel] Also remove ext4 modules from installer.
+
+  [ Ben Hutchings ]
+  * Update debconf template translations:
+    - Update Dutch (Willem Kuyn) (Closes: #658736)
+    - Add Polish (Michał Kułach) (Closes: #658912)
+  * Bump ABI to 2
+  * fs: Introduce and enable security restrictions on links:
+    - Do not follow symlinks in /tmp that are owned by other users
+      (sysctl: fs.protected_symlinks)
+    - Do not allow unprivileged users to create hard links to sensitive files
+      (sysctl: fs.protected_hardlinks) (Closes: #609455)
+      + This breaks the 'at' package in stable, which will be fixed shortly
+        (see #597130)
+    The precise restrictions are specified in Documentation/sysctl/fs.txt in
+    the linux-doc-3.2 and linux-source-3.2 packages.
+  * iwlwifi: fix key removal (Closes: #651199)
+  * cgroups: Set CGROUP_PERF
+  * hid: Enable HID_HOLTEK, HID_PRIMAX, HID_SPEEDLINK, HID_WIIMOTE as modules,
+    HID_ACRUX_FF
+  * media/rc: Enable RC_ATI_REMOTE as module
+  * gspca: Enable USB_GSPCA_TOPRO as module
+  * dvb-usb: Enable DVB_USB_PCTV452E, DVB_USB_MXL111SF as modules
+
+  [ Uwe Kleine-König ]
+  * [x86] Update rt featureset to 3.2.9-rt15
+
+ -- Ben Hutchings <ben at decadent.org.uk>  Sun, 04 Mar 2012 15:32:20 +0000
+
+linux-2.6 (3.2.7-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.7
+
+  [ Ben Hutchings ]
+  * Add Turkish debconf template translations (Mert Dirik) (Closes: #660117)
+  * [amd64] Disable BLK_DEV_IDEPNP, BLK_DEV_OPTI621, IDE_GENERIC
+  * Use libata-based drivers for most of the remaining PATA controllers:
+    - pata_legacy replaces ide-generic
+    - pata_isapnp replaces ide-pnp
+    - pata_opti replaces opti621
+    - pata_hpt366 and pata_hpt37x replace hpt366
+    - pata_ninja32 replaces delkin_cb
+    - pata_cs5535 replaces cs5535
+    - pata_winbond replaces sl82c105
+    - [alpha] pata_cypress replaces cy82c693
+    - [hppa] pata_ns87415 replaces ns87415
+    - [sparc] Various replacements, as for x86 in 2.6.32-10
+  * Disable old IDE subsystem [!ia64,m68k]:
+    - Disable BLK_DEV_IT8172, BLK_DEV_IT8213, BLK_DEV_TC86C001, BLK_DEV_TRM290
+    - [alpha] Disable BLK_DEV_4DRIVES, BLK_DEV_ALI14XX, BLK_DEV_DTC2278,
+      BLK_DEV_HT6560B, BLK_DEV_QD65XX, BLK_DEV_UMC8672
+  * fs: Enable EFI_PARTITION in all configurations (Closes: #660582)
+  * [i386] Re-enable INTEL_IOMMU, IRQ_REMAP
+  * [mips/r5k-ip32] Enable INPUT_SGI_BTNS (previously INPUT_SGIO2_BTNS)
+  * [powerpc/powerpc64] Enable IBM_EMAC (previously IBM_NEW_EMAC)
+  * [x86] drm/i915: do not enable RC6p on Sandy Bridge (Closes: #660265)
+  * ipsec: be careful of non existing mac headers (Closes: #660804)
+  * version: Use maintainer rather than uploader address for official
+    binary packages
+
+  [ Bastian Blank ]
+  * Don't advertise Xen support for rt images. (closes: #659988)
+  * [m68k,mips,mipsel] Use ext4 for all ext-variants. (closes: #660446)
+  * [m68k,mips,mipsel] Don't built-in ramdisk support.
+  * [hppa,mips,mipsel] Don't built-in cramfs support.
+  * [alpha,hppa] Don't built-in ext2.
+  * Remove IDE trigger for LED support.
+  * Remove all framebuffer bootup logos.
+  * NFSv4: Fix an Oops in the NFSv4 getacl code.
+
+ -- Bastian Blank <waldi at debian.org>  Tue, 28 Feb 2012 16:00:41 +0100
+
 linux-2.6 (3.2.6-1) unstable; urgency=low
 
   * New upstream stable update:

Modified: dists/trunk/linux-2.6/debian/config/alpha/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/alpha/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/alpha/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -56,7 +56,10 @@
 CONFIG_PATA_AMD=m
 CONFIG_PATA_CS5520=m
 CONFIG_PATA_CS5530=m
+CONFIG_PATA_CYPRESS=m
 CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
 CONFIG_PATA_NS87415=m
 CONFIG_PATA_OLDPIIX=m
 CONFIG_PATA_PDC2027X=m
@@ -66,7 +69,10 @@
 CONFIG_PATA_SIL680=m
 CONFIG_PATA_TRIFLEX=m
 CONFIG_PATA_VIA=m
+CONFIG_PATA_ISAPNP=y
 CONFIG_PATA_MPIIX=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_LEGACY=m
 
 ##
 ## file: drivers/atm/Kconfig
@@ -284,46 +290,6 @@
 CONFIG_SCx200_ACB=m
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_IDE=m
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=m
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_IDE_GENERIC=m
-CONFIG_BLK_DEV_IDEPNP=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=m
-CONFIG_BLK_DEV_OPTI621=m
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-CONFIG_BLK_DEV_CY82C693=m
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-CONFIG_BLK_DEV_HPT366=m
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-CONFIG_BLK_DEV_TRM290=m
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-CONFIG_BLK_DEV_4DRIVES=y
-CONFIG_BLK_DEV_ALI14XX=m
-CONFIG_BLK_DEV_DTC2278=m
-CONFIG_BLK_DEV_HT6560B=m
-CONFIG_BLK_DEV_QD65XX=m
-CONFIG_BLK_DEV_UMC8672=m
-
-##
 ## file: drivers/input/gameport/Kconfig
 ##
 CONFIG_GAMEPORT=m
@@ -1045,11 +1011,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-# CONFIG_LOGO is not set
-
-##
 ## file: drivers/watchdog/Kconfig
 ##
 CONFIG_PCWATCHDOG=m
@@ -1067,11 +1028,6 @@
 CONFIG_BINFMT_EM86=m
 
 ##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
 ## file: fs/partitions/Kconfig
 ##
 CONFIG_ACORN_PARTITION=y
@@ -1251,12 +1207,3 @@
 ##
 CONFIG_SND_HDA_INTEL=m
 
-##
-## file: unknown
-##
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NET_ISA=y
-CONFIG_NET_PCI=y
-CONFIG_NET_PCMCIA=y
-CONFIG_NET_VENDOR_SMC=y
-

Modified: dists/trunk/linux-2.6/debian/config/amd64/defines
==============================================================================
--- dists/trunk/linux-2.6/debian/config/amd64/defines	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/amd64/defines	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,8 +1,7 @@
 [base]
 featuresets:
+ none
 # rt
-flavours:
- amd64
 kernel-arch: x86
 
 [build]
@@ -16,13 +15,7 @@
 [amd64_description]
 hardware: 64-bit PCs
 hardware-long: PCs with AMD64 or Intel 64 processors
-parts: xen
 
 [amd64_image]
 configs:
  kernelarch-x86/config-arch-64
-
-[amd64_xen]
-dom0-support: true
-flavours:
- amd64

Modified: dists/trunk/linux-2.6/debian/config/armel/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -114,4 +114,3 @@
 ##
 # CONFIG_SECURITY_TOMOYO is not set
 
-

Modified: dists/trunk/linux-2.6/debian/config/armel/config.iop32x
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config.iop32x	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config.iop32x	Sun Mar  4 20:27:13 2012	(r18790)
@@ -75,6 +75,8 @@
 CONFIG_PATA_CS5520=m
 CONFIG_PATA_CS5530=m
 CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
 CONFIG_PATA_NETCELL=m
 CONFIG_PATA_NS87415=m
 CONFIG_PATA_OLDPIIX=m
@@ -85,8 +87,11 @@
 CONFIG_PATA_SIL680=m
 CONFIG_PATA_TRIFLEX=m
 CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
 CONFIG_PATA_MPIIX=m
 CONFIG_PATA_NS87410=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_LEGACY=m
 
 ##
 ## file: drivers/block/Kconfig
@@ -215,40 +220,6 @@
 # CONFIG_I2C_STUB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_IDE=m
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_IDE_GENERIC=m
-CONFIG_BLK_DEV_OFFBOARD=y
-# CONFIG_BLK_DEV_GENERIC is not set
-CONFIG_BLK_DEV_OPTI621=m
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-CONFIG_BLK_DEV_CY82C693=m
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-CONFIG_BLK_DEV_HPT366=m
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-CONFIG_BLK_DEV_SL82C105=m
-# CONFIG_BLK_DEV_SLC90E66 is not set
-CONFIG_BLK_DEV_TRM290=m
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-
-##
 ## file: drivers/input/gameport/Kconfig
 ##
 CONFIG_GAMEPORT=m
@@ -288,7 +259,6 @@
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_PCA9532=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
 
 ##
 ## file: drivers/media/Kconfig
@@ -596,7 +566,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: init/Kconfig
@@ -725,10 +694,3 @@
 ##
 # CONFIG_SND_HDA_INTEL is not set
 
-##
-## file: unknown
-##
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_NET_PCI is not set
-

Modified: dists/trunk/linux-2.6/debian/config/armel/config.ixp4xx
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config.ixp4xx	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config.ixp4xx	Sun Mar  4 20:27:13 2012	(r18790)
@@ -244,11 +244,6 @@
 # CONFIG_SCx200_ACB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/gameport/Kconfig
 ##
 CONFIG_GAMEPORT=m
@@ -702,7 +697,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: init/Kconfig
@@ -829,13 +823,3 @@
 ##
 # CONFIG_SND_HDA_INTEL is not set
 
-##
-## file: unknown
-##
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_NET_PCI is not set
-# CONFIG_NET_POCKET is not set
-

Modified: dists/trunk/linux-2.6/debian/config/armel/config.kirkwood
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config.kirkwood	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config.kirkwood	Sun Mar  4 20:27:13 2012	(r18790)
@@ -631,7 +631,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: fs/ubifs/Kconfig
@@ -688,12 +687,3 @@
 CONFIG_SND_KIRKWOOD_SOC_OPENRD=m
 CONFIG_SND_KIRKWOOD_SOC_T5325=m
 
-##
-## file: unknown
-##
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NETDEV_1000=y
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_NET_ETHERNET is not set
-

Modified: dists/trunk/linux-2.6/debian/config/armel/config.mv78xx0
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config.mv78xx0	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config.mv78xx0	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,8 +1,8 @@
 ##
 ## file: arch/arm/Kconfig
 ##
-## choice: ARM system type
 CONFIG_MMU=y
+## choice: ARM system type
 # CONFIG_ARCH_INTEGRATOR is not set
 # CONFIG_ARCH_REALVIEW is not set
 # CONFIG_ARCH_VERSATILE is not set
@@ -20,8 +20,8 @@
 # CONFIG_ARCH_IXP23XX is not set
 # CONFIG_ARCH_IXP2000 is not set
 # CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_ORION5X is not set
 CONFIG_ARCH_MV78XX0=y
+# CONFIG_ARCH_ORION5X is not set
 # CONFIG_ARCH_KS8695 is not set
 # CONFIG_ARCH_PNX4008 is not set
 # CONFIG_ARCH_PXA is not set
@@ -33,6 +33,7 @@
 # CONFIG_ARCH_OMAP is not set
 ## end choice
 CONFIG_PCI=y
+CONFIG_HIGHMEM=y
 CONFIG_LEDS=y
 CONFIG_LEDS_CPU=y
 CONFIG_UACCESS_WITH_MEMCPY=y
@@ -47,7 +48,6 @@
 # CONFIG_FPE_FASTFPE is not set
 CONFIG_VFP=y
 # CONFIG_ARTHUR is not set
-CONFIG_HIGHMEM=y
 
 ##
 ## file: arch/arm/mach-mv78xx0/Kconfig
@@ -569,7 +569,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: mm/Kconfig
@@ -599,12 +598,3 @@
 ##
 CONFIG_WAN_ROUTER=m
 
-##
-## file: unknown
-##
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NETDEV_1000=y
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_NET_ETHERNET is not set
-

Modified: dists/trunk/linux-2.6/debian/config/armel/config.orion5x
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config.orion5x	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config.orion5x	Sun Mar  4 20:27:13 2012	(r18790)
@@ -592,7 +592,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: mm/Kconfig
@@ -622,12 +621,3 @@
 ##
 CONFIG_WAN_ROUTER=m
 
-##
-## file: unknown
-##
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NETDEV_1000=y
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_NET_ETHERNET is not set
-

Modified: dists/trunk/linux-2.6/debian/config/armel/config.versatile
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armel/config.versatile	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armel/config.versatile	Sun Mar  4 20:27:13 2012	(r18790)
@@ -459,14 +459,6 @@
 CONFIG_DISPLAY_SUPPORT=m
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-
-##
 ## file: kernel/Kconfig.preempt
 ##
 ## choice: Preemption Model
@@ -525,11 +517,3 @@
 ##
 # CONFIG_WAN_ROUTER is not set
 
-##
-## file: unknown
-##
-CONFIG_NETDEV_1000=y
-# CONFIG_NETDEV_10000 is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_NET_PCI=y
-

Modified: dists/trunk/linux-2.6/debian/config/armhf/config.mx5
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armhf/config.mx5	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armhf/config.mx5	Sun Mar  4 20:27:13 2012	(r18790)
@@ -173,6 +173,5 @@
 ##
 ## file: unknown
 ##
-CONFIG_LEDS_GPIO_PLATFORM=y
 CONFIG_SND_SOC_IMX_SGTL5000=m
 

Modified: dists/trunk/linux-2.6/debian/config/armhf/config.omap
==============================================================================
--- dists/trunk/linux-2.6/debian/config/armhf/config.omap	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/armhf/config.omap	Sun Mar  4 20:27:13 2012	(r18790)
@@ -331,10 +331,3 @@
 CONFIG_SND_OMAP_SOC_RX51=m
 CONFIG_SND_OMAP_SOC_SDP4430=m
 
-##
-## file: unknown
-##
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_OMAP_PM_NONE is not set
-CONFIG_USB_MUSB_OTG=y
-

Modified: dists/trunk/linux-2.6/debian/config/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -133,7 +133,7 @@
 CONFIG_PATA_JMICRON=m
 CONFIG_PATA_MARVELL=m
 # CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
+CONFIG_PATA_NINJA32=m
 # CONFIG_PATA_NS87415 is not set
 # CONFIG_PATA_OLDPIIX is not set
 # CONFIG_PATA_OPTIDMA is not set
@@ -374,21 +374,24 @@
 CONFIG_HID=m
 CONFIG_HIDRAW=y
 CONFIG_HID_ACRUX=m
-CONFIG_HID_ACRUX_FF=m
+CONFIG_HID_ACRUX_FF=y
 CONFIG_HID_PRODIKEYS=m
 CONFIG_HID_DRAGONRISE=m
 CONFIG_DRAGONRISE_FF=y
 CONFIG_HID_EMS_FF=m
 CONFIG_HID_ELECOM=m
+CONFIG_HID_HOLTEK=m
 CONFIG_HID_KEYTOUCH=m
 CONFIG_HID_UCLOGIC=m
 CONFIG_HID_WALTOP=m
 CONFIG_HID_GYRATION=m
 CONFIG_HID_TWINHAN=m
 CONFIG_HID_LCPOWER=m
+CONFIG_HID_LOGITECH_DJ=m
 CONFIG_LOGITECH_FF=y
 CONFIG_LOGIRUMBLEPAD2_FF=y
 CONFIG_LOGIG940_FF=y
+CONFIG_LOGIWHEELS_FF=y
 CONFIG_HID_MAGICMOUSE=m
 CONFIG_HID_MULTITOUCH=m
 CONFIG_HID_NTRIG=m
@@ -397,6 +400,7 @@
 CONFIG_PANTHERLORD_FF=y
 CONFIG_HID_PETALYNX=m
 CONFIG_HID_PICOLCD=m
+CONFIG_HID_PRIMAX=m
 CONFIG_HID_QUANTA=m
 CONFIG_HID_ROCCAT=m
 CONFIG_HID_ROCCAT_ARVO=m
@@ -406,6 +410,7 @@
 CONFIG_HID_ROCCAT_PYRA=m
 CONFIG_HID_SAMSUNG=m
 CONFIG_HID_SONY=m
+CONFIG_HID_SPEEDLINK=m
 CONFIG_HID_SUNPLUS=m
 CONFIG_HID_GREENASIA=m
 CONFIG_GREENASIA_FF=y
@@ -416,6 +421,7 @@
 CONFIG_THRUSTMASTER_FF=y
 CONFIG_HID_WACOM=m
 CONFIG_HID_WACOM_POWER_SUPPLY=y
+CONFIG_HID_WIIMOTE=m
 CONFIG_HID_ZEROPLUS=m
 CONFIG_ZEROPLUS_FF=y
 CONFIG_HID_ZYDACRON=m
@@ -542,18 +548,16 @@
 ##
 ## file: drivers/ide/Kconfig
 ##
+# CONFIG_IDE is not set
+#. But for ia64 and m68k flavours that need it
 CONFIG_IDE_GD=m
 CONFIG_IDE_GD_ATA=y
 CONFIG_IDE_GD_ATAPI=y
-CONFIG_BLK_DEV_DELKIN=m
 # CONFIG_IDE_TASK_IOCTL is not set
 CONFIG_IDE_PROC_FS=y
 # CONFIG_BLK_DEV_PLATFORM is not set
 # CONFIG_BLK_DEV_JMICRON is not set
-CONFIG_BLK_DEV_IT8172=m
-CONFIG_BLK_DEV_IT8213=m
 # CONFIG_BLK_DEV_IT821X is not set
-CONFIG_BLK_DEV_TC86C001=m
 
 ##
 ## file: drivers/idle/Kconfig
@@ -870,7 +874,6 @@
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
 CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 CONFIG_LEDS_TRIGGER_BACKLIGHT=m
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
@@ -974,6 +977,7 @@
 CONFIG_DVB_USB_OPERA1=m
 CONFIG_DVB_USB_AF9005=m
 CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_USB_PCTV452E=m
 CONFIG_DVB_USB_DW2102=m
 CONFIG_DVB_USB_CINERGY_T2=m
 CONFIG_DVB_USB_ANYSEE=m
@@ -986,6 +990,7 @@
 CONFIG_DVB_USB_LME2510=m
 CONFIG_DVB_USB_TECHNISAT_USB2=m
 CONFIG_DVB_USB_IT913X=m
+CONFIG_DVB_USB_MXL111SF=m
 
 ##
 ## file: drivers/media/dvb/firewire/Kconfig
@@ -1125,6 +1130,7 @@
 CONFIG_IR_RC5_SZ_DECODER=m
 CONFIG_IR_MCE_KBD_DECODER=m
 CONFIG_IR_LIRC_CODEC=m
+CONFIG_RC_ATI_REMOTE=m
 CONFIG_IR_ENE=m
 CONFIG_IR_IMON=m
 CONFIG_IR_MCEUSB=m
@@ -1312,6 +1318,7 @@
 CONFIG_USB_GSPCA_STV0680=m
 CONFIG_USB_GSPCA_SUNPLUS=m
 CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TOPRO=m
 CONFIG_USB_GSPCA_TV8532=m
 CONFIG_USB_GSPCA_VC032X=m
 CONFIG_USB_GSPCA_VICAM=m
@@ -2970,6 +2977,12 @@
 # CONFIG_USB_DEVICE_CLASS is not set
 CONFIG_USB_DYNAMIC_MINORS=y
 CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+##
+## file: drivers/usb/dwc3/Kconfig
+##
+# CONFIG_USB_DWC3 is not set
 
 ##
 ## file: drivers/usb/gadget/Kconfig
@@ -3190,6 +3203,11 @@
 CONFIG_DISPLAY_SUPPORT=m
 
 ##
+## file: drivers/video/logo/Kconfig
+##
+# CONFIG_LOGO is not set
+
+##
 ## file: drivers/virtio/Kconfig
 ##
 CONFIG_VIRTIO_PCI=m
@@ -3252,6 +3270,9 @@
 CONFIG_HUGETLBFS=y
 CONFIG_MISC_FILESYSTEMS=y
 CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_PROTECTED_LINKS=y
+CONFIG_PROTECTED_SYMLINKS=y
+CONFIG_PROTECTED_HARDLINKS=y
 
 ##
 ## file: fs/9p/Kconfig
@@ -3663,7 +3684,7 @@
 # CONFIG_ULTRIX_PARTITION is not set
 # CONFIG_SUN_PARTITION is not set
 CONFIG_KARMA_PARTITION=y
-# CONFIG_EFI_PARTITION is not set
+CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
 
 ##
@@ -3800,6 +3821,7 @@
 CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
 # CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is not set
 # CONFIG_CGROUP_MEM_RES_CTLR_KMEM is not set
+CONFIG_CGROUP_PERF=y
 CONFIG_CGROUP_SCHED=y
 CONFIG_FAIR_GROUP_SCHED=y
 # CONFIG_RT_GROUP_SCHED is not set

Modified: dists/trunk/linux-2.6/debian/config/defines
==============================================================================
--- dists/trunk/linux-2.6/debian/config/defines	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/defines	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,9 +1,5 @@
 [abi]
-abiname: 1
-ignore-changes:
- module:arch/x86/kvm/*
- fixed_phy_add
- fixed_phy_set_link_update
+abiname: 2
 
 [base]
 arches:

Modified: dists/trunk/linux-2.6/debian/config/hppa/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/hppa/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/hppa/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -23,6 +23,12 @@
 # CONFIG_DEBUG_RODATA is not set
 
 ##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_LEGACY=m
+
+##
 ## file: drivers/block/Kconfig
 ##
 # CONFIG_BLK_DEV_FD is not set
@@ -88,39 +94,6 @@
 # CONFIG_I2C is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_IDE=m
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=m
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=m
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_IDE_GENERIC=m
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-CONFIG_BLK_DEV_NS87415=m
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-
-##
 ## file: drivers/input/Kconfig
 ##
 # CONFIG_INPUT_JOYDEV is not set
@@ -651,30 +624,11 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_LOGO_PARISC_CLUT224=y
-
-##
 ## file: drivers/w1/Kconfig
 ##
 # CONFIG_W1 is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_ROOT_NFS=y
@@ -833,11 +787,3 @@
 ##
 # CONFIG_SND_HDA_INTEL is not set
 
-##
-## file: unknown
-##
-CONFIG_NET_ISA=y
-CONFIG_NET_PCI=y
-CONFIG_NET_PCMCIA=y
-CONFIG_NET_VENDOR_SMC=y
-

Modified: dists/trunk/linux-2.6/debian/config/i386/defines
==============================================================================
--- dists/trunk/linux-2.6/debian/config/i386/defines	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/i386/defines	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,10 +1,7 @@
 [base]
 featuresets:
+ none
 # rt
-flavours:
- 486
- 686-pae
- amd64
 kernel-arch: x86
 
 [description]
@@ -33,30 +30,18 @@
 [686-pae_description]
 hardware: modern PCs
 hardware-long: PCs with one or more processors supporting PAE
-parts: pae xen
+parts: pae
 
 [686-pae_image]
 configs:
  kernelarch-x86/config-arch-32
 recommends: libc6-i686
 
-[686-pae_xen]
-dom0-support: true
-flavours:
- i386
- amd64
-
 [amd64_description]
 hardware: 64-bit PCs
 hardware-long: PCs with AMD64 or Intel 64 processors
-parts: xen
 
 [amd64_image]
 configs:
  kernelarch-x86/config-arch-64
 recommends: libc6-i686
-
-[amd64_xen]
-dom0-support: true
-flavours:
- amd64

Copied: dists/trunk/linux-2.6/debian/config/i386/none/defines (from r18789, dists/sid/linux-2.6/debian/config/i386/none/defines)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/config/i386/none/defines	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/config/i386/none/defines)
@@ -0,0 +1,22 @@
+[base]
+flavours:
+ 486
+ 686-pae
+ amd64
+
+[686-pae_description]
+parts: xen
+
+[686-pae_xen]
+dom0-support: true
+flavours:
+ i386
+ amd64
+
+[amd64_description]
+parts: xen
+
+[amd64_xen]
+dom0-support: true
+flavours:
+ amd64

Modified: dists/trunk/linux-2.6/debian/config/ia64/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/ia64/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/ia64/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -58,6 +58,8 @@
 CONFIG_PATA_CS5520=m
 CONFIG_PATA_CS5530=m
 CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
 CONFIG_PATA_NETCELL=m
 CONFIG_PATA_NS87415=m
 CONFIG_PATA_OLDPIIX=m
@@ -70,6 +72,8 @@
 CONFIG_PATA_VIA=m
 CONFIG_PATA_MPIIX=m
 CONFIG_PATA_NS87410=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_LEGACY=m
 
 ##
 ## file: drivers/block/Kconfig
@@ -231,19 +235,18 @@
 # CONFIG_BLK_DEV_IDECS is not set
 CONFIG_BLK_DEV_IDECD=m
 CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_IDE_GENERIC=m
+# CONFIG_IDE_GENERIC is not set
 # CONFIG_BLK_DEV_IDEPNP is not set
 # CONFIG_BLK_DEV_GENERIC is not set
-CONFIG_BLK_DEV_OPTI621=m
+# CONFIG_BLK_DEV_OPTI621 is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
 # CONFIG_BLK_DEV_CMD64X is not set
 # CONFIG_BLK_DEV_TRIFLEX is not set
-CONFIG_BLK_DEV_CY82C693=m
 # CONFIG_BLK_DEV_CS5520 is not set
 # CONFIG_BLK_DEV_CS5530 is not set
-CONFIG_BLK_DEV_HPT366=m
+# CONFIG_BLK_DEV_HPT366 is not set
 # CONFIG_BLK_DEV_SC1200 is not set
 # CONFIG_BLK_DEV_PIIX is not set
 # CONFIG_BLK_DEV_NS87415 is not set
@@ -756,14 +759,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-
-##
 ## file: fs/partitions/Kconfig
 ##
 CONFIG_ACORN_PARTITION=y
@@ -786,7 +781,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: net/ax25/Kconfig
@@ -880,9 +874,3 @@
 ##
 CONFIG_SND_HDA_INTEL=m
 
-##
-## file: unknown
-##
-CONFIG_NET_PCI=y
-CONFIG_NET_PCMCIA=y
-

Modified: dists/trunk/linux-2.6/debian/config/kernelarch-x86/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/kernelarch-x86/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/kernelarch-x86/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -152,6 +152,8 @@
 CONFIG_PATA_CS5520=m
 CONFIG_PATA_CS5530=m
 CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
 CONFIG_PATA_NETCELL=m
 CONFIG_PATA_NS87415=m
 CONFIG_PATA_OLDPIIX=m
@@ -516,46 +518,6 @@
 CONFIG_SCx200_ACB=m
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_IDE=m
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=m
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-# CONFIG_BLK_DEV_IDEACPI is not set
-CONFIG_IDE_GENERIC=m
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-CONFIG_BLK_DEV_IDEPNP=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-CONFIG_BLK_DEV_OPTI621=m
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-CONFIG_BLK_DEV_CY82C693=m
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-CONFIG_BLK_DEV_HPT366=m
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-CONFIG_BLK_DEV_TRM290=m
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-
-##
 ## file: drivers/idle/Kconfig
 ##
 CONFIG_INTEL_IDLE=y
@@ -622,6 +584,13 @@
 CONFIG_INPUT_TOUCHSCREEN=y
 
 ##
+## file: drivers/iommu/Kconfig
+##
+CONFIG_INTEL_IOMMU=y
+# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
+CONFIG_IRQ_REMAP=y
+
+##
 ## file: drivers/isdn/Kconfig
 ##
 CONFIG_ISDN=y
@@ -1537,11 +1506,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-# CONFIG_LOGO is not set
-
-##
 ## file: drivers/watchdog/Kconfig
 ##
 CONFIG_ACQUIRE_WDT=m
@@ -1609,7 +1573,6 @@
 CONFIG_SGI_PARTITION=y
 CONFIG_ULTRIX_PARTITION=y
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: kernel/irq/Kconfig
@@ -1774,15 +1737,3 @@
 ##
 CONFIG_SND_HDA_INTEL=m
 
-##
-## file: unknown
-##
-CONFIG_DMAR=y
-# CONFIG_DMAR_DEFAULT_ON is not set
-# CONFIG_ET131X_DEBUG is not set
-CONFIG_INTR_REMAP=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_POHMELFS_CRYPTO=y
-# CONFIG_XEN_DEBUG is not set
-CONFIG_XEN_PLATFORM_PCI=y
-

Modified: dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-32
==============================================================================
--- dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-32	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-32	Sun Mar  4 20:27:13 2012	(r18790)
@@ -62,8 +62,11 @@
 ##
 ## file: drivers/ata/Kconfig
 ##
-# CONFIG_PATA_CS5535 is not set
+CONFIG_PATA_CS5535=m
 CONFIG_PATA_CS5536=m
+CONFIG_PATA_ISAPNP=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_LEGACY=m
 
 ##
 ## file: drivers/atm/Kconfig
@@ -153,18 +156,6 @@
 CONFIG_SCx200_I2C_SDA=13
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_BLK_DEV_CS5535=m
-# CONFIG_BLK_DEV_CS5536 is not set
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-
-##
 ## file: drivers/input/misc/Kconfig
 ##
 CONFIG_INPUT_WISTRON_BTNS=m
@@ -574,8 +565,3 @@
 ##
 CONFIG_SND_SIS7019=m
 
-##
-## file: unknown
-##
-CONFIG_CS5535_GPIO=m
-

Modified: dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-64
==============================================================================
--- dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-64	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/kernelarch-x86/config-arch-64	Sun Mar  4 20:27:13 2012	(r18790)
@@ -53,11 +53,6 @@
 CONFIG_I2C_STUB=m
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-
-##
 ## file: drivers/input/mouse/Kconfig
 ##
 CONFIG_MOUSE_PS2_LOGIPS2PP=y
@@ -70,10 +65,6 @@
 ##
 CONFIG_AMD_IOMMU=y
 # CONFIG_AMD_IOMMU_STATS is not set
-CONFIG_INTEL_IOMMU=y
-# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
-CONFIG_INTEL_IOMMU_FLOPPY_WA=y
-CONFIG_IRQ_REMAP=y
 
 ##
 ## file: drivers/macintosh/Kconfig

Modified: dists/trunk/linux-2.6/debian/config/m68k/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -11,8 +11,6 @@
 ##
 ## file: drivers/block/Kconfig
 ##
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 # CONFIG_CDROM_PKTCDVD is not set
 
@@ -101,7 +99,6 @@
 ##
 CONFIG_NETDEVICES=y
 # CONFIG_BONDING is not set
-CONFIG_EQUALIZER=m
 # CONFIG_NETPOLL_TRAP is not set
 # CONFIG_TUN is not set
 
@@ -188,11 +185,6 @@
 # CONFIG_CIFS is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=m
-
-##
 ## file: fs/efs/Kconfig
 ##
 # CONFIG_EFS_FS is not set
@@ -200,12 +192,18 @@
 ##
 ## file: fs/ext2/Kconfig
 ##
-CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS is not set
 
 ##
 ## file: fs/ext3/Kconfig
 ##
-CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS is not set
+
+##
+## file: fs/ext4/Kconfig
+##
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_USE_FOR_EXT23=y
 
 ##
 ## file: fs/freevxfs/Kconfig

Modified: dists/trunk/linux-2.6/debian/config/m68k/config.amiga
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config.amiga	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config.amiga	Sun Mar  4 20:27:13 2012	(r18790)
@@ -246,14 +246,6 @@
 CONFIG_FONT_PEARL_8x8=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-
-##
 ## file: drivers/zorro/Kconfig
 ##
 CONFIG_ZORRO_NAMES=y
@@ -264,16 +256,6 @@
 CONFIG_AFFS_FS=y
 
 ##
-## file: fs/hfs/Kconfig
-##
-CONFIG_HFS_FS=m
-
-##
-## file: fs/hfsplus/Kconfig
-##
-CONFIG_HFSPLUS_FS=m
-
-##
 ## file: fs/partitions/Kconfig
 ##
 # CONFIG_PARTITION_ADVANCED is not set
@@ -318,9 +300,6 @@
 # CONFIG_FB_CYBER is not set
 # CONFIG_FB_RETINAZ3 is not set
 # CONFIG_FB_VIRGE is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_OKTAGON_SCSI is not set
 CONFIG_SCSI_AMIGA7XX=y

Modified: dists/trunk/linux-2.6/debian/config/m68k/config.atari
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config.atari	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config.atari	Sun Mar  4 20:27:13 2012	(r18790)
@@ -124,7 +124,6 @@
 ##
 ## file: drivers/rtc/Kconfig
 ##
-CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_GENERIC=y
 
 ##
@@ -159,26 +158,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-# CONFIG_LOGO is not set
-
-##
-## file: fs/affs/Kconfig
-##
-CONFIG_AFFS_FS=m
-
-##
-## file: fs/hfs/Kconfig
-##
-CONFIG_HFS_FS=m
-
-##
-## file: fs/hfsplus/Kconfig
-##
-CONFIG_HFSPLUS_FS=m
-
-##
 ## file: fs/nfs/Kconfig
 ##
 # CONFIG_NFS_V4 is not set
@@ -200,16 +179,6 @@
 # CONFIG_UFS_FS_WRITE is not set
 
 ##
-## file: lib/Kconfig
-##
-CONFIG_CRC32=y
-
-##
-## file: net/ipv4/Kconfig
-##
-# CONFIG_IP_PNP is not set
-
-##
 ## file: net/ipx/Kconfig
 ##
 CONFIG_IPX=m
@@ -232,6 +201,5 @@
 CONFIG_ATARI_ROM_ISA=y
 CONFIG_ATARI_SCC=y
 CONFIG_ATARI_SCC_DMA=y
-CONFIG_NET_ETHERNET=y
 CONFIG_STRAM_PROC=y
 

Modified: dists/trunk/linux-2.6/debian/config/m68k/config.bvme6000
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config.bvme6000	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config.bvme6000	Sun Mar  4 20:27:13 2012	(r18790)
@@ -39,11 +39,6 @@
 # CONFIG_FIREWIRE is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/joystick/Kconfig
 ##
 # CONFIG_INPUT_JOYSTICK is not set
@@ -133,5 +128,4 @@
 ## file: unknown
 ##
 CONFIG_BVME6000_SCC=y
-CONFIG_NET_ETHERNET=y
 

Modified: dists/trunk/linux-2.6/debian/config/m68k/config.mac
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config.mac	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config.mac	Sun Mar  4 20:27:13 2012	(r18790)
@@ -158,20 +158,6 @@
 CONFIG_FONT_6x11=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_LOGO_MAC_CLUT224=y
-
-##
-## file: fs/affs/Kconfig
-##
-CONFIG_AFFS_FS=m
-
-##
 ## file: fs/hfs/Kconfig
 ##
 CONFIG_HFS_FS=y
@@ -221,6 +207,5 @@
 ## file: unknown
 ##
 CONFIG_MAC_SCC=y
-CONFIG_NET_ETHERNET=y
 # CONFIG_NET_VENDOR_SMC is not set
 

Modified: dists/trunk/linux-2.6/debian/config/m68k/config.mvme147
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config.mvme147	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config.mvme147	Sun Mar  4 20:27:13 2012	(r18790)
@@ -34,11 +34,6 @@
 CONFIG_GEN_RTC=m
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/joystick/Kconfig
 ##
 # CONFIG_INPUT_JOYSTICK is not set
@@ -100,14 +95,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_NFS_FS=y
@@ -141,5 +128,4 @@
 ## file: unknown
 ##
 CONFIG_MVME147_SCC=y
-CONFIG_NET_ETHERNET=y
 

Modified: dists/trunk/linux-2.6/debian/config/m68k/config.mvme16x
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/config.mvme16x	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/config.mvme16x	Sun Mar  4 20:27:13 2012	(r18790)
@@ -39,11 +39,6 @@
 # CONFIG_FIREWIRE is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/joystick/Kconfig
 ##
 # CONFIG_INPUT_JOYSTICK is not set
@@ -105,14 +100,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_NFS_FS=y
@@ -146,5 +133,4 @@
 ## file: unknown
 ##
 CONFIG_MVME162_SCC=y
-CONFIG_NET_ETHERNET=y
 

Modified: dists/trunk/linux-2.6/debian/config/m68k/defines
==============================================================================
--- dists/trunk/linux-2.6/debian/config/m68k/defines	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/m68k/defines	Sun Mar  4 20:27:13 2012	(r18790)
@@ -5,12 +5,9 @@
  amiga
  atari
  bvme6000
-# hp
  mac
  mvme147
  mvme16x
-# q40
-# sun3
 kernel-arch: m68k
 
 [image]
@@ -26,9 +23,6 @@
 [bvme6000_description]
 hardware: BVM BVME4000 and BVME6000
 
-[hp_description]
-hardware: HP
-
 [mac_description]
 hardware: Macintosh
 
@@ -38,9 +32,3 @@
 [mvme16x_description]
 hardware: Motorola MVME162/6/7, MVME172/7
 
-[q40_description]
-hardware: Q40 and Q60
-
-[sun3_description]
-hardware: sun3
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -5,11 +5,5 @@
 CONFIG_CPU_BIG_ENDIAN=y
 # CONFIG_CPU_LITTLE_ENDIAN is not set
 ## end choice
-CONFIG_SECCOMP=y
 # CONFIG_RAPIDIO is not set
 
-##
-## file: drivers/net/ethernet/sun/Kconfig
-##
-# CONFIG_NIU is not set
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.4kc-malta
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.4kc-malta	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.4kc-malta	Sun Mar  4 20:27:13 2012	(r18790)
@@ -147,8 +147,6 @@
 CONFIG_BLK_DEV_UMEM=m
 CONFIG_BLK_DEV_SX8=m
 # CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=65536
 CONFIG_CDROM_PKTCDVD=m
 CONFIG_CDROM_PKTCDVD_BUFFERS=8
@@ -317,11 +315,6 @@
 # CONFIG_I2C_STUB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/gameport/Kconfig
 ##
 CONFIG_GAMEPORT=m
@@ -1060,11 +1053,6 @@
 CONFIG_DISPLAY_SUPPORT=m
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-
-##
 ## file: drivers/watchdog/Kconfig
 ##
 CONFIG_PCIPCWATCHDOG=m
@@ -1072,27 +1060,12 @@
 CONFIG_USBPCWATCHDOG=m
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
 ## file: fs/dlm/Kconfig
 ##
 CONFIG_DLM=m
 # CONFIG_DLM_DEBUG is not set
 
 ##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_NFS_FS=y
@@ -1267,14 +1240,3 @@
 ##
 CONFIG_SND_HDA_INTEL=m
 
-##
-## file: unknown
-##
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NET_PCI=y
-CONFIG_NET_POCKET=y
-# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
-CONFIG_VIRTUALIZATION=y
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.5kc-malta
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.5kc-malta	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.5kc-malta	Sun Mar  4 20:27:13 2012	(r18790)
@@ -150,8 +150,6 @@
 CONFIG_BLK_DEV_UMEM=m
 CONFIG_BLK_DEV_SX8=m
 # CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=65536
 CONFIG_CDROM_PKTCDVD=m
 CONFIG_CDROM_PKTCDVD_BUFFERS=8
@@ -320,11 +318,6 @@
 # CONFIG_I2C_STUB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/gameport/Kconfig
 ##
 CONFIG_GAMEPORT=m
@@ -1064,11 +1057,6 @@
 CONFIG_DISPLAY_SUPPORT=m
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-
-##
 ## file: drivers/watchdog/Kconfig
 ##
 CONFIG_PCIPCWATCHDOG=m
@@ -1076,27 +1064,12 @@
 CONFIG_USBPCWATCHDOG=m
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
 ## file: fs/dlm/Kconfig
 ##
 CONFIG_DLM=m
 # CONFIG_DLM_DEBUG is not set
 
 ##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_NFS_FS=y
@@ -1271,14 +1244,3 @@
 ##
 CONFIG_SND_HDA_INTEL=m
 
-##
-## file: unknown
-##
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NET_PCI=y
-CONFIG_NET_POCKET=y
-# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
-CONFIG_VIRTUALIZATION=y
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.octeon
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.octeon	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.octeon	Sun Mar  4 20:27:13 2012	(r18790)
@@ -93,10 +93,6 @@
 CONFIG_OCTEON_MGMT_ETHERNET=y
 
 ##
-## file: drivers/net/phy/Kconfig
-##
-
-##
 ## file: drivers/rtc/Kconfig
 ##
 CONFIG_RTC_DRV_DS1307=y
@@ -121,16 +117,6 @@
 CONFIG_SERIAL_8250_RUNTIME_UARTS=2
 
 ##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: kernel/power/Kconfig
 ##
 # CONFIG_SUSPEND is not set
@@ -144,9 +130,3 @@
 CONFIG_SPARSEMEM_MANUAL=y
 ## end choice
 
-##
-## file: unknown
-##
-CONFIG_CAVIUM_OCTEON_SPECIFIC_OPTIONS=y
-CONFIG_MTD_PARTITIONS=y
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.r4k-ip22
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.r4k-ip22	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.r4k-ip22	Sun Mar  4 20:27:13 2012	(r18790)
@@ -105,8 +105,6 @@
 ##
 ## file: drivers/block/Kconfig
 ##
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=8192
 # CONFIG_CDROM_PKTCDVD is not set
 
@@ -192,11 +190,6 @@
 # CONFIG_I2C_STUB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/input/Kconfig
 ##
 # CONFIG_INPUT_JOYDEV is not set
@@ -474,15 +467,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_SGI_CLUT224=y
-
-##
 ## file: drivers/w1/Kconfig
 ##
 # CONFIG_W1 is not set
@@ -496,21 +480,6 @@
 # CONFIG_WDT is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/partitions/Kconfig
 ##
 CONFIG_SGI_PARTITION=y
@@ -579,17 +548,3 @@
 CONFIG_SND_MIPS=y
 CONFIG_SND_SGI_HAL2=m
 
-##
-## file: unknown
-##
-# CONFIG_MIPS_ATLAS is not set
-# CONFIG_MIPS_SEAD is not set
-CONFIG_NET_ISA=y
-# CONFIG_NET_PCI is not set
-# CONFIG_NET_POCKET is not set
-CONFIG_NET_VENDOR_SMC=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.r5k-ip32
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.r5k-ip32	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.r5k-ip32	Sun Mar  4 20:27:13 2012	(r18790)
@@ -104,8 +104,6 @@
 ##
 ## file: drivers/block/Kconfig
 ##
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=8192
 # CONFIG_CDROM_PKTCDVD is not set
 
@@ -219,11 +217,6 @@
 # CONFIG_SCx200_ACB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/infiniband/Kconfig
 ##
 # CONFIG_INFINIBAND is not set
@@ -257,6 +250,7 @@
 ## file: drivers/input/misc/Kconfig
 ##
 CONFIG_INPUT_MISC=y
+CONFIG_INPUT_SGI_BTNS=m
 
 ##
 ## file: drivers/input/mouse/Kconfig
@@ -588,15 +582,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_SGI_CLUT224=y
-
-##
 ## file: drivers/w1/Kconfig
 ##
 # CONFIG_W1 is not set
@@ -608,21 +593,6 @@
 # CONFIG_WDTPCI is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/partitions/Kconfig
 ##
 CONFIG_SGI_PARTITION=y
@@ -715,16 +685,3 @@
 ##
 # CONFIG_SND_HDA_INTEL is not set
 
-##
-## file: unknown
-##
-CONFIG_INPUT_SGIO2_BTNS=m
-# CONFIG_MIPS_ATLAS is not set
-# CONFIG_MIPS_SEAD is not set
-CONFIG_NET_PCI=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_STRADIS is not set
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.sb1-bcm91250a
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.sb1-bcm91250a	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.sb1-bcm91250a	Sun Mar  4 20:27:13 2012	(r18790)
@@ -163,8 +163,6 @@
 # CONFIG_BLK_DEV_UMEM is not set
 # CONFIG_BLK_DEV_SX8 is not set
 # CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=8192
 # CONFIG_CDROM_PKTCDVD is not set
 
@@ -277,11 +275,6 @@
 # CONFIG_SCx200_ACB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/infiniband/Kconfig
 ##
 # CONFIG_INFINIBAND is not set
@@ -743,14 +736,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-
-##
 ## file: drivers/w1/Kconfig
 ##
 # CONFIG_W1 is not set
@@ -763,21 +748,6 @@
 # CONFIG_USBPCWATCHDOG is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_NFS_FS=y
@@ -840,16 +810,3 @@
 ##
 # CONFIG_WAN_ROUTER is not set
 
-##
-## file: unknown
-##
-CONFIG_BLK_DEV_IDE_SWARM=y
-# CONFIG_LAN_SAA9730 is not set
-# CONFIG_MIPS_ATLAS is not set
-# CONFIG_MIPS_SEAD is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NET_PCI=y
-# CONFIG_NET_POCKET is not set
-CONFIG_SIBYTE_CFE=y
-# CONFIG_SIMULATION is not set
-

Modified: dists/trunk/linux-2.6/debian/config/mips/config.sb1a-bcm91480b
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/config.sb1a-bcm91480b	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/config.sb1a-bcm91480b	Sun Mar  4 20:27:13 2012	(r18790)
@@ -163,8 +163,6 @@
 # CONFIG_BLK_DEV_UMEM is not set
 # CONFIG_BLK_DEV_SX8 is not set
 # CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=8192
 # CONFIG_CDROM_PKTCDVD is not set
 
@@ -283,11 +281,6 @@
 # CONFIG_SCx200_ACB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/infiniband/Kconfig
 ##
 # CONFIG_INFINIBAND is not set
@@ -749,14 +742,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-
-##
 ## file: drivers/w1/Kconfig
 ##
 # CONFIG_W1 is not set
@@ -769,21 +754,6 @@
 # CONFIG_USBPCWATCHDOG is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/nfs/Kconfig
 ##
 CONFIG_NFS_FS=y
@@ -846,16 +816,3 @@
 ##
 # CONFIG_WAN_ROUTER is not set
 
-##
-## file: unknown
-##
-# CONFIG_BLK_DEV_IDE_SWARM is not set
-# CONFIG_LAN_SAA9730 is not set
-# CONFIG_MIPS_ATLAS is not set
-# CONFIG_MIPS_SEAD is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NET_PCI=y
-# CONFIG_NET_POCKET is not set
-CONFIG_SIBYTE_CFE=y
-# CONFIG_SIMULATION is not set
-

Modified: dists/trunk/linux-2.6/debian/config/mips/defines
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mips/defines	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mips/defines	Sun Mar  4 20:27:13 2012	(r18790)
@@ -9,7 +9,15 @@
  octeon
 kernel-arch: mips
 
+[abi]
+ignore-changes:
+# Removal of EXT3_FS
+ journal_* log_start_commit log_wait_commit
+
 [image]
+configs:
+ kernelarch-mips/config
+ mips/config
 initramfs: false
 
 [r4k-ip22_description]

Modified: dists/trunk/linux-2.6/debian/config/mipsel/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mipsel/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mipsel/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -5,10 +5,4 @@
 # CONFIG_CPU_BIG_ENDIAN is not set
 CONFIG_CPU_LITTLE_ENDIAN=y
 ## end choice
-CONFIG_SECCOMP=y
-
-##
-## file: drivers/net/ethernet/sun/Kconfig
-##
-# CONFIG_NIU is not set
 

Modified: dists/trunk/linux-2.6/debian/config/mipsel/config.loongson-2f
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mipsel/config.loongson-2f	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mipsel/config.loongson-2f	Sun Mar  4 20:27:13 2012	(r18790)
@@ -126,18 +126,3 @@
 # CONFIG_VGA_CONSOLE is not set
 CONFIG_FRAMEBUFFER_CONSOLE=y
 
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
-## file: unknown
-##
-CONFIG_NET_PCI=y
-

Modified: dists/trunk/linux-2.6/debian/config/mipsel/config.r5k-cobalt
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mipsel/config.r5k-cobalt	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mipsel/config.r5k-cobalt	Sun Mar  4 20:27:13 2012	(r18790)
@@ -111,8 +111,6 @@
 # CONFIG_BLK_DEV_UMEM is not set
 # CONFIG_BLK_DEV_SX8 is not set
 # CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=8192
 # CONFIG_CDROM_PKTCDVD is not set
 
@@ -165,11 +163,6 @@
 # CONFIG_I2C is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-# CONFIG_IDE is not set
-
-##
 ## file: drivers/infiniband/Kconfig
 ##
 # CONFIG_INFINIBAND is not set
@@ -713,21 +706,6 @@
 # CONFIG_W1 is not set
 
 ##
-## file: fs/cramfs/Kconfig
-##
-CONFIG_CRAMFS=y
-
-##
-## file: fs/ext2/Kconfig
-##
-CONFIG_EXT2_FS=y
-
-##
-## file: fs/ext3/Kconfig
-##
-CONFIG_EXT3_FS=y
-
-##
 ## file: fs/partitions/Kconfig
 ##
 CONFIG_MSDOS_PARTITION=y
@@ -846,13 +824,3 @@
 ##
 CONFIG_SND_HDA_INTEL=m
 
-##
-## file: unknown
-##
-# CONFIG_LAN_SAA9730 is not set
-# CONFIG_MIPS_ATLAS is not set
-# CONFIG_MIPS_SEAD is not set
-# CONFIG_MTD_DEBUG is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_POCKET is not set
-

Modified: dists/trunk/linux-2.6/debian/config/mipsel/defines
==============================================================================
--- dists/trunk/linux-2.6/debian/config/mipsel/defines	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/mipsel/defines	Sun Mar  4 20:27:13 2012	(r18790)
@@ -8,7 +8,15 @@
  loongson-2f
 kernel-arch: mips
 
+[abi]
+ignore-changes:
+# Removal of EXT3_FS
+ journal_* log_start_commit log_wait_commit
+
 [image]
+configs:
+ kernelarch-mips/config
+ mipsel/config
 initramfs: false
 
 [r5k-cobalt_description]

Modified: dists/trunk/linux-2.6/debian/config/powerpc/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/powerpc/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/powerpc/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -79,6 +79,8 @@
 ## file: drivers/ata/Kconfig
 ##
 CONFIG_ATA=y
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
 CONFIG_PATA_MACIO=y
 CONFIG_PATA_NETCELL=m
 CONFIG_PATA_NS87415=m
@@ -87,6 +89,7 @@
 CONFIG_PATA_SC1200=m
 CONFIG_PATA_SIL680=m
 CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
 CONFIG_PATA_NS87410=m
 CONFIG_PATA_PCMCIA=m
 
@@ -271,42 +274,6 @@
 CONFIG_SCx200_ACB=m
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_IDE=m
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=m
-CONFIG_IDE_GD_ATA=y
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-CONFIG_BLK_DEV_HPT366=m
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-CONFIG_BLK_DEV_SL82C105=m
-# CONFIG_BLK_DEV_SLC90E66 is not set
-CONFIG_BLK_DEV_TRM290=m
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_IDE_PMAC is not set
-
-##
 ## file: drivers/input/gameport/Kconfig
 ##
 CONFIG_GAMEPORT=m
@@ -895,14 +862,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-
-##
 ## file: drivers/watchdog/Kconfig
 ##
 CONFIG_WATCHDOG_RTAS=m
@@ -915,7 +874,6 @@
 ##
 CONFIG_AMIGA_PARTITION=y
 CONFIG_MAC_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: lib/Kconfig.debug
@@ -1075,10 +1033,3 @@
 CONFIG_SND_POWERMAC=m
 CONFIG_SND_POWERMAC_AUTO_DRC=y
 
-##
-## file: unknown
-##
-CONFIG_NET_PCI=y
-CONFIG_NET_PCMCIA=y
-CONFIG_PROC_PREPRESIDUAL=y
-

Modified: dists/trunk/linux-2.6/debian/config/powerpc/config.powerpc64
==============================================================================
--- dists/trunk/linux-2.6/debian/config/powerpc/config.powerpc64	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/powerpc/config.powerpc64	Sun Mar  4 20:27:13 2012	(r18790)
@@ -118,6 +118,17 @@
 CONFIG_EHEA=m
 
 ##
+## file: drivers/net/ethernet/ibm/emac/Kconfig
+##
+CONFIG_IBM_EMAC=m
+# CONFIG_IBM_EMAC_DEBUG is not set
+CONFIG_IBM_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_EMAC_RXB=128
+CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_EMAC_RX_SKB_HEADROOM=0
+CONFIG_IBM_EMAC_TXB=64
+
+##
 ## file: drivers/net/ethernet/marvell/Kconfig
 ##
 # CONFIG_MV643XX_ETH is not set
@@ -200,14 +211,3 @@
 CONFIG_SND_PS3=m
 CONFIG_SND_PS3_DEFAULT_START_DELAY=2000
 
-##
-## file: unknown
-##
-CONFIG_IBM_NEW_EMAC=m
-# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-CONFIG_IBM_NEW_EMAC_RXB=128
-CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-CONFIG_IBM_NEW_EMAC_TXB=64
-

Modified: dists/trunk/linux-2.6/debian/config/sh4/config.sh7751r
==============================================================================
--- dists/trunk/linux-2.6/debian/config/sh4/config.sh7751r	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/sh4/config.sh7751r	Sun Mar  4 20:27:13 2012	(r18790)
@@ -111,12 +111,6 @@
 ##
 ## file: drivers/rtc/Kconfig
 ##
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
 CONFIG_RTC_DRV_R9701=y
 # CONFIG_RTC_DRV_SH is not set
 # CONFIG_RTC_DRV_GENERIC is not set
@@ -179,14 +173,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_SUPERH_MONO=y
-CONFIG_LOGO_SUPERH_VGA16=y
-CONFIG_LOGO_SUPERH_CLUT224=y
-
-##
 ## file: fs/ext3/Kconfig
 ##
 CONFIG_EXT3_FS=y
@@ -204,12 +190,3 @@
 CONFIG_FLATMEM_MANUAL=y
 ## end choice
 
-##
-## file: unknown
-##
-CONFIG_HAVE_MLOCK=y
-CONFIG_HAVE_MLOCKED_PAGE_BIT=y
-CONFIG_NET_ETHERNET=y
-CONFIG_NET_PCI=y
-CONFIG_SH_PCIDMA_NONCOHERENT=y
-

Modified: dists/trunk/linux-2.6/debian/config/sh4/config.sh7785lcr
==============================================================================
--- dists/trunk/linux-2.6/debian/config/sh4/config.sh7785lcr	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/sh4/config.sh7785lcr	Sun Mar  4 20:27:13 2012	(r18790)
@@ -156,12 +156,6 @@
 ##
 ## file: drivers/rtc/Kconfig
 ##
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
 CONFIG_RTC_DRV_RS5C372=y
 # CONFIG_RTC_DRV_SH is not set
 # CONFIG_RTC_DRV_GENERIC is not set
@@ -225,14 +219,6 @@
 CONFIG_FONT_8x16=y
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-CONFIG_LOGO_SUPERH_MONO=y
-CONFIG_LOGO_SUPERH_VGA16=y
-CONFIG_LOGO_SUPERH_CLUT224=y
-
-##
 ## file: drivers/watchdog/Kconfig
 ##
 CONFIG_WATCHDOG=y
@@ -262,10 +248,6 @@
 ##
 ## file: unknown
 ##
-CONFIG_HAVE_MLOCK=y
-CONFIG_HAVE_MLOCKED_PAGE_BIT=y
-CONFIG_NETDEV_1000=y
 CONFIG_PMB_ENABLE=y
 CONFIG_PMB_FIXED=y
-CONFIG_SH_PCIDMA_NONCOHERENT=y
 

Modified: dists/trunk/linux-2.6/debian/config/sparc/config
==============================================================================
--- dists/trunk/linux-2.6/debian/config/sparc/config	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/config/sparc/config	Sun Mar  4 20:27:13 2012	(r18790)
@@ -18,6 +18,22 @@
 CONFIG_SUN_OPENPROMFS=m
 
 ##
+## file: drivers/ata/Kconfig
+##
+CONFIG_PATA_ALI=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_LEGACY=m
+
+##
 ## file: drivers/block/Kconfig
 ##
 CONFIG_BLK_DEV_FD=y
@@ -137,38 +153,6 @@
 # CONFIG_I2C_STUB is not set
 
 ##
-## file: drivers/ide/Kconfig
-##
-CONFIG_IDE=y
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_IDE_GD=y
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_IDE_GENERIC=m
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=m
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-CONFIG_BLK_DEV_ALI15X3=m
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-CONFIG_BLK_DEV_CY82C693=m
-CONFIG_BLK_DEV_CS5520=m
-CONFIG_BLK_DEV_CS5530=m
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-CONFIG_BLK_DEV_NS87415=m
-CONFIG_BLK_DEV_PDC202XX_OLD=m
-CONFIG_BLK_DEV_PDC202XX_NEW=m
-CONFIG_BLK_DEV_SVWKS=m
-CONFIG_BLK_DEV_SIIMAGE=m
-# CONFIG_BLK_DEV_SLC90E66 is not set
-CONFIG_BLK_DEV_TRM290=m
-CONFIG_BLK_DEV_VIA82CXXX=m
-
-##
 ## file: drivers/input/Kconfig
 ##
 # CONFIG_INPUT_JOYDEV is not set
@@ -555,15 +539,6 @@
 # CONFIG_FONT_SUN12x22 is not set
 
 ##
-## file: drivers/video/logo/Kconfig
-##
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_SUN_CLUT224=y
-
-##
 ## file: drivers/w1/Kconfig
 ##
 # CONFIG_W1 is not set
@@ -572,7 +547,6 @@
 ## file: fs/partitions/Kconfig
 ##
 CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
 
 ##
 ## file: mm/Kconfig
@@ -699,9 +673,3 @@
 CONFIG_SND_SUN_CS4231=m
 CONFIG_SND_SUN_DBRI=m
 
-##
-## file: unknown
-##
-CONFIG_MYRI_SBUS=m
-CONFIG_NET_PCI=y
-

Modified: dists/trunk/linux-2.6/debian/installer/modules/ide-modules
==============================================================================
--- dists/trunk/linux-2.6/debian/installer/modules/ide-modules	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/installer/modules/ide-modules	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,32 +1,3 @@
 ide-generic ?
 ide-gd_mod ?
-aec62xx ?
-alim15x3 ?
-amd74xx ?
-atiixp ?
-cmd640 ?
-cmd64x ?
-cs5520 ?
-cs5530 ?
-cs5535 ?
-cy82c693 ?
-it821x ?
-it8213 ?
-jmicron ?
-hpt366 ?
-ns87415 ?
-opti621 ?
-pdc202xx_new ?
-pdc202xx_old ?
-piix ?
-rz1000 ?
-sc1200 ?
-serverworks ?
-siimage ?
-sis5513 ?
-slc90e66 ?
-triflex ?
 trm290 ?
-via82cxxx ?
-delkin_cb ?
-tc86c001 ?

Modified: dists/trunk/linux-2.6/debian/installer/modules/pcmcia-storage-modules
==============================================================================
--- dists/trunk/linux-2.6/debian/installer/modules/pcmcia-storage-modules	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/installer/modules/pcmcia-storage-modules	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,2 +1,2 @@
-ide-cs ?
+pata_ninja32 ?
 pata_pcmcia ?

Copied: dists/trunk/linux-2.6/debian/patches/bugfix/all/iwlwifi-fix-key-removal.patch (from r18789, dists/sid/linux-2.6/debian/patches/bugfix/all/iwlwifi-fix-key-removal.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/iwlwifi-fix-key-removal.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/bugfix/all/iwlwifi-fix-key-removal.patch)
@@ -0,0 +1,57 @@
+From: Johannes Berg <johannes.berg at intel.com>
+Date: Fri, 17 Feb 2012 09:47:14 -0800
+Subject: [PATCH] iwlwifi: fix key removal
+
+commit 5dcbf480473f6c3f06ad2426b7517038a2a18911 upstream.
+
+When trying to remove a key, we always send key
+flags just setting the key type, not including
+the multicast flag and the key ID. As a result,
+whenever any key was removed, the unicast key 0
+would be removed, causing a complete connection
+loss after the second rekey (the first doesn't
+cause a key removal). Fix the key removal code
+to include the key ID and multicast flag, thus
+removing the correct key.
+
+Cc: stable at vger.kernel.org
+Reported-by: Alexander Schnaidt <alex.schnaidt at googlemail.com>
+Tested-by: Alexander Schnaidt <alex.schnaidt at googlemail.com>
+Signed-off-by: Johannes Berg <johannes.berg at intel.com>
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/iwlwifi/iwl-agn-sta.c |   10 +++++++++-
+ 1 files changed, 9 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+index 7353826..e483cfa 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+@@ -1187,6 +1187,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
+ 	unsigned long flags;
+ 	struct iwl_addsta_cmd sta_cmd;
+ 	u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta);
++	__le16 key_flags;
+ 
+ 	/* if station isn't there, neither is the key */
+ 	if (sta_id == IWL_INVALID_STATION)
+@@ -1212,7 +1213,14 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
+ 		IWL_ERR(priv, "offset %d not used in uCode key table.\n",
+ 			keyconf->hw_key_idx);
+ 
+-	sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID;
++	key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
++	key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC |
++		     STA_KEY_FLG_INVALID;
++
++	if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE))
++		key_flags |= STA_KEY_MULTICAST_MSK;
++
++	sta_cmd.key.key_flags = key_flags;
+ 	sta_cmd.key.key_offset = WEP_INVALID_OFFSET;
+ 	sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK;
+ 	sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
+-- 
+1.7.9.1
+

Modified: dists/trunk/linux-2.6/debian/patches/debian/version.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/debian/version.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/debian/version.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -12,7 +12,7 @@
 +#ifdef LINUX_COMPILE_DISTRIBUTION_OFFICIAL_BUILD
 +	" (" LINUX_COMPILE_DISTRIBUTION " "
 +	     LINUX_COMPILE_DISTRIBUTION_VERSION ")"
-+	" (" LINUX_COMPILE_DISTRIBUTION_UPLOADER ")"
++	" (" LINUX_COMPILE_DISTRIBUTION_MAINTAINER ")"
 +#else
 +# ifdef LINUX_COMPILE_DISTRIBUTION_VERSION
 +	" (" LINUX_COMPILE_DISTRIBUTION_VERSION ")"
@@ -27,7 +27,7 @@
 +#ifdef LINUX_COMPILE_DISTRIBUTION_OFFICIAL_BUILD
 +	" (" LINUX_COMPILE_DISTRIBUTION " "
 +	     LINUX_COMPILE_DISTRIBUTION_VERSION ")"
-+	" (" LINUX_COMPILE_DISTRIBUTION_UPLOADER ")"
++	" (" LINUX_COMPILE_DISTRIBUTION_MAINTAINER ")"
 +#else
 +# ifdef LINUX_COMPILE_DISTRIBUTION_VERSION
 +	" (" LINUX_COMPILE_DISTRIBUTION_VERSION ")"
@@ -49,7 +49,7 @@
 +
 +  if [ "$DISTRIBUTION_OFFICIAL_BUILD" ]; then
 +    echo \#define LINUX_COMPILE_DISTRIBUTION_OFFICIAL_BUILD
-+    echo \#define LINUX_COMPILE_DISTRIBUTION_UPLOADER \"$DISTRIBUTION_UPLOADER\"
++    echo \#define LINUX_COMPILE_DISTRIBUTION_MAINTAINER \"$DISTRIBUTION_MAINTAINER\"
 +    echo \#define LINUX_COMPILE_DISTRIBUTION_VERSION \"$DISTRIBUTION_VERSION\"
 +    echo \#define LINUX_COMPILE_BY \"unknown\"
 +    echo \#define LINUX_COMPILE_HOST \"$DISTRIBUTION\"

Copied: dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restriction-cleanup.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restriction-cleanup.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restriction-cleanup.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restriction-cleanup.patch)
@@ -0,0 +1,112 @@
+From 52db90d0fa770e2277645eb34956820cec26b2cb Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook at chromium.org>
+Date: Sat, 25 Feb 2012 12:28:44 +1100
+Subject: [PATCH 5/5] fs: hardlink creation restriction cleanup
+
+Clean-up of hardlink restriction logic, as suggested by Andrew Morton.
+
+Signed-off-by: Kees Cook <keescook at chromium.org>
+Cc: Ingo Molnar <mingo at elte.hu>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ fs/namei.c |   62 ++++++++++++++++++++++++++++++++++++++++++-----------------
+ 1 files changed, 44 insertions(+), 18 deletions(-)
+
+diff --git a/fs/namei.c b/fs/namei.c
+index fe13533..1436fae 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -693,46 +693,72 @@ static inline int may_follow_link(struct path *link)
+ }
+ 
+ /**
++ * safe_hardlink_source - Check for safe hardlink conditions
++ * @inode: the source inode to hardlink from
++ *
++ * Return false if at least one of the following conditions:
++ *    - inode is not a regular file
++ *    - inode is setuid
++ *    - inode is setgid and group-exec
++ *    - access failure for read and write
++ *
++ * Otherwise returns true.
++ */
++static bool safe_hardlink_source(struct inode *inode)
++{
++	mode_t mode = inode->i_mode;
++
++	/* Special files should not get pinned to the filesystem. */
++	if (!S_ISREG(mode))
++		return false;
++
++	/* Setuid files should not get pinned to the filesystem. */
++	if (mode & S_ISUID)
++		return false;
++
++	/* Executable setgid files should not get pinned to the filesystem. */
++	if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))
++		return false;
++
++	/* Hardlinking to unreadable or unwritable sources is dangerous. */
++	if (inode_permission(inode, MAY_READ | MAY_WRITE))
++		return false;
++
++	return true;
++}
++
++/**
+  * may_linkat - Check permissions for creating a hardlink
+  * @link: the source to hardlink from
+  *
+  * Block hardlink when all of:
+  *  - sysctl_protected_hardlinks enabled
+  *  - fsuid does not match inode
+- *  - at least one of:
+- *    - inode is not a regular file
+- *    - inode is setuid
+- *    - inode is setgid and group-exec
+- *    - access failure for read and write
++ *  - hardlink source is unsafe (see safe_hardlink_source() above)
+  *  - not CAP_FOWNER
+  *
+  * Returns 0 if successful, -ve on error.
+  */
+ static int may_linkat(struct path *link)
+ {
+-	int error = 0;
+ 	const struct cred *cred;
+ 	struct inode *inode;
+-	int mode;
+ 
+ 	if (!sysctl_protected_hardlinks)
+ 		return 0;
+ 
+ 	cred = current_cred();
+ 	inode = link->dentry->d_inode;
+-	mode = inode->i_mode;
+-
+-	if (cred->fsuid != inode->i_uid &&
+-	    (!S_ISREG(mode) || (mode & S_ISUID) ||
+-	     ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) ||
+-	     (inode_permission(inode, MAY_READ | MAY_WRITE))) &&
+-	    !capable(CAP_FOWNER))
+-		error = -EPERM;
+ 
+-	if (error)
+-		audit_log_link_denied("linkat", link);
++	/* Source inode owner (or CAP_FOWNER) can hardlink all they like,
++	 * otherwise, it must be a safe source.
++	 */
++	if (cred->fsuid == inode->i_uid || safe_hardlink_source(inode) ||
++	    capable(CAP_FOWNER))
++		return 0;
+ 
+-	return error;
++	audit_log_link_denied("linkat", link);
++	return -EPERM;
+ }
+ #else
+ static inline int may_follow_link(struct path *link)
+-- 
+1.7.9.1
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions-fix.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions-fix.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions-fix.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions-fix.patch)
@@ -0,0 +1,39 @@
+From 19f621ccbef745dedad641f44f535e3bcb00f30d Mon Sep 17 00:00:00 2001
+From: Andrew Morton <akpm at linux-foundation.org>
+Date: Sat, 25 Feb 2012 12:28:43 +1100
+Subject: [PATCH 4/5] fs-hardlink-creation-restrictions-fix
+
+uninline may_linkat() and audit_log_link_denied().
+
+Cc: Kees Cook <keescook at chromium.org>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ fs/namei.c |    5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/fs/namei.c b/fs/namei.c
+index 7be190c..fe13533 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -629,8 +629,7 @@ int sysctl_protected_symlinks __read_mostly =
+ int sysctl_protected_hardlinks __read_mostly =
+ 	CONFIG_PROTECTED_HARDLINKS_SYSCTL;
+ 
+-static inline void
+-audit_log_link_denied(const char *operation, struct path *link)
++static void audit_log_link_denied(const char *operation, struct path *link)
+ {
+ 	struct audit_buffer *ab;
+ 
+@@ -709,7 +708,7 @@ static inline int may_follow_link(struct path *link)
+  *
+  * Returns 0 if successful, -ve on error.
+  */
+-static inline int may_linkat(struct path *link)
++static int may_linkat(struct path *link)
+ {
+ 	int error = 0;
+ 	const struct cred *cred;
+-- 
+1.7.9.1
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-hardlink-creation-restrictions.patch)
@@ -0,0 +1,390 @@
+From fa3abdeee4e792ed794eef7ea71e7e0073cec32d Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook at chromium.org>
+Date: Sat, 25 Feb 2012 12:28:43 +1100
+Subject: [PATCH 3/5] fs: hardlink creation restrictions
+
+On systems that have user-writable directories on the same partition as
+system files, a long-standing class of security issues is the
+hardlink-based time-of-check-time-of-use race, most commonly seen in
+world-writable directories like /tmp.  The common method of exploitation
+of this flaw is to cross privilege boundaries when following a given
+hardlink (i.e.  a root process follows a hardlink created by another
+user).  Additionally, an issue exists where users can "pin" a potentially
+vulnerable setuid/setgid file so that an administrator will not actually
+upgrade a system fully.
+
+The solution is to permit hardlinks to only be created when the user is
+already the existing file's owner, or if they already have read/write
+access to the existing file.
+
+Many Linux users are surprised when they learn they can link to files they
+have no access to, so this change appears to follow the doctrine of "least
+surprise".  Additionally, this change does not violate POSIX, which states
+"the implementation may require that the calling process has permission to
+access the existing file"[1].
+
+This change is known to break some implementations of the "at" daemon,
+though the version used by Fedora and Ubuntu has been fixed[2] for a
+while.  Otherwise, the change has been undisruptive while in use in Ubuntu
+for the last 1.5 years.
+
+This patch is based on the patch in Openwall and grsecurity.  I have added
+a sysctl to enable the protected behavior, documentation, and an audit
+notification.
+
+[1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/linkat.html
+[2] http://anonscm.debian.org/gitweb/?p=collab-maint/at.git;a=commitdiff;h=f4114656c3a6c6f6070e315ffdf940a49eda3279
+
+Signed-off-by: Kees Cook <keescook at chromium.org>
+Acked-by: Ingo Molnar <mingo at elte.hu>
+Cc: Matthew Wilcox <matthew at wil.cx>
+Cc: Alexander Viro <viro at zeniv.linux.org.uk>
+Cc: Rik van Riel <riel at redhat.com>
+Cc: Federica Teodori <federica.teodori at googlemail.com>
+Cc: Lucian Adrian Grijincu <lucian.grijincu at gmail.com>
+Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
+Cc: Eric Paris <eparis at redhat.com>
+Cc: Randy Dunlap <rdunlap at xenotime.net>
+Cc: Dan Rosenberg <drosenberg at vsecurity.com>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ Documentation/sysctl/fs.txt |   21 ++++++++
+ fs/Kconfig                  |   54 ++++++++++++++++------
+ fs/namei.c                  |  109 ++++++++++++++++++++++++++++++++-----------
+ include/linux/fs.h          |    1 +
+ kernel/sysctl.c             |   11 ++++-
+ 5 files changed, 153 insertions(+), 43 deletions(-)
+
+diff --git a/Documentation/sysctl/fs.txt b/Documentation/sysctl/fs.txt
+index 01daa80..9d29414 100644
+--- a/Documentation/sysctl/fs.txt
++++ b/Documentation/sysctl/fs.txt
+@@ -32,6 +32,7 @@ Currently, these files are in /proc/sys/fs:
+ - nr_open
+ - overflowuid
+ - overflowgid
++- protected_hardlinks
+ - protected_symlinks
+ - suid_dumpable
+ - super-max
+@@ -158,6 +159,26 @@ The default is 65534.
+ 
+ ==============================================================
+ 
++protected_hardlinks:
++
++A long-standing class of security issues is the hardlink-based
++time-of-check-time-of-use race, most commonly seen in world-writable
++directories like /tmp. The common method of exploitation of this flaw
++is to cross privilege boundaries when following a given hardlink (i.e. a
++root process follows a hardlink created by another user). Additionally,
++on systems without separated partitions, this stops unauthorized users
++from "pinning" vulnerable setuid/setgid files against being upgraded by
++the administrator, or linking to special files.
++
++When set to "0", hardlink creation behavior is unrestricted.
++
++When set to "1" hardlinks cannot be created by users if they do not
++already own the source file, or do not have read/write access to it.
++
++This protection is based on the restrictions in Openwall and grsecurity.
++
++==============================================================
++
+ protected_symlinks:
+ 
+ A long-standing class of security issues is the symlink-based
+diff --git a/fs/Kconfig b/fs/Kconfig
+index f2c46f3..d2a422e 100644
+--- a/fs/Kconfig
++++ b/fs/Kconfig
+@@ -272,27 +272,29 @@ endif # NETWORK_FILESYSTEMS
+ source "fs/nls/Kconfig"
+ source "fs/dlm/Kconfig"
+ 
+-config PROTECTED_SYMLINKS
+-	bool "Evaluate vulnerable symlink conditions"
++config PROTECTED_LINKS
++	bool "Evaluate vulnerable link conditions"
+ 	default y
+ 	help
+-	  A long-standing class of security issues is the symlink-based
++	  A long-standing class of security issues is the link-based
+ 	  time-of-check-time-of-use race, most commonly seen in
+ 	  world-writable directories like /tmp. The common method of
+ 	  exploitation of this flaw is to cross privilege boundaries
+-	  when following a given symlink (i.e. a root process follows
+-	  a malicious symlink belonging to another user).
++	  when following a given link (i.e. a root process follows
++	  a malicious symlink belonging to another user, or a hardlink
++	  created to a root-owned file).
+ 
+-	  Enabling this adds the logic to examine these dangerous symlink
+-	  conditions. Whether or not the dangerous symlink situations are
+-	  allowed is controlled by PROTECTED_SYMLINKS_ENABLED.
++	  Enabling this adds the logic to examine these dangerous link
++	  conditions. Whether or not the dangerous link situations are
++	  allowed is controlled by PROTECTED_HARDLINKS_ENABLED and
++	  PROTECTED_SYMLINKS_ENABLED.
+ 
+-config PROTECTED_SYMLINKS_ENABLED
+-	depends on PROTECTED_SYMLINKS
++config PROTECTED_SYMLINKS
++	depends on PROTECTED_LINKS
+ 	bool "Disallow symlink following in sticky world-writable dirs"
+ 	default y
+ 	help
+-	  Solve ToCToU symlink race vulnerablities by permitting symlinks
++	  Solve ToCToU symlink race vulnerabilities by permitting symlinks
+ 	  to be followed only when outside a sticky world-writable directory,
+ 	  or when the uid of the symlink and follower match, or when the
+ 	  directory and symlink owners match.
+@@ -300,10 +302,34 @@ config PROTECTED_SYMLINKS_ENABLED
+ 	  When PROC_SYSCTL is enabled, this setting can also be controlled
+ 	  via /proc/sys/kernel/protected_symlinks.
+ 
+-config PROTECTED_SYMLINKS_ENABLED_SYSCTL
+-	depends on PROTECTED_SYMLINKS
++	  See Documentation/sysctl/fs.txt for details.
++
++config PROTECTED_SYMLINKS_SYSCTL
++	depends on PROTECTED_LINKS
++	int
++	default "1" if PROTECTED_SYMLINKS
++	default "0"
++
++config PROTECTED_HARDLINKS
++	depends on PROTECTED_LINKS
++	bool "Disallow hardlink creation to non-accessible files"
++	default y
++	help
++	  Solve ToCToU hardlink race vulnerabilities by permitting hardlinks
++	  to be created only when to a regular file that is owned by the user,
++	  or is readable and writable by the user. Also blocks users from
++	  "pinning" vulnerable setuid/setgid programs from being upgraded by
++	  the administrator.
++
++	  When PROC_SYSCTL is enabled, this setting can also be controlled
++	  via /proc/sys/kernel/protected_hardlinks.
++
++	  See Documentation/sysctl/fs.txt for details.
++
++config PROTECTED_HARDLINKS_SYSCTL
++	depends on PROTECTED_LINKS
+ 	int
+-	default "1" if PROTECTED_SYMLINKS_ENABLED
++	default "1" if PROTECTED_HARDLINKS
+ 	default "0"
+ 
+ endmenu
+diff --git a/fs/namei.c b/fs/namei.c
+index 39edcf7..7be190c 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -623,16 +623,33 @@ static inline void put_link(struct nameidata *nd, struct path *link, void *cooki
+ 	path_put(link);
+ }
+ 
+-#ifdef CONFIG_PROTECTED_SYMLINKS
++#ifdef CONFIG_PROTECTED_LINKS
+ int sysctl_protected_symlinks __read_mostly =
+-	CONFIG_PROTECTED_SYMLINKS_ENABLED_SYSCTL;
++	CONFIG_PROTECTED_SYMLINKS_SYSCTL;
++int sysctl_protected_hardlinks __read_mostly =
++	CONFIG_PROTECTED_HARDLINKS_SYSCTL;
++
++static inline void
++audit_log_link_denied(const char *operation, struct path *link)
++{
++	struct audit_buffer *ab;
++
++	ab = audit_log_start(current->audit_context, GFP_KERNEL, AUDIT_AVC);
++	audit_log_format(ab, "op=%s action=denied", operation);
++	audit_log_format(ab, " pid=%d comm=", current->pid);
++	audit_log_untrustedstring(ab, current->comm);
++	audit_log_d_path(ab, " path=", link);
++	audit_log_format(ab, " dev=");
++	audit_log_untrustedstring(ab, link->dentry->d_inode->i_sb->s_id);
++	audit_log_format(ab, " ino=%lu", link->dentry->d_inode->i_ino);
++	audit_log_end(ab);
++}
+ 
+ /**
+  * may_follow_link - Check symlink following for unsafe situations
+- * @dentry: The inode/dentry of the symlink
+- * @nameidata: The path data of the symlink
++ * @link: The path of the symlink
+  *
+- * In the case of the protected_symlinks sysctl being enabled,
++ * In the case of the sysctl_protected_symlinks sysctl being enabled,
+  * CAP_DAC_OVERRIDE needs to be specifically ignored if the symlink is
+  * in a sticky world-writable directory. This is to protect privileged
+  * processes from failing races against path names that may change out
+@@ -643,19 +660,20 @@ int sysctl_protected_symlinks __read_mostly =
+  *
+  * Returns 0 if following the symlink is allowed, -ve on error.
+  */
+-static inline int
+-may_follow_link(struct dentry *dentry, struct nameidata *nameidata)
++static inline int may_follow_link(struct path *link)
+ {
+ 	int error = 0;
+ 	const struct inode *parent;
+ 	const struct inode *inode;
+ 	const struct cred *cred;
++	struct dentry *dentry;
+ 
+ 	if (!sysctl_protected_symlinks)
+ 		return 0;
+ 
+ 	/* Allowed if owner and follower match. */
+ 	cred = current_cred();
++	dentry = link->dentry;
+ 	inode = dentry->d_inode;
+ 	if (cred->fsuid == inode->i_uid)
+ 		return 0;
+@@ -669,29 +687,61 @@ may_follow_link(struct dentry *dentry, struct nameidata *nameidata)
+ 	}
+ 	spin_unlock(&dentry->d_lock);
+ 
+-#ifdef CONFIG_AUDIT
+-	if (error) {
+-		struct audit_buffer *ab;
+-
+-		ab = audit_log_start(current->audit_context,
+-				     GFP_KERNEL, AUDIT_AVC);
+-		audit_log_format(ab, "op=follow_link action=denied");
+-		audit_log_format(ab, " pid=%d comm=", current->pid);
+-		audit_log_untrustedstring(ab, current->comm);
+-		audit_log_d_path(ab, " path=", &nameidata->path);
+-		audit_log_format(ab, " name=");
+-		audit_log_untrustedstring(ab, dentry->d_name.name);
+-		audit_log_format(ab, " dev=");
+-		audit_log_untrustedstring(ab, inode->i_sb->s_id);
+-		audit_log_format(ab, " ino=%lu", inode->i_ino);
+-		audit_log_end(ab);
+-	}
+-#endif
++	if (error)
++		audit_log_link_denied("follow_link", link);
++
++	return error;
++}
++
++/**
++ * may_linkat - Check permissions for creating a hardlink
++ * @link: the source to hardlink from
++ *
++ * Block hardlink when all of:
++ *  - sysctl_protected_hardlinks enabled
++ *  - fsuid does not match inode
++ *  - at least one of:
++ *    - inode is not a regular file
++ *    - inode is setuid
++ *    - inode is setgid and group-exec
++ *    - access failure for read and write
++ *  - not CAP_FOWNER
++ *
++ * Returns 0 if successful, -ve on error.
++ */
++static inline int may_linkat(struct path *link)
++{
++	int error = 0;
++	const struct cred *cred;
++	struct inode *inode;
++	int mode;
++
++	if (!sysctl_protected_hardlinks)
++		return 0;
++
++	cred = current_cred();
++	inode = link->dentry->d_inode;
++	mode = inode->i_mode;
++
++	if (cred->fsuid != inode->i_uid &&
++	    (!S_ISREG(mode) || (mode & S_ISUID) ||
++	     ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) ||
++	     (inode_permission(inode, MAY_READ | MAY_WRITE))) &&
++	    !capable(CAP_FOWNER))
++		error = -EPERM;
++
++	if (error)
++		audit_log_link_denied("linkat", link);
++
+ 	return error;
+ }
+ #else
+-static inline int
+-may_follow_link(struct dentry *dentry, struct nameidata *nameidata)
++static inline int may_follow_link(struct path *link)
++{
++	return 0;
++}
++
++static inline int may_linkat(struct path *link)
+ {
+ 	return 0;
+ }
+@@ -720,7 +770,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p, bool sensitive)
+ 	nd_set_link(nd, NULL);
+ 
+ 	if (sensitive)
+-		error = may_follow_link(link->dentry, nd);
++		error = may_follow_link(link);
+ 	if (!error)
+ 		error = security_inode_follow_link(link->dentry, nd);
+ 	if (error) {
+@@ -3058,6 +3108,9 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
+ 	error = -EXDEV;
+ 	if (old_path.mnt != new_path.mnt)
+ 		goto out_dput;
++	error = may_linkat(&old_path);
++	if (error)
++		goto out_dput;
+ 	error = mnt_want_write(new_path.mnt);
+ 	if (error)
+ 		goto out_dput;
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 404cc89..f42a557 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -424,6 +424,7 @@ extern int sysctl_nr_open;
+ extern struct inodes_stat_t inodes_stat;
+ extern int leases_enable, lease_break_time;
+ extern int sysctl_protected_symlinks;
++extern int sysctl_protected_hardlinks;
+ 
+ struct buffer_head;
+ typedef int (get_block_t)(struct inode *inode, sector_t iblock,
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index 0624e7c..0b29d58 100644
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -1497,7 +1497,7 @@ static struct ctl_table fs_table[] = {
+ 	},
+ #endif
+ #endif
+-#ifdef CONFIG_PROTECTED_SYMLINKS
++#ifdef CONFIG_PROTECTED_LINKS
+ 	{
+ 		.procname	= "protected_symlinks",
+ 		.data		= &sysctl_protected_symlinks,
+@@ -1507,6 +1507,15 @@ static struct ctl_table fs_table[] = {
+ 		.extra1		= &zero,
+ 		.extra2		= &one,
+ 	},
++	{
++		.procname	= "protected_hardlinks",
++		.data		= &sysctl_protected_hardlinks,
++		.maxlen		= sizeof(int),
++		.mode		= 0600,
++		.proc_handler	= proc_dointvec_minmax,
++		.extra1		= &zero,
++		.extra2		= &one,
++	},
+ #endif
+ 	{
+ 		.procname	= "suid_dumpable",
+-- 
+1.7.9.1
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch)
@@ -0,0 +1,151 @@
+From d48f814bd83a3cbd95dedaf5e4dd91c05cffddc6 Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook at chromium.org>
+Date: Sat, 25 Feb 2012 12:28:43 +1100
+Subject: [PATCH 2/5] fs-symlink-restrictions-on-sticky-directories-fix-2
+
+s/sticky_//
+
+Cc: Kees Cook <keescook at chromium.org>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ Documentation/sysctl/fs.txt |    4 ++--
+ fs/Kconfig                  |   16 ++++++++--------
+ fs/namei.c                  |   10 +++++-----
+ include/linux/fs.h          |    2 +-
+ kernel/sysctl.c             |    6 +++---
+ 5 files changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/Documentation/sysctl/fs.txt b/Documentation/sysctl/fs.txt
+index 4b47cd5..01daa80 100644
+--- a/Documentation/sysctl/fs.txt
++++ b/Documentation/sysctl/fs.txt
+@@ -32,7 +32,7 @@ Currently, these files are in /proc/sys/fs:
+ - nr_open
+ - overflowuid
+ - overflowgid
+-- protected_sticky_symlinks
++- protected_symlinks
+ - suid_dumpable
+ - super-max
+ - super-nr
+@@ -158,7 +158,7 @@ The default is 65534.
+ 
+ ==============================================================
+ 
+-protected_sticky_symlinks:
++protected_symlinks:
+ 
+ A long-standing class of security issues is the symlink-based
+ time-of-check-time-of-use race, most commonly seen in world-writable
+diff --git a/fs/Kconfig b/fs/Kconfig
+index d0fdbdd..f2c46f3 100644
+--- a/fs/Kconfig
++++ b/fs/Kconfig
+@@ -272,7 +272,7 @@ endif # NETWORK_FILESYSTEMS
+ source "fs/nls/Kconfig"
+ source "fs/dlm/Kconfig"
+ 
+-config PROTECTED_STICKY_SYMLINKS
++config PROTECTED_SYMLINKS
+ 	bool "Evaluate vulnerable symlink conditions"
+ 	default y
+ 	help
+@@ -285,10 +285,10 @@ config PROTECTED_STICKY_SYMLINKS
+ 
+ 	  Enabling this adds the logic to examine these dangerous symlink
+ 	  conditions. Whether or not the dangerous symlink situations are
+-	  allowed is controlled by PROTECTED_STICKY_SYMLINKS_ENABLED.
++	  allowed is controlled by PROTECTED_SYMLINKS_ENABLED.
+ 
+-config PROTECTED_STICKY_SYMLINKS_ENABLED
+-	depends on PROTECTED_STICKY_SYMLINKS
++config PROTECTED_SYMLINKS_ENABLED
++	depends on PROTECTED_SYMLINKS
+ 	bool "Disallow symlink following in sticky world-writable dirs"
+ 	default y
+ 	help
+@@ -298,12 +298,12 @@ config PROTECTED_STICKY_SYMLINKS_ENABLED
+ 	  directory and symlink owners match.
+ 
+ 	  When PROC_SYSCTL is enabled, this setting can also be controlled
+-	  via /proc/sys/kernel/protected_sticky_symlinks.
++	  via /proc/sys/kernel/protected_symlinks.
+ 
+-config PROTECTED_STICKY_SYMLINKS_ENABLED_SYSCTL
+-	depends on PROTECTED_STICKY_SYMLINKS
++config PROTECTED_SYMLINKS_ENABLED_SYSCTL
++	depends on PROTECTED_SYMLINKS
+ 	int
+-	default "1" if PROTECTED_STICKY_SYMLINKS_ENABLED
++	default "1" if PROTECTED_SYMLINKS_ENABLED
+ 	default "0"
+ 
+ endmenu
+diff --git a/fs/namei.c b/fs/namei.c
+index 5b4c05b..39edcf7 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -623,16 +623,16 @@ static inline void put_link(struct nameidata *nd, struct path *link, void *cooki
+ 	path_put(link);
+ }
+ 
+-#ifdef CONFIG_PROTECTED_STICKY_SYMLINKS
+-int sysctl_protected_sticky_symlinks __read_mostly =
+-	CONFIG_PROTECTED_STICKY_SYMLINKS_ENABLED_SYSCTL;
++#ifdef CONFIG_PROTECTED_SYMLINKS
++int sysctl_protected_symlinks __read_mostly =
++	CONFIG_PROTECTED_SYMLINKS_ENABLED_SYSCTL;
+ 
+ /**
+  * may_follow_link - Check symlink following for unsafe situations
+  * @dentry: The inode/dentry of the symlink
+  * @nameidata: The path data of the symlink
+  *
+- * In the case of the protected_sticky_symlinks sysctl being enabled,
++ * In the case of the protected_symlinks sysctl being enabled,
+  * CAP_DAC_OVERRIDE needs to be specifically ignored if the symlink is
+  * in a sticky world-writable directory. This is to protect privileged
+  * processes from failing races against path names that may change out
+@@ -651,7 +651,7 @@ may_follow_link(struct dentry *dentry, struct nameidata *nameidata)
+ 	const struct inode *inode;
+ 	const struct cred *cred;
+ 
+-	if (!sysctl_protected_sticky_symlinks)
++	if (!sysctl_protected_symlinks)
+ 		return 0;
+ 
+ 	/* Allowed if owner and follower match. */
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index aba8db0..404cc89 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -423,7 +423,7 @@ extern unsigned long get_max_files(void);
+ extern int sysctl_nr_open;
+ extern struct inodes_stat_t inodes_stat;
+ extern int leases_enable, lease_break_time;
+-extern int sysctl_protected_sticky_symlinks;
++extern int sysctl_protected_symlinks;
+ 
+ struct buffer_head;
+ typedef int (get_block_t)(struct inode *inode, sector_t iblock,
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index c469b88..0624e7c 100644
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -1497,10 +1497,10 @@ static struct ctl_table fs_table[] = {
+ 	},
+ #endif
+ #endif
+-#ifdef CONFIG_PROTECTED_STICKY_SYMLINKS
++#ifdef CONFIG_PROTECTED_SYMLINKS
+ 	{
+-		.procname	= "protected_sticky_symlinks",
+-		.data		= &sysctl_protected_sticky_symlinks,
++		.procname	= "protected_symlinks",
++		.data		= &sysctl_protected_symlinks,
+ 		.maxlen		= sizeof(int),
+ 		.mode		= 0600,
+ 		.proc_handler	= proc_dointvec_minmax,
+-- 
+1.7.9.1
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/fs-symlink-restrictions-on-sticky-directories.patch)
@@ -0,0 +1,329 @@
+From af16d0017a7de1f00af3966b5013bebfce8a81b4 Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook at chromium.org>
+Date: Sat, 25 Feb 2012 12:28:42 +1100
+Subject: [PATCH 1/5] fs: symlink restrictions on sticky directories
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A longstanding class of security issues is the symlink-based
+time-of-check-time-of-use race, most commonly seen in world-writable
+directories like /tmp.  The common method of exploitation of this flaw is
+to cross privilege boundaries when following a given symlink (i.e.  a root
+process follows a symlink belonging to another user).  For a likely
+incomplete list of hundreds of examples across the years, please see:
+http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
+
+The solution is to permit symlinks to only be followed when outside a
+sticky world-writable directory, or when the uid of the symlink and
+follower match, or when the directory owner matches the symlink's owner.
+
+Some pointers to the history of earlier discussion that I could find:
+
+ 1996 Aug, Zygo Blaxell
+  http://marc.info/?l=bugtraq&m=87602167419830&w=2
+ 1996 Oct, Andrew Tridgell
+  http://lkml.indiana.edu/hypermail/linux/kernel/9610.2/0086.html
+ 1997 Dec, Albert D Cahalan
+  http://lkml.org/lkml/1997/12/16/4
+ 2005 Feb, Lorenzo Hernández García-Hierro
+  http://lkml.indiana.edu/hypermail/linux/kernel/0502.0/1896.html
+ 2010 May, Kees Cook
+  https://lkml.org/lkml/2010/5/30/144
+
+Past objections and rebuttals could be summarized as:
+
+ - Violates POSIX.
+   - POSIX didn't consider this situation and it's not useful to follow
+     a broken specification at the cost of security.
+ - Might break unknown applications that use this feature.
+   - Applications that break because of the change are easy to spot and
+     fix. Applications that are vulnerable to symlink ToCToU by not having
+     the change aren't. Additionally, no applications have yet been found
+     that rely on this behavior.
+ - Applications should just use mkstemp() or O_CREATE|O_EXCL.
+   - True, but applications are not perfect, and new software is written
+     all the time that makes these mistakes; blocking this flaw at the
+     kernel is a single solution to the entire class of vulnerability.
+ - This should live in the core VFS.
+   - This should live in an LSM. (https://lkml.org/lkml/2010/5/31/135)
+ - This should live in an LSM.
+   - This should live in the core VFS. (https://lkml.org/lkml/2010/8/2/188)
+
+This patch is based on the patch in Openwall and grsecurity, along with
+suggestions from Al Viro.  I have added a sysctl to enable the protected
+behavior, documentation, and an audit notification.
+
+[akpm at linux-foundation.org: move sysctl_protected_sticky_symlinks declaration into .h]
+Signed-off-by: Kees Cook <keescook at chromium.org>
+Reviewed-by: Ingo Molnar <mingo at elte.hu>
+Cc: Matthew Wilcox <matthew at wil.cx>
+Cc: Alexander Viro <viro at zeniv.linux.org.uk>
+Cc: Rik van Riel <riel at redhat.com>
+Cc: Federica Teodori <federica.teodori at googlemail.com>
+Cc: Lucian Adrian Grijincu <lucian.grijincu at gmail.com>
+Cc: Ingo Molnar <mingo at elte.hu>
+Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
+Cc: Eric Paris <eparis at redhat.com>
+Cc: Randy Dunlap <rdunlap at xenotime.net>
+Cc: Dan Rosenberg <drosenberg at vsecurity.com>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ Documentation/sysctl/fs.txt |   21 ++++++++++
+ fs/Kconfig                  |   34 ++++++++++++++++
+ fs/namei.c                  |   91 ++++++++++++++++++++++++++++++++++++++++---
+ include/linux/fs.h          |    1 +
+ kernel/sysctl.c             |   11 +++++
+ 5 files changed, 152 insertions(+), 6 deletions(-)
+
+diff --git a/Documentation/sysctl/fs.txt b/Documentation/sysctl/fs.txt
+index 88fd7f5..4b47cd5 100644
+--- a/Documentation/sysctl/fs.txt
++++ b/Documentation/sysctl/fs.txt
+@@ -32,6 +32,7 @@ Currently, these files are in /proc/sys/fs:
+ - nr_open
+ - overflowuid
+ - overflowgid
++- protected_sticky_symlinks
+ - suid_dumpable
+ - super-max
+ - super-nr
+@@ -157,6 +158,26 @@ The default is 65534.
+ 
+ ==============================================================
+ 
++protected_sticky_symlinks:
++
++A long-standing class of security issues is the symlink-based
++time-of-check-time-of-use race, most commonly seen in world-writable
++directories like /tmp. The common method of exploitation of this flaw
++is to cross privilege boundaries when following a given symlink (i.e. a
++root process follows a symlink belonging to another user). For a likely
++incomplete list of hundreds of examples across the years, please see:
++http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
++
++When set to "0", symlink following behavior is unrestricted.
++
++When set to "1" symlinks are permitted to be followed only when outside
++a sticky world-writable directory, or when the uid of the symlink and
++follower match, or when the directory owner matches the symlink's owner.
++
++This protection is based on the restrictions in Openwall and grsecurity.
++
++==============================================================
++
+ suid_dumpable:
+ 
+ This value can be used to query and set the core dump mode for setuid
+diff --git a/fs/Kconfig b/fs/Kconfig
+index 1497ddf..d0fdbdd 100644
+--- a/fs/Kconfig
++++ b/fs/Kconfig
+@@ -272,4 +272,38 @@ endif # NETWORK_FILESYSTEMS
+ source "fs/nls/Kconfig"
+ source "fs/dlm/Kconfig"
+ 
++config PROTECTED_STICKY_SYMLINKS
++	bool "Evaluate vulnerable symlink conditions"
++	default y
++	help
++	  A long-standing class of security issues is the symlink-based
++	  time-of-check-time-of-use race, most commonly seen in
++	  world-writable directories like /tmp. The common method of
++	  exploitation of this flaw is to cross privilege boundaries
++	  when following a given symlink (i.e. a root process follows
++	  a malicious symlink belonging to another user).
++
++	  Enabling this adds the logic to examine these dangerous symlink
++	  conditions. Whether or not the dangerous symlink situations are
++	  allowed is controlled by PROTECTED_STICKY_SYMLINKS_ENABLED.
++
++config PROTECTED_STICKY_SYMLINKS_ENABLED
++	depends on PROTECTED_STICKY_SYMLINKS
++	bool "Disallow symlink following in sticky world-writable dirs"
++	default y
++	help
++	  Solve ToCToU symlink race vulnerablities by permitting symlinks
++	  to be followed only when outside a sticky world-writable directory,
++	  or when the uid of the symlink and follower match, or when the
++	  directory and symlink owners match.
++
++	  When PROC_SYSCTL is enabled, this setting can also be controlled
++	  via /proc/sys/kernel/protected_sticky_symlinks.
++
++config PROTECTED_STICKY_SYMLINKS_ENABLED_SYSCTL
++	depends on PROTECTED_STICKY_SYMLINKS
++	int
++	default "1" if PROTECTED_STICKY_SYMLINKS_ENABLED
++	default "0"
++
+ endmenu
+diff --git a/fs/namei.c b/fs/namei.c
+index 5d1fab5..5b4c05b 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -623,10 +623,84 @@ static inline void put_link(struct nameidata *nd, struct path *link, void *cooki
+ 	path_put(link);
+ }
+ 
++#ifdef CONFIG_PROTECTED_STICKY_SYMLINKS
++int sysctl_protected_sticky_symlinks __read_mostly =
++	CONFIG_PROTECTED_STICKY_SYMLINKS_ENABLED_SYSCTL;
++
++/**
++ * may_follow_link - Check symlink following for unsafe situations
++ * @dentry: The inode/dentry of the symlink
++ * @nameidata: The path data of the symlink
++ *
++ * In the case of the protected_sticky_symlinks sysctl being enabled,
++ * CAP_DAC_OVERRIDE needs to be specifically ignored if the symlink is
++ * in a sticky world-writable directory. This is to protect privileged
++ * processes from failing races against path names that may change out
++ * from under them by way of other users creating malicious symlinks.
++ * It will permit symlinks to be followed only when outside a sticky
++ * world-writable directory, or when the uid of the symlink and follower
++ * match, or when the directory owner matches the symlink's owner.
++ *
++ * Returns 0 if following the symlink is allowed, -ve on error.
++ */
++static inline int
++may_follow_link(struct dentry *dentry, struct nameidata *nameidata)
++{
++	int error = 0;
++	const struct inode *parent;
++	const struct inode *inode;
++	const struct cred *cred;
++
++	if (!sysctl_protected_sticky_symlinks)
++		return 0;
++
++	/* Allowed if owner and follower match. */
++	cred = current_cred();
++	inode = dentry->d_inode;
++	if (cred->fsuid == inode->i_uid)
++		return 0;
++
++	/* Check parent directory mode and owner. */
++	spin_lock(&dentry->d_lock);
++	parent = dentry->d_parent->d_inode;
++	if ((parent->i_mode & (S_ISVTX|S_IWOTH)) == (S_ISVTX|S_IWOTH) &&
++	    parent->i_uid != inode->i_uid) {
++		error = -EACCES;
++	}
++	spin_unlock(&dentry->d_lock);
++
++#ifdef CONFIG_AUDIT
++	if (error) {
++		struct audit_buffer *ab;
++
++		ab = audit_log_start(current->audit_context,
++				     GFP_KERNEL, AUDIT_AVC);
++		audit_log_format(ab, "op=follow_link action=denied");
++		audit_log_format(ab, " pid=%d comm=", current->pid);
++		audit_log_untrustedstring(ab, current->comm);
++		audit_log_d_path(ab, " path=", &nameidata->path);
++		audit_log_format(ab, " name=");
++		audit_log_untrustedstring(ab, dentry->d_name.name);
++		audit_log_format(ab, " dev=");
++		audit_log_untrustedstring(ab, inode->i_sb->s_id);
++		audit_log_format(ab, " ino=%lu", inode->i_ino);
++		audit_log_end(ab);
++	}
++#endif
++	return error;
++}
++#else
++static inline int
++may_follow_link(struct dentry *dentry, struct nameidata *nameidata)
++{
++	return 0;
++}
++#endif
++
+ static __always_inline int
+-follow_link(struct path *link, struct nameidata *nd, void **p)
++follow_link(struct path *link, struct nameidata *nd, void **p, bool sensitive)
+ {
+-	int error;
++	int error = 0;
+ 	struct dentry *dentry = link->dentry;
+ 
+ 	BUG_ON(nd->flags & LOOKUP_RCU);
+@@ -645,7 +719,10 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
+ 	touch_atime(link->mnt, dentry);
+ 	nd_set_link(nd, NULL);
+ 
+-	error = security_inode_follow_link(link->dentry, nd);
++	if (sensitive)
++		error = may_follow_link(link->dentry, nd);
++	if (!error)
++		error = security_inode_follow_link(link->dentry, nd);
+ 	if (error) {
+ 		*p = ERR_PTR(error); /* no ->put_link(), please */
+ 		path_put(&nd->path);
+@@ -1342,7 +1419,7 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd)
+ 		struct path link = *path;
+ 		void *cookie;
+ 
+-		res = follow_link(&link, nd, &cookie);
++		res = follow_link(&link, nd, &cookie, false);
+ 		if (!res)
+ 			res = walk_component(nd, path, &nd->last,
+ 					     nd->last_type, LOOKUP_FOLLOW);
+@@ -1615,7 +1692,8 @@ static int path_lookupat(int dfd, const char *name,
+ 			void *cookie;
+ 			struct path link = path;
+ 			nd->flags |= LOOKUP_PARENT;
+-			err = follow_link(&link, nd, &cookie);
++
++			err = follow_link(&link, nd, &cookie, true);
+ 			if (!err)
+ 				err = lookup_last(nd, &path);
+ 			put_link(nd, &link, cookie);
+@@ -2327,7 +2405,8 @@ static struct file *path_openat(int dfd, const char *pathname,
+ 		}
+ 		nd->flags |= LOOKUP_PARENT;
+ 		nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
+-		error = follow_link(&link, nd, &cookie);
++
++		error = follow_link(&link, nd, &cookie, true);
+ 		if (unlikely(error))
+ 			filp = ERR_PTR(error);
+ 		else
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 9808b21..aba8db0 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -423,6 +423,7 @@ extern unsigned long get_max_files(void);
+ extern int sysctl_nr_open;
+ extern struct inodes_stat_t inodes_stat;
+ extern int leases_enable, lease_break_time;
++extern int sysctl_protected_sticky_symlinks;
+ 
+ struct buffer_head;
+ typedef int (get_block_t)(struct inode *inode, sector_t iblock,
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index 62538ee..c469b88 100644
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -1497,6 +1497,17 @@ static struct ctl_table fs_table[] = {
+ 	},
+ #endif
+ #endif
++#ifdef CONFIG_PROTECTED_STICKY_SYMLINKS
++	{
++		.procname	= "protected_sticky_symlinks",
++		.data		= &sysctl_protected_sticky_symlinks,
++		.maxlen		= sizeof(int),
++		.mode		= 0600,
++		.proc_handler	= proc_dointvec_minmax,
++		.extra1		= &zero,
++		.extra2		= &one,
++	},
++#endif
+ 	{
+ 		.procname	= "suid_dumpable",
+ 		.data		= &suid_dumpable,
+-- 
+1.7.9.1
+

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/arm-enable-interrupts-in-signal-code.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/arm-enable-interrupts-in-signal-code.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/arm-enable-interrupts-in-signal-code.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -11,7 +11,7 @@
 ===================================================================
 --- linux-3.2.orig/arch/arm/kernel/signal.c
 +++ linux-3.2/arch/arm/kernel/signal.c
-@@ -673,6 +673,9 @@ static void do_signal(struct pt_regs *re
+@@ -672,6 +672,9 @@ static void do_signal(struct pt_regs *re
  	if (!user_mode(regs))
  		return;
  

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/check-series (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/check-series)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/check-series	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/check-series)
@@ -0,0 +1,17 @@
+#! /bin/sh
+
+debian_series="$(mktemp)"
+rt_series="$(mktemp)"
+
+trap 'rm "$debian_series" "$rt_series"' INT QUIT EXIT
+
+# Pick all featureset=rt patches
+grep "featureset=rt$" debian/patches/series/base-extra > "$debian_series"
+
+# Remove comments and empty lines. Drop localversion patch as uname version
+# shouldn't be touched. Reformat to match series format.
+sed -r -e 's/ *#.*//; /^$/d; /^localversion.patch$/d; s,.*,+ features/all/rt/& featureset=rt,' "debian/patches/features/all/rt/series" > "$rt_series"
+
+# removed lines are OK if the rt patch contains fixes that are applied on
+# featureset=none kernels, too.
+diff -u --label "debian/patches/features/all/rt/series" --label "debian/patches/series/base-extra" "$rt_series" "$debian_series"

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-lock-rt-tweak.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -11,7 +11,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -2595,7 +2595,7 @@ extern int _cond_resched(void);
+@@ -2599,7 +2599,7 @@ extern int _cond_resched(void);
  
  extern int __cond_resched_lock(spinlock_t *lock);
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-softirq-rt.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-softirq-rt.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/cond-resched-softirq-rt.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -12,7 +12,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -2598,12 +2598,16 @@ extern int __cond_resched_lock(spinlock_
+@@ -2602,12 +2602,16 @@ extern int __cond_resched_lock(spinlock_
  	__cond_resched_lock(lock);				\
  })
  

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch)
@@ -0,0 +1,115 @@
+Subject: cpu: Make hotplug.lock a "sleeping" spinlock on RT
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Fri, 02 Mar 2012 10:36:57 -0500
+
+Tasks can block on hotplug.lock in pin_current_cpu(), but their state
+might be != RUNNING. So the mutex wakeup will set the state
+unconditionally to RUNNING. That might cause spurious unexpected
+wakeups. We could provide a state preserving mutex_lock() function,
+but this is semantically backwards. So instead we convert the
+hotplug.lock() to a spinlock for RT, which has the state preserving
+semantics already.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Carsten Emde <C.Emde at osadl.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Peter Zijlstra <peterz at infradead.org>
+Cc: Clark Williams <clark.williams at gmail.com>
+Cc: stable-rt at vger.kernel.org
+Link: http://lkml.kernel.org/r/1330702617.25686.265.camel@gandalf.stny.rr.com
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+diff --git a/kernel/cpu.c b/kernel/cpu.c
+index fa40834..c25b5ff 100644
+--- a/kernel/cpu.c
++++ b/kernel/cpu.c
+@@ -46,7 +46,12 @@ static int cpu_hotplug_disabled;
+ 
+ static struct {
+ 	struct task_struct *active_writer;
++#ifdef CONFIG_PREEMPT_RT_FULL
++	/* Makes the lock keep the task's state */
++	spinlock_t lock;
++#else
+ 	struct mutex lock; /* Synchronizes accesses to refcount, */
++#endif
+ 	/*
+ 	 * Also blocks the new readers during
+ 	 * an ongoing cpu hotplug operation.
+@@ -58,6 +63,14 @@ static struct {
+ 	.refcount = 0,
+ };
+ 
++#ifdef CONFIG_PREEMPT_RT_FULL
++# define hotplug_lock() spin_lock(&cpu_hotplug.lock)
++# define hotplug_unlock() spin_unlock(&cpu_hotplug.lock)
++#else
++# define hotplug_lock() mutex_lock(&cpu_hotplug.lock)
++# define hotplug_lock() mutex_unlock(&cpu_hotplug.lock)
++#endif
++
+ struct hotplug_pcp {
+ 	struct task_struct *unplug;
+ 	int refcount;
+@@ -87,8 +100,8 @@ retry:
+ 		return;
+ 	}
+ 	preempt_enable();
+-	mutex_lock(&cpu_hotplug.lock);
+-	mutex_unlock(&cpu_hotplug.lock);
++	hotplug_lock();
++	hotplug_unlock();
+ 	preempt_disable();
+ 	goto retry;
+ }
+@@ -161,9 +174,9 @@ void get_online_cpus(void)
+ 	might_sleep();
+ 	if (cpu_hotplug.active_writer == current)
+ 		return;
+-	mutex_lock(&cpu_hotplug.lock);
++	hotplug_lock();
+ 	cpu_hotplug.refcount++;
+-	mutex_unlock(&cpu_hotplug.lock);
++	hotplug_unlock();
+ 
+ }
+ EXPORT_SYMBOL_GPL(get_online_cpus);
+@@ -172,10 +185,10 @@ void put_online_cpus(void)
+ {
+ 	if (cpu_hotplug.active_writer == current)
+ 		return;
+-	mutex_lock(&cpu_hotplug.lock);
++	hotplug_lock();
+ 	if (!--cpu_hotplug.refcount && unlikely(cpu_hotplug.active_writer))
+ 		wake_up_process(cpu_hotplug.active_writer);
+-	mutex_unlock(&cpu_hotplug.lock);
++	hotplug_unlock();
+ 
+ }
+ EXPORT_SYMBOL_GPL(put_online_cpus);
+@@ -207,11 +220,11 @@ static void cpu_hotplug_begin(void)
+ 	cpu_hotplug.active_writer = current;
+ 
+ 	for (;;) {
+-		mutex_lock(&cpu_hotplug.lock);
++		hotplug_lock();
+ 		if (likely(!cpu_hotplug.refcount))
+ 			break;
+ 		__set_current_state(TASK_UNINTERRUPTIBLE);
+-		mutex_unlock(&cpu_hotplug.lock);
++		hotplug_unlock();
+ 		schedule();
+ 	}
+ }
+@@ -219,7 +232,7 @@ static void cpu_hotplug_begin(void)
+ static void cpu_hotplug_done(void)
+ {
+ 	cpu_hotplug.active_writer = NULL;
+-	mutex_unlock(&cpu_hotplug.lock);
++	hotplug_unlock();
+ }
+ 
+ #else /* #if CONFIG_HOTPLUG_CPU */
+
+
+
+

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/epoll-use-get-cpu-light.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -11,7 +11,7 @@
 ===================================================================
 --- linux-3.2.orig/fs/eventpoll.c
 +++ linux-3.2/fs/eventpoll.c
-@@ -438,12 +438,12 @@ static int ep_poll_wakeup_proc(void *pri
+@@ -464,12 +464,12 @@ static int ep_poll_wakeup_proc(void *pri
   */
  static void ep_poll_safewake(wait_queue_head_t *wq)
  {
@@ -25,4 +25,4 @@
 +	put_cpu_light();
  }
  
- /*
+ static void ep_remove_wait_queue(struct eppoll_entry *pwq)

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/filemap-fix-up.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/filemap-fix-up.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/filemap-fix-up.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -13,7 +13,7 @@
 ===================================================================
 --- linux-3.2.orig/mm/filemap.c
 +++ linux-3.2/mm/filemap.c
-@@ -2058,7 +2058,7 @@ size_t iov_iter_copy_from_user_atomic(st
+@@ -2044,7 +2044,7 @@ size_t iov_iter_copy_from_user_atomic(st
  	char *kaddr;
  	size_t copied;
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -18,10 +18,14 @@
 Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
 Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
 
-Index: linux-rt.git/arch/x86/kernel/traps.c
+---
+ arch/x86/kernel/traps.c |   32 +++++++++++++++++++++++---------
+ 1 file changed, 23 insertions(+), 9 deletions(-)
+
+Index: linux-3.2/arch/x86/kernel/traps.c
 ===================================================================
---- linux-rt.git.orig/arch/x86/kernel/traps.c
-+++ linux-rt.git/arch/x86/kernel/traps.c
+--- linux-3.2.orig/arch/x86/kernel/traps.c
++++ linux-3.2/arch/x86/kernel/traps.c
 @@ -87,9 +87,21 @@ static inline void conditional_sti(struc
  		local_irq_enable();
  }

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-dentry-use-seqlock.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-dentry-use-seqlock.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-dentry-use-seqlock.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-dentry-use-seqlock.patch)
@@ -0,0 +1,3033 @@
+Subject: fs: dentry use seqlock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Mon, 27 Feb 2012 18:08:46 +0100
+
+Replace the open coded seqlock with a real seqlock, so RT can handle
+it.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+
+---
+ arch/powerpc/platforms/cell/spufs/inode.c |    6 
+ drivers/infiniband/hw/ipath/ipath_fs.c    |    6 
+ drivers/infiniband/hw/qib/qib_fs.c        |    6 
+ drivers/usb/core/inode.c                  |   12 -
+ fs/9p/vfs_dir.c                           |    4 
+ fs/afs/dir.c                              |    4 
+ fs/autofs4/autofs_i.h                     |   24 +-
+ fs/autofs4/expire.c                       |   44 ++---
+ fs/autofs4/root.c                         |   38 ++--
+ fs/btrfs/export.c                         |    4 
+ fs/btrfs/inode.c                          |    4 
+ fs/ceph/caps.c                            |    8 
+ fs/ceph/debugfs.c                         |    8 
+ fs/ceph/dir.c                             |   30 +--
+ fs/ceph/export.c                          |    4 
+ fs/ceph/inode.c                           |   20 +-
+ fs/ceph/mds_client.c                      |   18 +-
+ fs/cifs/dir.c                             |    6 
+ fs/coda/cache.c                           |    4 
+ fs/configfs/configfs_internal.h           |    4 
+ fs/configfs/inode.c                       |    6 
+ fs/dcache.c                               |  253 ++++++++++++++----------------
+ fs/dcookies.c                             |    8 
+ fs/exportfs/expfs.c                       |   12 -
+ fs/fat/inode.c                            |    4 
+ fs/fat/namei_vfat.c                       |    4 
+ fs/fs-writeback.c                         |    4 
+ fs/fuse/inode.c                           |    4 
+ fs/gfs2/export.c                          |    4 
+ fs/isofs/export.c                         |    4 
+ fs/libfs.c                                |   36 ++--
+ fs/namei.c                                |   42 ++--
+ fs/namespace.c                            |    8 
+ fs/ncpfs/dir.c                            |    6 
+ fs/ncpfs/ncplib_kernel.h                  |    8 
+ fs/nfs/dir.c                              |    6 
+ fs/nfs/getroot.c                          |   12 -
+ fs/nfs/namespace.c                        |   16 -
+ fs/nfs/unlink.c                           |   20 +-
+ fs/nilfs2/namei.c                         |    4 
+ fs/notify/fsnotify.c                      |    8 
+ fs/notify/vfsmount_mark.c                 |   24 +-
+ fs/ocfs2/dcache.c                         |    6 
+ fs/ocfs2/export.c                         |    4 
+ fs/reiserfs/inode.c                       |    4 
+ fs/udf/namei.c                            |    4 
+ fs/xfs/xfs_export.c                       |    8 
+ include/linux/dcache.h                    |   15 -
+ include/linux/fs.h                        |    4 
+ include/linux/fsnotify_backend.h          |    6 
+ kernel/cgroup.c                           |   22 +-
+ net/sunrpc/rpc_pipe.c                     |    6 
+ security/selinux/selinuxfs.c              |   14 -
+ 53 files changed, 418 insertions(+), 422 deletions(-)
+
+Index: linux-3.2/arch/powerpc/platforms/cell/spufs/inode.c
+===================================================================
+--- linux-3.2.orig/arch/powerpc/platforms/cell/spufs/inode.c
++++ linux-3.2/arch/powerpc/platforms/cell/spufs/inode.c
+@@ -165,18 +165,18 @@ static void spufs_prune_dir(struct dentr
+ 
+ 	mutex_lock(&dir->d_inode->i_mutex);
+ 	list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_u.d_child) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (!(d_unhashed(dentry)) && dentry->d_inode) {
+ 			dget_dlock(dentry);
+ 			__d_drop(dentry);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			simple_unlink(dir->d_inode, dentry);
+ 			/* XXX: what was dcache_lock protecting here? Other
+ 			 * filesystems (IB, configfs) release dcache_lock
+ 			 * before unlink */
+ 			dput(dentry);
+ 		} else {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 		}
+ 	}
+ 	shrink_dcache_parent(dir);
+Index: linux-3.2/drivers/infiniband/hw/ipath/ipath_fs.c
+===================================================================
+--- linux-3.2.orig/drivers/infiniband/hw/ipath/ipath_fs.c
++++ linux-3.2/drivers/infiniband/hw/ipath/ipath_fs.c
+@@ -277,14 +277,14 @@ static int remove_file(struct dentry *pa
+ 		goto bail;
+ 	}
+ 
+-	spin_lock(&tmp->d_lock);
++	seq_spin_lock(&tmp->d_lock);
+ 	if (!(d_unhashed(tmp) && tmp->d_inode)) {
+ 		dget_dlock(tmp);
+ 		__d_drop(tmp);
+-		spin_unlock(&tmp->d_lock);
++		seq_spin_unlock(&tmp->d_lock);
+ 		simple_unlink(parent->d_inode, tmp);
+ 	} else
+-		spin_unlock(&tmp->d_lock);
++		seq_spin_unlock(&tmp->d_lock);
+ 
+ 	ret = 0;
+ bail:
+Index: linux-3.2/drivers/infiniband/hw/qib/qib_fs.c
+===================================================================
+--- linux-3.2.orig/drivers/infiniband/hw/qib/qib_fs.c
++++ linux-3.2/drivers/infiniband/hw/qib/qib_fs.c
+@@ -453,14 +453,14 @@ static int remove_file(struct dentry *pa
+ 		goto bail;
+ 	}
+ 
+-	spin_lock(&tmp->d_lock);
++	seq_spin_lock(&tmp->d_lock);
+ 	if (!(d_unhashed(tmp) && tmp->d_inode)) {
+ 		dget_dlock(tmp);
+ 		__d_drop(tmp);
+-		spin_unlock(&tmp->d_lock);
++		seq_spin_unlock(&tmp->d_lock);
+ 		simple_unlink(parent->d_inode, tmp);
+ 	} else {
+-		spin_unlock(&tmp->d_lock);
++		seq_spin_unlock(&tmp->d_lock);
+ 	}
+ 
+ 	ret = 0;
+Index: linux-3.2/drivers/usb/core/inode.c
+===================================================================
+--- linux-3.2.orig/drivers/usb/core/inode.c
++++ linux-3.2/drivers/usb/core/inode.c
+@@ -343,19 +343,19 @@ static int usbfs_empty (struct dentry *d
+ {
+ 	struct list_head *list;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	list_for_each(list, &dentry->d_subdirs) {
+ 		struct dentry *de = list_entry(list, struct dentry, d_u.d_child);
+ 
+-		spin_lock_nested(&de->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&de->d_lock, DENTRY_D_LOCK_NESTED);
+ 		if (usbfs_positive(de)) {
+-			spin_unlock(&de->d_lock);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&de->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			return 0;
+ 		}
+-		spin_unlock(&de->d_lock);
++		seq_spin_unlock(&de->d_lock);
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return 1;
+ }
+ 
+Index: linux-3.2/fs/9p/vfs_dir.c
+===================================================================
+--- linux-3.2.orig/fs/9p/vfs_dir.c
++++ linux-3.2/fs/9p/vfs_dir.c
+@@ -107,7 +107,7 @@ static int v9fs_alloc_rdir_buf(struct fi
+ 			err = -ENOMEM;
+ 			goto exit;
+ 		}
+-		spin_lock(&filp->f_dentry->d_lock);
++		seq_spin_lock(&filp->f_dentry->d_lock);
+ 		if (!fid->rdir) {
+ 			rdir->buf = (uint8_t *)rdir + sizeof(struct p9_rdir);
+ 			mutex_init(&rdir->mutex);
+@@ -115,7 +115,7 @@ static int v9fs_alloc_rdir_buf(struct fi
+ 			fid->rdir = (void *) rdir;
+ 			rdir = NULL;
+ 		}
+-		spin_unlock(&filp->f_dentry->d_lock);
++		seq_spin_unlock(&filp->f_dentry->d_lock);
+ 		kfree(rdir);
+ 	}
+ exit:
+Index: linux-3.2/fs/afs/dir.c
+===================================================================
+--- linux-3.2.orig/fs/afs/dir.c
++++ linux-3.2/fs/afs/dir.c
+@@ -705,9 +705,9 @@ out_skip:
+ 
+ 	/* the dirent, if it exists, now points to a different vnode */
+ not_found:
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	dentry->d_flags |= DCACHE_NFSFS_RENAMED;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ out_bad:
+ 	if (dentry->d_inode) {
+Index: linux-3.2/fs/autofs4/autofs_i.h
+===================================================================
+--- linux-3.2.orig/fs/autofs4/autofs_i.h
++++ linux-3.2/fs/autofs4/autofs_i.h
+@@ -197,9 +197,9 @@ static inline void __managed_dentry_set_
+ 
+ static inline void managed_dentry_set_automount(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__managed_dentry_set_automount(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ static inline void __managed_dentry_clear_automount(struct dentry *dentry)
+@@ -209,9 +209,9 @@ static inline void __managed_dentry_clea
+ 
+ static inline void managed_dentry_clear_automount(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__managed_dentry_clear_automount(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ static inline void __managed_dentry_set_transit(struct dentry *dentry)
+@@ -221,9 +221,9 @@ static inline void __managed_dentry_set_
+ 
+ static inline void managed_dentry_set_transit(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__managed_dentry_set_transit(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ static inline void __managed_dentry_clear_transit(struct dentry *dentry)
+@@ -233,9 +233,9 @@ static inline void __managed_dentry_clea
+ 
+ static inline void managed_dentry_clear_transit(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__managed_dentry_clear_transit(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ static inline void __managed_dentry_set_managed(struct dentry *dentry)
+@@ -245,9 +245,9 @@ static inline void __managed_dentry_set_
+ 
+ static inline void managed_dentry_set_managed(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__managed_dentry_set_managed(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ static inline void __managed_dentry_clear_managed(struct dentry *dentry)
+@@ -257,9 +257,9 @@ static inline void __managed_dentry_clea
+ 
+ static inline void managed_dentry_clear_managed(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__managed_dentry_clear_managed(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /* Initializing function */
+Index: linux-3.2/fs/autofs4/expire.c
+===================================================================
+--- linux-3.2.orig/fs/autofs4/expire.c
++++ linux-3.2/fs/autofs4/expire.c
+@@ -99,7 +99,7 @@ static struct dentry *get_next_positive_
+ 	spin_lock(&sbi->lookup_lock);
+ 
+ 	if (prev == NULL) {
+-		spin_lock(&root->d_lock);
++		seq_spin_lock(&root->d_lock);
+ 		prev = dget_dlock(root);
+ 		next = prev->d_subdirs.next;
+ 		p = prev;
+@@ -107,12 +107,12 @@ static struct dentry *get_next_positive_
+ 	}
+ 
+ 	p = prev;
+-	spin_lock(&p->d_lock);
++	seq_spin_lock(&p->d_lock);
+ again:
+ 	next = p->d_u.d_child.next;
+ start:
+ 	if (next == &root->d_subdirs) {
+-		spin_unlock(&p->d_lock);
++		seq_spin_unlock(&p->d_lock);
+ 		spin_unlock(&sbi->lookup_lock);
+ 		dput(prev);
+ 		return NULL;
+@@ -120,16 +120,16 @@ start:
+ 
+ 	q = list_entry(next, struct dentry, d_u.d_child);
+ 
+-	spin_lock_nested(&q->d_lock, DENTRY_D_LOCK_NESTED);
++	seq_spin_lock_nested(&q->d_lock, DENTRY_D_LOCK_NESTED);
+ 	/* Negative dentry - try next */
+ 	if (!simple_positive(q)) {
+-		spin_unlock(&p->d_lock);
++		seq_spin_unlock(&p->d_lock);
+ 		p = q;
+ 		goto again;
+ 	}
+ 	dget_dlock(q);
+-	spin_unlock(&q->d_lock);
+-	spin_unlock(&p->d_lock);
++	seq_spin_unlock(&q->d_lock);
++	seq_spin_unlock(&p->d_lock);
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+ 	dput(prev);
+@@ -153,7 +153,7 @@ static struct dentry *get_next_positive_
+ 	spin_lock(&sbi->lookup_lock);
+ relock:
+ 	p = prev;
+-	spin_lock(&p->d_lock);
++	seq_spin_lock(&p->d_lock);
+ again:
+ 	next = p->d_subdirs.next;
+ 	if (next == &p->d_subdirs) {
+@@ -161,19 +161,19 @@ again:
+ 			struct dentry *parent;
+ 
+ 			if (p == root) {
+-				spin_unlock(&p->d_lock);
++				seq_spin_unlock(&p->d_lock);
+ 				spin_unlock(&sbi->lookup_lock);
+ 				dput(prev);
+ 				return NULL;
+ 			}
+ 
+ 			parent = p->d_parent;
+-			if (!spin_trylock(&parent->d_lock)) {
+-				spin_unlock(&p->d_lock);
++			if (!seq_spin_trylock(&parent->d_lock)) {
++				seq_spin_unlock(&p->d_lock);
+ 				cpu_relax();
+ 				goto relock;
+ 			}
+-			spin_unlock(&p->d_lock);
++			seq_spin_unlock(&p->d_lock);
+ 			next = p->d_u.d_child.next;
+ 			p = parent;
+ 			if (next != &parent->d_subdirs)
+@@ -182,16 +182,16 @@ again:
+ 	}
+ 	ret = list_entry(next, struct dentry, d_u.d_child);
+ 
+-	spin_lock_nested(&ret->d_lock, DENTRY_D_LOCK_NESTED);
++	seq_spin_lock_nested(&ret->d_lock, DENTRY_D_LOCK_NESTED);
+ 	/* Negative dentry - try next */
+ 	if (!simple_positive(ret)) {
+-		spin_unlock(&p->d_lock);
++		seq_spin_unlock(&p->d_lock);
+ 		p = ret;
+ 		goto again;
+ 	}
+ 	dget_dlock(ret);
+-	spin_unlock(&ret->d_lock);
+-	spin_unlock(&p->d_lock);
++	seq_spin_unlock(&ret->d_lock);
++	seq_spin_unlock(&p->d_lock);
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+ 	dput(prev);
+@@ -462,11 +462,11 @@ found:
+ 	init_completion(&ino->expire_complete);
+ 	spin_unlock(&sbi->fs_lock);
+ 	spin_lock(&sbi->lookup_lock);
+-	spin_lock(&expired->d_parent->d_lock);
+-	spin_lock_nested(&expired->d_lock, DENTRY_D_LOCK_NESTED);
++	seq_spin_lock(&expired->d_parent->d_lock);
++	seq_spin_lock_nested(&expired->d_lock, DENTRY_D_LOCK_NESTED);
+ 	list_move(&expired->d_parent->d_subdirs, &expired->d_u.d_child);
+-	spin_unlock(&expired->d_lock);
+-	spin_unlock(&expired->d_parent->d_lock);
++	seq_spin_unlock(&expired->d_lock);
++	seq_spin_unlock(&expired->d_parent->d_lock);
+ 	spin_unlock(&sbi->lookup_lock);
+ 	return expired;
+ }
+@@ -556,7 +556,7 @@ int autofs4_do_expire_multi(struct super
+ 
+ 		spin_lock(&sbi->fs_lock);
+ 		ino->flags &= ~AUTOFS_INF_EXPIRING;
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (!ret) {
+ 			if ((IS_ROOT(dentry) ||
+ 			    (autofs_type_indirect(sbi->type) &&
+@@ -564,7 +564,7 @@ int autofs4_do_expire_multi(struct super
+ 			    !(dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
+ 				__managed_dentry_set_automount(dentry);
+ 		}
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		complete_all(&ino->expire_complete);
+ 		spin_unlock(&sbi->fs_lock);
+ 		dput(dentry);
+Index: linux-3.2/fs/autofs4/root.c
+===================================================================
+--- linux-3.2.orig/fs/autofs4/root.c
++++ linux-3.2/fs/autofs4/root.c
+@@ -124,13 +124,13 @@ static int autofs4_dir_open(struct inode
+ 	 * it.
+ 	 */
+ 	spin_lock(&sbi->lookup_lock);
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		spin_unlock(&sbi->lookup_lock);
+ 		return -ENOENT;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+ out:
+@@ -179,7 +179,7 @@ static struct dentry *autofs4_lookup_act
+ 		ino = list_entry(p, struct autofs_info, active);
+ 		active = ino->dentry;
+ 
+-		spin_lock(&active->d_lock);
++		seq_spin_lock(&active->d_lock);
+ 
+ 		/* Already gone? */
+ 		if (active->d_count == 0)
+@@ -199,12 +199,12 @@ static struct dentry *autofs4_lookup_act
+ 
+ 		if (d_unhashed(active)) {
+ 			dget_dlock(active);
+-			spin_unlock(&active->d_lock);
++			seq_spin_unlock(&active->d_lock);
+ 			spin_unlock(&sbi->lookup_lock);
+ 			return active;
+ 		}
+ next:
+-		spin_unlock(&active->d_lock);
++		seq_spin_unlock(&active->d_lock);
+ 	}
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+@@ -231,7 +231,7 @@ static struct dentry *autofs4_lookup_exp
+ 		ino = list_entry(p, struct autofs_info, expiring);
+ 		expiring = ino->dentry;
+ 
+-		spin_lock(&expiring->d_lock);
++		seq_spin_lock(&expiring->d_lock);
+ 
+ 		/* Bad luck, we've already been dentry_iput */
+ 		if (!expiring->d_inode)
+@@ -251,12 +251,12 @@ static struct dentry *autofs4_lookup_exp
+ 
+ 		if (d_unhashed(expiring)) {
+ 			dget_dlock(expiring);
+-			spin_unlock(&expiring->d_lock);
++			seq_spin_unlock(&expiring->d_lock);
+ 			spin_unlock(&sbi->lookup_lock);
+ 			return expiring;
+ 		}
+ next:
+-		spin_unlock(&expiring->d_lock);
++		seq_spin_unlock(&expiring->d_lock);
+ 	}
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+@@ -382,12 +382,12 @@ static struct vfsmount *autofs4_d_automo
+ 			if (have_submounts(dentry))
+ 				goto done;
+ 		} else {
+-			spin_lock(&dentry->d_lock);
++			seq_spin_lock(&dentry->d_lock);
+ 			if (!list_empty(&dentry->d_subdirs)) {
+-				spin_unlock(&dentry->d_lock);
++				seq_spin_unlock(&dentry->d_lock);
+ 				goto done;
+ 			}
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 		}
+ 		ino->flags |= AUTOFS_INF_PENDING;
+ 		spin_unlock(&sbi->fs_lock);
+@@ -410,12 +410,12 @@ done:
+ 		 * an actual mount so ->d_automount() won't be called during
+ 		 * the follow.
+ 		 */
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if ((!d_mountpoint(dentry) &&
+ 		    !list_empty(&dentry->d_subdirs)) ||
+ 		    (dentry->d_inode && S_ISLNK(dentry->d_inode->i_mode)))
+ 			__managed_dentry_clear_automount(dentry);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	spin_unlock(&sbi->fs_lock);
+ 
+@@ -597,9 +597,9 @@ static int autofs4_dir_unlink(struct ino
+ 
+ 	spin_lock(&sbi->lookup_lock);
+ 	__autofs4_add_expiring(dentry);
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__d_drop(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+ 	return 0;
+@@ -670,15 +670,15 @@ static int autofs4_dir_rmdir(struct inod
+ 		return -EACCES;
+ 
+ 	spin_lock(&sbi->lookup_lock);
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (!list_empty(&dentry->d_subdirs)) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		spin_unlock(&sbi->lookup_lock);
+ 		return -ENOTEMPTY;
+ 	}
+ 	__autofs4_add_expiring(dentry);
+ 	__d_drop(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	spin_unlock(&sbi->lookup_lock);
+ 
+ 	if (sbi->version < 5)
+Index: linux-3.2/fs/btrfs/export.c
+===================================================================
+--- linux-3.2.orig/fs/btrfs/export.c
++++ linux-3.2/fs/btrfs/export.c
+@@ -40,14 +40,14 @@ static int btrfs_encode_fh(struct dentry
+ 		struct inode *parent;
+ 		u64 parent_root_id;
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 
+ 		parent = dentry->d_parent->d_inode;
+ 		fid->parent_objectid = BTRFS_I(parent)->location.objectid;
+ 		fid->parent_gen = parent->i_generation;
+ 		parent_root_id = BTRFS_I(parent)->root->objectid;
+ 
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 
+ 		if (parent_root_id != fid->root_objectid) {
+ 			fid->parent_root_objectid = parent_root_id;
+Index: linux-3.2/fs/btrfs/inode.c
+===================================================================
+--- linux-3.2.orig/fs/btrfs/inode.c
++++ linux-3.2/fs/btrfs/inode.c
+@@ -4002,9 +4002,9 @@ static struct dentry *btrfs_lookup(struc
+ 
+ 	ret = d_splice_alias(btrfs_lookup_dentry(dir, dentry), dentry);
+ 	if (unlikely(d_need_lookup(dentry))) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		dentry->d_flags &= ~DCACHE_NEED_LOOKUP;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	return ret;
+ }
+Index: linux-3.2/fs/ceph/caps.c
+===================================================================
+--- linux-3.2.orig/fs/ceph/caps.c
++++ linux-3.2/fs/ceph/caps.c
+@@ -3066,14 +3066,14 @@ int ceph_encode_dentry_release(void **p,
+ 	 * doesn't have to be perfect; the mds will revoke anything we don't
+ 	 * release.
+ 	 */
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (di->lease_session && di->lease_session->s_mds == mds)
+ 		force = 1;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force);
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (ret && di->lease_session && di->lease_session->s_mds == mds) {
+ 		dout("encode_dentry_release %p mds%d seq %d\n",
+ 		     dentry, mds, (int)di->lease_seq);
+@@ -3083,6 +3083,6 @@ int ceph_encode_dentry_release(void **p,
+ 		rel->dname_seq = cpu_to_le32(di->lease_seq);
+ 		__ceph_mdsc_drop_dentry_lease(dentry);
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return ret;
+ }
+Index: linux-3.2/fs/ceph/debugfs.c
+===================================================================
+--- linux-3.2.orig/fs/ceph/debugfs.c
++++ linux-3.2/fs/ceph/debugfs.c
+@@ -82,13 +82,13 @@ static int mdsc_show(struct seq_file *s,
+ 						    &pathbase, 0);
+ 			if (IS_ERR(path))
+ 				path = NULL;
+-			spin_lock(&req->r_dentry->d_lock);
++			seq_spin_lock(&req->r_dentry->d_lock);
+ 			seq_printf(s, " #%llx/%.*s (%s)",
+ 				   ceph_ino(req->r_dentry->d_parent->d_inode),
+ 				   req->r_dentry->d_name.len,
+ 				   req->r_dentry->d_name.name,
+ 				   path ? path : "");
+-			spin_unlock(&req->r_dentry->d_lock);
++			seq_spin_unlock(&req->r_dentry->d_lock);
+ 			kfree(path);
+ 		} else if (req->r_path1) {
+ 			seq_printf(s, " #%llx/%s", req->r_ino1.ino,
+@@ -100,13 +100,13 @@ static int mdsc_show(struct seq_file *s,
+ 						    &pathbase, 0);
+ 			if (IS_ERR(path))
+ 				path = NULL;
+-			spin_lock(&req->r_old_dentry->d_lock);
++			seq_spin_lock(&req->r_old_dentry->d_lock);
+ 			seq_printf(s, " #%llx/%.*s (%s)",
+ 			   ceph_ino(req->r_old_dentry_dir),
+ 				   req->r_old_dentry->d_name.len,
+ 				   req->r_old_dentry->d_name.name,
+ 				   path ? path : "");
+-			spin_unlock(&req->r_old_dentry->d_lock);
++			seq_spin_unlock(&req->r_old_dentry->d_lock);
+ 			kfree(path);
+ 		} else if (req->r_path2) {
+ 			if (req->r_ino2.ino)
+Index: linux-3.2/fs/ceph/dir.c
+===================================================================
+--- linux-3.2.orig/fs/ceph/dir.c
++++ linux-3.2/fs/ceph/dir.c
+@@ -44,7 +44,7 @@ int ceph_init_dentry(struct dentry *dent
+ 	if (!di)
+ 		return -ENOMEM;          /* oh well */
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_fsdata) {
+ 		/* lost a race */
+ 		kmem_cache_free(ceph_dentry_cachep, di);
+@@ -67,7 +67,7 @@ int ceph_init_dentry(struct dentry *dent
+ 	dentry->d_fsdata = di;
+ 	ceph_dentry_lru_add(dentry);
+ out_unlock:
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return 0;
+ }
+ 
+@@ -78,12 +78,12 @@ struct inode *ceph_get_dentry_parent_ino
+ 	if (!dentry)
+ 		return NULL;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_parent) {
+ 		inode = dentry->d_parent->d_inode;
+ 		ihold(inode);
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return inode;
+ }
+ 
+@@ -130,7 +130,7 @@ static int __dcache_readdir(struct file 
+ 	dout("__dcache_readdir %p at %llu (last %p)\n", dir, filp->f_pos,
+ 	     last);
+ 
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 
+ 	/* start at beginning? */
+ 	if (filp->f_pos == 2 || last == NULL ||
+@@ -154,7 +154,7 @@ more:
+ 			fi->flags |= CEPH_F_ATEND;
+ 			goto out_unlock;
+ 		}
+-		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 		if (!d_unhashed(dentry) && dentry->d_inode &&
+ 		    ceph_snap(dentry->d_inode) != CEPH_SNAPDIR &&
+ 		    ceph_ino(dentry->d_inode) != CEPH_INO_CEPH &&
+@@ -164,15 +164,15 @@ more:
+ 		     dentry->d_name.len, dentry->d_name.name, di->offset,
+ 		     filp->f_pos, d_unhashed(dentry) ? " unhashed" : "",
+ 		     !dentry->d_inode ? " null" : "");
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		p = p->prev;
+ 		dentry = list_entry(p, struct dentry, d_u.d_child);
+ 		di = ceph_dentry(dentry);
+ 	}
+ 
+ 	dget_dlock(dentry);
+-	spin_unlock(&dentry->d_lock);
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ 
+ 	dout(" %llu (%llu) dentry %p %.*s %p\n", di->offset, filp->f_pos,
+ 	     dentry, dentry->d_name.len, dentry->d_name.name, dentry->d_inode);
+@@ -205,12 +205,12 @@ more:
+ 		goto out;
+ 	}
+ 
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	p = p->prev;	/* advance to next dentry */
+ 	goto more;
+ 
+ out_unlock:
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ out:
+ 	if (last)
+ 		dput(last);
+@@ -950,10 +950,10 @@ static int ceph_rename(struct inode *old
+  */
+ void ceph_invalidate_dentry_lease(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	dentry->d_time = jiffies;
+ 	ceph_dentry(dentry)->lease_shared_gen = 0;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /*
+@@ -971,7 +971,7 @@ static int dentry_lease_is_valid(struct 
+ 	struct inode *dir = NULL;
+ 	u32 seq = 0;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	di = ceph_dentry(dentry);
+ 	if (di && di->lease_session) {
+ 		s = di->lease_session;
+@@ -995,7 +995,7 @@ static int dentry_lease_is_valid(struct 
+ 			}
+ 		}
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	if (session) {
+ 		ceph_mdsc_lease_send_msg(session, dir, dentry,
+Index: linux-3.2/fs/ceph/export.c
+===================================================================
+--- linux-3.2.orig/fs/ceph/export.c
++++ linux-3.2/fs/ceph/export.c
+@@ -55,9 +55,9 @@ static int ceph_encode_fh(struct dentry 
+ 	if (ceph_snap(inode) != CEPH_NOSNAP)
+ 		return -EINVAL;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	parent = dget(dentry->d_parent);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	if (*max_len >= connected_handle_length) {
+ 		dout("encode_fh %p connectable\n", dentry);
+Index: linux-3.2/fs/ceph/inode.c
+===================================================================
+--- linux-3.2.orig/fs/ceph/inode.c
++++ linux-3.2/fs/ceph/inode.c
+@@ -809,7 +809,7 @@ static void update_dentry_lease(struct d
+ 	if (dentry->d_op != &ceph_dentry_ops)
+ 		return;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	dout("update_dentry_lease %p duration %lu ms ttl %lu\n",
+ 	     dentry, duration, ttl);
+ 
+@@ -837,7 +837,7 @@ static void update_dentry_lease(struct d
+ 	di->lease_renew_from = 0;
+ 	dentry->d_time = ttl;
+ out_unlock:
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return;
+ }
+ 
+@@ -866,13 +866,13 @@ static void ceph_set_dentry_offset(struc
+ 	di->offset = ceph_inode(inode)->i_max_offset++;
+ 	spin_unlock(&ci->i_ceph_lock);
+ 
+-	spin_lock(&dir->d_lock);
+-	spin_lock_nested(&dn->d_lock, DENTRY_D_LOCK_NESTED);
++	seq_spin_lock(&dir->d_lock);
++	seq_spin_lock_nested(&dn->d_lock, DENTRY_D_LOCK_NESTED);
+ 	list_move(&dn->d_u.d_child, &dir->d_subdirs);
+ 	dout("set_dentry_offset %p %lld (%p %p)\n", dn, di->offset,
+ 	     dn->d_u.d_child.prev, dn->d_u.d_child.next);
+-	spin_unlock(&dn->d_lock);
+-	spin_unlock(&dir->d_lock);
++	seq_spin_unlock(&dn->d_lock);
++	seq_spin_unlock(&dir->d_lock);
+ }
+ 
+ /*
+@@ -1254,11 +1254,11 @@ retry_lookup:
+ 			goto retry_lookup;
+ 		} else {
+ 			/* reorder parent's d_subdirs */
+-			spin_lock(&parent->d_lock);
+-			spin_lock_nested(&dn->d_lock, DENTRY_D_LOCK_NESTED);
++			seq_spin_lock(&parent->d_lock);
++			seq_spin_lock_nested(&dn->d_lock, DENTRY_D_LOCK_NESTED);
+ 			list_move(&dn->d_u.d_child, &parent->d_subdirs);
+-			spin_unlock(&dn->d_lock);
+-			spin_unlock(&parent->d_lock);
++			seq_spin_unlock(&dn->d_lock);
++			seq_spin_unlock(&parent->d_lock);
+ 		}
+ 
+ 		di = dn->d_fsdata;
+Index: linux-3.2/fs/ceph/mds_client.c
+===================================================================
+--- linux-3.2.orig/fs/ceph/mds_client.c
++++ linux-3.2/fs/ceph/mds_client.c
+@@ -1488,25 +1488,25 @@ retry:
+ 	for (temp = dentry; !IS_ROOT(temp) && pos != 0; ) {
+ 		struct inode *inode;
+ 
+-		spin_lock(&temp->d_lock);
++		seq_spin_lock(&temp->d_lock);
+ 		inode = temp->d_inode;
+ 		if (inode && ceph_snap(inode) == CEPH_SNAPDIR) {
+ 			dout("build_path path+%d: %p SNAPDIR\n",
+ 			     pos, temp);
+ 		} else if (stop_on_nosnap && inode &&
+ 			   ceph_snap(inode) == CEPH_NOSNAP) {
+-			spin_unlock(&temp->d_lock);
++			seq_spin_unlock(&temp->d_lock);
+ 			break;
+ 		} else {
+ 			pos -= temp->d_name.len;
+ 			if (pos < 0) {
+-				spin_unlock(&temp->d_lock);
++				seq_spin_unlock(&temp->d_lock);
+ 				break;
+ 			}
+ 			strncpy(path + pos, temp->d_name.name,
+ 				temp->d_name.len);
+ 		}
+-		spin_unlock(&temp->d_lock);
++		seq_spin_unlock(&temp->d_lock);
+ 		if (pos)
+ 			path[--pos] = '/';
+ 		temp = temp->d_parent;
+@@ -2768,7 +2768,7 @@ static void handle_lease(struct ceph_mds
+ 	if (!dentry)
+ 		goto release;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	di = ceph_dentry(dentry);
+ 	switch (h->action) {
+ 	case CEPH_MDS_LEASE_REVOKE:
+@@ -2796,7 +2796,7 @@ static void handle_lease(struct ceph_mds
+ 		}
+ 		break;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	dput(dentry);
+ 
+ 	if (!release)
+@@ -2869,7 +2869,7 @@ void ceph_mdsc_lease_release(struct ceph
+ 	BUG_ON(dentry == NULL);
+ 
+ 	/* is dentry lease valid? */
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	di = ceph_dentry(dentry);
+ 	if (!di || !di->lease_session ||
+ 	    di->lease_session->s_mds < 0 ||
+@@ -2878,7 +2878,7 @@ void ceph_mdsc_lease_release(struct ceph
+ 		dout("lease_release inode %p dentry %p -- "
+ 		     "no lease\n",
+ 		     inode, dentry);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		return;
+ 	}
+ 
+@@ -2886,7 +2886,7 @@ void ceph_mdsc_lease_release(struct ceph
+ 	session = ceph_get_mds_session(di->lease_session);
+ 	seq = di->lease_seq;
+ 	__ceph_mdsc_drop_dentry_lease(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	dout("lease_release inode %p dentry %p to mds%d\n",
+ 	     inode, dentry, session->s_mds);
+Index: linux-3.2/fs/cifs/dir.c
+===================================================================
+--- linux-3.2.orig/fs/cifs/dir.c
++++ linux-3.2/fs/cifs/dir.c
+@@ -83,10 +83,10 @@ cifs_bp_rename_retry:
+ 	full_path[namelen] = 0;	/* trailing null */
+ 	rcu_read_lock();
+ 	for (temp = direntry; !IS_ROOT(temp);) {
+-		spin_lock(&temp->d_lock);
++		seq_spin_lock(&temp->d_lock);
+ 		namelen -= 1 + temp->d_name.len;
+ 		if (namelen < 0) {
+-			spin_unlock(&temp->d_lock);
++			seq_spin_unlock(&temp->d_lock);
+ 			break;
+ 		} else {
+ 			full_path[namelen] = dirsep;
+@@ -94,7 +94,7 @@ cifs_bp_rename_retry:
+ 				temp->d_name.len);
+ 			cFYI(0, "name: %s", full_path + namelen);
+ 		}
+-		spin_unlock(&temp->d_lock);
++		seq_spin_unlock(&temp->d_lock);
+ 		temp = temp->d_parent;
+ 		if (temp == NULL) {
+ 			cERROR(1, "corrupt dentry");
+Index: linux-3.2/fs/coda/cache.c
+===================================================================
+--- linux-3.2.orig/fs/coda/cache.c
++++ linux-3.2/fs/coda/cache.c
+@@ -92,7 +92,7 @@ static void coda_flag_children(struct de
+ 	struct list_head *child;
+ 	struct dentry *de;
+ 
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	list_for_each(child, &parent->d_subdirs)
+ 	{
+ 		de = list_entry(child, struct dentry, d_u.d_child);
+@@ -101,7 +101,7 @@ static void coda_flag_children(struct de
+ 			continue;
+ 		coda_flag_inode(de->d_inode, flag);
+ 	}
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ 	return; 
+ }
+ 
+Index: linux-3.2/fs/configfs/configfs_internal.h
+===================================================================
+--- linux-3.2.orig/fs/configfs/configfs_internal.h
++++ linux-3.2/fs/configfs/configfs_internal.h
+@@ -121,7 +121,7 @@ static inline struct config_item *config
+ {
+ 	struct config_item * item = NULL;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (!d_unhashed(dentry)) {
+ 		struct configfs_dirent * sd = dentry->d_fsdata;
+ 		if (sd->s_type & CONFIGFS_ITEM_LINK) {
+@@ -130,7 +130,7 @@ static inline struct config_item *config
+ 		} else
+ 			item = config_item_get(sd->s_element);
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	return item;
+ }
+Index: linux-3.2/fs/configfs/inode.c
+===================================================================
+--- linux-3.2.orig/fs/configfs/inode.c
++++ linux-3.2/fs/configfs/inode.c
+@@ -251,14 +251,14 @@ void configfs_drop_dentry(struct configf
+ 	struct dentry * dentry = sd->s_dentry;
+ 
+ 	if (dentry) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (!(d_unhashed(dentry) && dentry->d_inode)) {
+ 			dget_dlock(dentry);
+ 			__d_drop(dentry);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			simple_unlink(parent->d_inode, dentry);
+ 		} else
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 	}
+ }
+ 
+Index: linux-3.2/fs/dcache.c
+===================================================================
+--- linux-3.2.orig/fs/dcache.c
++++ linux-3.2/fs/dcache.c
+@@ -172,9 +172,9 @@ static void d_free(struct dentry *dentry
+  */
+ static inline void dentry_rcuwalk_barrier(struct dentry *dentry)
+ {
+-	assert_spin_locked(&dentry->d_lock);
++	assert_seq_spin_locked(&dentry->d_lock);
+ 	/* Go through a barrier */
+-	write_seqcount_barrier(&dentry->d_seq);
++	write_seqlock_barrier(&dentry->d_lock);
+ }
+ 
+ /*
+@@ -190,7 +190,7 @@ static void dentry_iput(struct dentry * 
+ 	if (inode) {
+ 		dentry->d_inode = NULL;
+ 		list_del_init(&dentry->d_alias);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		spin_unlock(&inode->i_lock);
+ 		if (!inode->i_nlink)
+ 			fsnotify_inoderemove(inode);
+@@ -199,7 +199,7 @@ static void dentry_iput(struct dentry * 
+ 		else
+ 			iput(inode);
+ 	} else {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ }
+ 
+@@ -215,7 +215,7 @@ static void dentry_unlink_inode(struct d
+ 	dentry->d_inode = NULL;
+ 	list_del_init(&dentry->d_alias);
+ 	dentry_rcuwalk_barrier(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	spin_unlock(&inode->i_lock);
+ 	if (!inode->i_nlink)
+ 		fsnotify_inoderemove(inode);
+@@ -313,7 +313,7 @@ static struct dentry *d_kill(struct dent
+ 	 */
+ 	dentry->d_flags |= DCACHE_DISCONNECTED;
+ 	if (parent)
+-		spin_unlock(&parent->d_lock);
++		seq_spin_unlock(&parent->d_lock);
+ 	dentry_iput(dentry);
+ 	/*
+ 	 * dentry_iput drops the locks, at which point nobody (except
+@@ -370,9 +370,9 @@ EXPORT_SYMBOL(__d_drop);
+ 
+ void d_drop(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__d_drop(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ EXPORT_SYMBOL(d_drop);
+ 
+@@ -387,10 +387,10 @@ EXPORT_SYMBOL(d_drop);
+  */
+ void d_clear_need_lookup(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__d_drop(dentry);
+ 	dentry->d_flags &= ~DCACHE_NEED_LOOKUP;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ EXPORT_SYMBOL(d_clear_need_lookup);
+ 
+@@ -409,7 +409,7 @@ static inline struct dentry *dentry_kill
+ 	inode = dentry->d_inode;
+ 	if (inode && !spin_trylock(&inode->i_lock)) {
+ relock:
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		cpu_relax();
+ 		return dentry; /* try again with same dentry */
+ 	}
+@@ -417,7 +417,7 @@ relock:
+ 		parent = NULL;
+ 	else
+ 		parent = dentry->d_parent;
+-	if (parent && !spin_trylock(&parent->d_lock)) {
++	if (parent && !seq_spin_trylock(&parent->d_lock)) {
+ 		if (inode)
+ 			spin_unlock(&inode->i_lock);
+ 		goto relock;
+@@ -470,11 +470,11 @@ void dput(struct dentry *dentry)
+ repeat:
+ 	if (dentry->d_count == 1)
+ 		might_sleep();
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	BUG_ON(!dentry->d_count);
+ 	if (dentry->d_count > 1) {
+ 		dentry->d_count--;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		return;
+ 	}
+ 
+@@ -497,7 +497,7 @@ repeat:
+ 	dentry_lru_add(dentry);
+ 
+ 	dentry->d_count--;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return;
+ 
+ kill_it:
+@@ -524,9 +524,9 @@ int d_invalidate(struct dentry * dentry)
+ 	/*
+ 	 * If it's already been dropped, return OK.
+ 	 */
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (d_unhashed(dentry)) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		return 0;
+ 	}
+ 	/*
+@@ -534,9 +534,9 @@ int d_invalidate(struct dentry * dentry)
+ 	 * to get rid of unused child entries.
+ 	 */
+ 	if (!list_empty(&dentry->d_subdirs)) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		shrink_dcache_parent(dentry);
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 	}
+ 
+ 	/*
+@@ -553,13 +553,13 @@ int d_invalidate(struct dentry * dentry)
+ 	 */
+ 	if (dentry->d_count > 1 && dentry->d_inode) {
+ 		if (S_ISDIR(dentry->d_inode->i_mode) || d_mountpoint(dentry)) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			return -EBUSY;
+ 		}
+ 	}
+ 
+ 	__d_drop(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return 0;
+ }
+ EXPORT_SYMBOL(d_invalidate);
+@@ -572,9 +572,9 @@ static inline void __dget_dlock(struct d
+ 
+ static inline void __dget(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__dget_dlock(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ struct dentry *dget_parent(struct dentry *dentry)
+@@ -588,16 +588,16 @@ repeat:
+ 	 */
+ 	rcu_read_lock();
+ 	ret = dentry->d_parent;
+-	spin_lock(&ret->d_lock);
++	seq_spin_lock(&ret->d_lock);
+ 	if (unlikely(ret != dentry->d_parent)) {
+-		spin_unlock(&ret->d_lock);
++		seq_spin_unlock(&ret->d_lock);
+ 		rcu_read_unlock();
+ 		goto repeat;
+ 	}
+ 	rcu_read_unlock();
+ 	BUG_ON(!ret->d_count);
+ 	ret->d_count++;
+-	spin_unlock(&ret->d_lock);
++	seq_spin_unlock(&ret->d_lock);
+ 	return ret;
+ }
+ EXPORT_SYMBOL(dget_parent);
+@@ -625,31 +625,31 @@ static struct dentry *__d_find_alias(str
+ again:
+ 	discon_alias = NULL;
+ 	list_for_each_entry(alias, &inode->i_dentry, d_alias) {
+-		spin_lock(&alias->d_lock);
++		seq_spin_lock(&alias->d_lock);
+  		if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) {
+ 			if (IS_ROOT(alias) &&
+ 			    (alias->d_flags & DCACHE_DISCONNECTED)) {
+ 				discon_alias = alias;
+ 			} else if (!want_discon) {
+ 				__dget_dlock(alias);
+-				spin_unlock(&alias->d_lock);
++				seq_spin_unlock(&alias->d_lock);
+ 				return alias;
+ 			}
+ 		}
+-		spin_unlock(&alias->d_lock);
++		seq_spin_unlock(&alias->d_lock);
+ 	}
+ 	if (discon_alias) {
+ 		alias = discon_alias;
+-		spin_lock(&alias->d_lock);
++		seq_spin_lock(&alias->d_lock);
+ 		if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) {
+ 			if (IS_ROOT(alias) &&
+ 			    (alias->d_flags & DCACHE_DISCONNECTED)) {
+ 				__dget_dlock(alias);
+-				spin_unlock(&alias->d_lock);
++				seq_spin_unlock(&alias->d_lock);
+ 				return alias;
+ 			}
+ 		}
+-		spin_unlock(&alias->d_lock);
++		seq_spin_unlock(&alias->d_lock);
+ 		goto again;
+ 	}
+ 	return NULL;
+@@ -678,16 +678,16 @@ void d_prune_aliases(struct inode *inode
+ restart:
+ 	spin_lock(&inode->i_lock);
+ 	list_for_each_entry(dentry, &inode->i_dentry, d_alias) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (!dentry->d_count) {
+ 			__dget_dlock(dentry);
+ 			__d_drop(dentry);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			spin_unlock(&inode->i_lock);
+ 			dput(dentry);
+ 			goto restart;
+ 		}
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	spin_unlock(&inode->i_lock);
+ }
+@@ -724,10 +724,10 @@ static void try_prune_one_dentry(struct 
+ 	/* Prune ancestors. */
+ 	dentry = parent;
+ 	while (dentry) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (dentry->d_count > 1) {
+ 			dentry->d_count--;
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			return;
+ 		}
+ 		dentry = dentry_kill(dentry, 1);
+@@ -743,9 +743,9 @@ static void shrink_dentry_list(struct li
+ 		dentry = list_entry_rcu(list->prev, struct dentry, d_lru);
+ 		if (&dentry->d_lru == list)
+ 			break; /* empty */
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (dentry != list_entry(list->prev, struct dentry, d_lru)) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			continue;
+ 		}
+ 
+@@ -756,7 +756,7 @@ static void shrink_dentry_list(struct li
+ 		 */
+ 		if (dentry->d_count) {
+ 			dentry_lru_del(dentry);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			continue;
+ 		}
+ 
+@@ -794,7 +794,7 @@ relock:
+ 				struct dentry, d_lru);
+ 		BUG_ON(dentry->d_sb != sb);
+ 
+-		if (!spin_trylock(&dentry->d_lock)) {
++		if (!seq_spin_trylock(&dentry->d_lock)) {
+ 			spin_unlock(&dcache_lru_lock);
+ 			cpu_relax();
+ 			goto relock;
+@@ -803,11 +803,11 @@ relock:
+ 		if (dentry->d_flags & DCACHE_REFERENCED) {
+ 			dentry->d_flags &= ~DCACHE_REFERENCED;
+ 			list_move(&dentry->d_lru, &referenced);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 		} else {
+ 			list_move_tail(&dentry->d_lru, &tmp);
+ 			dentry->d_flags |= DCACHE_SHRINK_LIST;
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			if (!--count)
+ 				break;
+ 		}
+@@ -960,8 +960,8 @@ static struct dentry *try_to_ascend(stru
+ 	struct dentry *new = old->d_parent;
+ 
+ 	rcu_read_lock();
+-	spin_unlock(&old->d_lock);
+-	spin_lock(&new->d_lock);
++	seq_spin_unlock(&old->d_lock);
++	seq_spin_lock(&new->d_lock);
+ 
+ 	/*
+ 	 * might go back up the wrong parent if we have had a rename
+@@ -970,7 +970,7 @@ static struct dentry *try_to_ascend(stru
+ 	if (new != old->d_parent ||
+ 		 (old->d_flags & DCACHE_DISCONNECTED) ||
+ 		 (!locked && read_seqretry(&rename_lock, seq))) {
+-		spin_unlock(&new->d_lock);
++		seq_spin_unlock(&new->d_lock);
+ 		new = NULL;
+ 	}
+ 	rcu_read_unlock();
+@@ -1004,7 +1004,7 @@ again:
+ 
+ 	if (d_mountpoint(parent))
+ 		goto positive;
+-	spin_lock(&this_parent->d_lock);
++	seq_spin_lock(&this_parent->d_lock);
+ repeat:
+ 	next = this_parent->d_subdirs.next;
+ resume:
+@@ -1013,21 +1013,21 @@ resume:
+ 		struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child);
+ 		next = tmp->next;
+ 
+-		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 		/* Have we found a mount point ? */
+ 		if (d_mountpoint(dentry)) {
+-			spin_unlock(&dentry->d_lock);
+-			spin_unlock(&this_parent->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&this_parent->d_lock);
+ 			goto positive;
+ 		}
+ 		if (!list_empty(&dentry->d_subdirs)) {
+-			spin_unlock(&this_parent->d_lock);
+-			spin_release(&dentry->d_lock.dep_map, 1, _RET_IP_);
++			seq_spin_unlock(&this_parent->d_lock);
++			spin_release(&dentry->d_lock.lock.dep_map, 1, _RET_IP_);
+ 			this_parent = dentry;
+-			spin_acquire(&this_parent->d_lock.dep_map, 0, 1, _RET_IP_);
++			spin_acquire(&this_parent->d_lock.lock.dep_map, 0, 1, _RET_IP_);
+ 			goto repeat;
+ 		}
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	/*
+ 	 * All done at this level ... ascend and resume the search.
+@@ -1040,7 +1040,7 @@ resume:
+ 		next = child->d_u.d_child.next;
+ 		goto resume;
+ 	}
+-	spin_unlock(&this_parent->d_lock);
++	seq_spin_unlock(&this_parent->d_lock);
+ 	if (!locked && read_seqretry(&rename_lock, seq))
+ 		goto rename_retry;
+ 	if (locked)
+@@ -1085,7 +1085,7 @@ static int select_parent(struct dentry *
+ 	seq = read_seqbegin(&rename_lock);
+ again:
+ 	this_parent = parent;
+-	spin_lock(&this_parent->d_lock);
++	seq_spin_lock(&this_parent->d_lock);
+ repeat:
+ 	next = this_parent->d_subdirs.next;
+ resume:
+@@ -1094,7 +1094,7 @@ resume:
+ 		struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child);
+ 		next = tmp->next;
+ 
+-		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 
+ 		/*
+ 		 * move only zero ref count dentries to the dispose list.
+@@ -1117,7 +1117,7 @@ resume:
+ 		 * the rest.
+ 		 */
+ 		if (found && need_resched()) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			goto out;
+ 		}
+ 
+@@ -1125,14 +1125,14 @@ resume:
+ 		 * Descend a level if the d_subdirs list is non-empty.
+ 		 */
+ 		if (!list_empty(&dentry->d_subdirs)) {
+-			spin_unlock(&this_parent->d_lock);
+-			spin_release(&dentry->d_lock.dep_map, 1, _RET_IP_);
++			seq_spin_unlock(&this_parent->d_lock);
++			spin_release(&dentry->d_lock.lock.dep_map, 1, _RET_IP_);
+ 			this_parent = dentry;
+-			spin_acquire(&this_parent->d_lock.dep_map, 0, 1, _RET_IP_);
++			spin_acquire(&this_parent->d_lock.lock.dep_map, 0, 1, _RET_IP_);
+ 			goto repeat;
+ 		}
+ 
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	/*
+ 	 * All done at this level ... ascend and resume the search.
+@@ -1146,7 +1146,7 @@ resume:
+ 		goto resume;
+ 	}
+ out:
+-	spin_unlock(&this_parent->d_lock);
++	seq_spin_unlock(&this_parent->d_lock);
+ 	if (!locked && read_seqretry(&rename_lock, seq))
+ 		goto rename_retry;
+ 	if (locked)
+@@ -1214,8 +1214,7 @@ struct dentry *__d_alloc(struct super_bl
+ 
+ 	dentry->d_count = 1;
+ 	dentry->d_flags = 0;
+-	spin_lock_init(&dentry->d_lock);
+-	seqcount_init(&dentry->d_seq);
++	seqlock_init(&dentry->d_lock);
+ 	dentry->d_inode = NULL;
+ 	dentry->d_parent = dentry;
+ 	dentry->d_sb = sb;
+@@ -1248,7 +1247,7 @@ struct dentry *d_alloc(struct dentry * p
+ 	if (!dentry)
+ 		return NULL;
+ 
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	/*
+ 	 * don't need child lock because it is not subject
+ 	 * to concurrency here
+@@ -1256,7 +1255,7 @@ struct dentry *d_alloc(struct dentry * p
+ 	__dget_dlock(parent);
+ 	dentry->d_parent = parent;
+ 	list_add(&dentry->d_u.d_child, &parent->d_subdirs);
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ 
+ 	return dentry;
+ }
+@@ -1308,7 +1307,7 @@ EXPORT_SYMBOL(d_set_d_op);
+ 
+ static void __d_instantiate(struct dentry *dentry, struct inode *inode)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (inode) {
+ 		if (unlikely(IS_AUTOMOUNT(inode)))
+ 			dentry->d_flags |= DCACHE_NEED_AUTOMOUNT;
+@@ -1316,7 +1315,7 @@ static void __d_instantiate(struct dentr
+ 	}
+ 	dentry->d_inode = inode;
+ 	dentry_rcuwalk_barrier(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	fsnotify_d_instantiate(dentry, inode);
+ }
+ 
+@@ -1516,14 +1515,14 @@ struct dentry *d_obtain_alias(struct ino
+ 	}
+ 
+ 	/* attach a disconnected dentry */
+-	spin_lock(&tmp->d_lock);
++	seq_spin_lock(&tmp->d_lock);
+ 	tmp->d_inode = inode;
+ 	tmp->d_flags |= DCACHE_DISCONNECTED;
+ 	list_add(&tmp->d_alias, &inode->i_dentry);
+ 	hlist_bl_lock(&tmp->d_sb->s_anon);
+ 	hlist_bl_add_head(&tmp->d_hash, &tmp->d_sb->s_anon);
+ 	hlist_bl_unlock(&tmp->d_sb->s_anon);
+-	spin_unlock(&tmp->d_lock);
++	seq_spin_unlock(&tmp->d_lock);
+ 	spin_unlock(&inode->i_lock);
+ 	security_d_instantiate(tmp, inode);
+ 
+@@ -1731,7 +1730,7 @@ struct dentry *__d_lookup_rcu(struct den
+ 			continue;
+ 
+ seqretry:
+-		*seq = read_seqcount_begin(&dentry->d_seq);
++		*seq = read_seqbegin(&dentry->d_lock);
+ 		if (dentry->d_parent != parent)
+ 			continue;
+ 		if (d_unhashed(dentry))
+@@ -1746,7 +1745,7 @@ seqretry:
+ 		 * edge of memory when walking. If we could load this
+ 		 * atomically some other way, we could drop this check.
+ 		 */
+-		if (read_seqcount_retry(&dentry->d_seq, *seq))
++		if (read_seqretry(&dentry->d_lock, *seq))
+ 			goto seqretry;
+ 		if (unlikely(parent->d_flags & DCACHE_OP_COMPARE)) {
+ 			if (parent->d_op->d_compare(parent, *inode,
+@@ -1849,7 +1848,7 @@ struct dentry *__d_lookup(struct dentry 
+ 		if (dentry->d_name.hash != hash)
+ 			continue;
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (dentry->d_parent != parent)
+ 			goto next;
+ 		if (d_unhashed(dentry))
+@@ -1873,10 +1872,10 @@ struct dentry *__d_lookup(struct dentry 
+ 
+ 		dentry->d_count++;
+ 		found = dentry;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		break;
+ next:
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+  	}
+  	rcu_read_unlock();
+ 
+@@ -1924,17 +1923,17 @@ int d_validate(struct dentry *dentry, st
+ {
+ 	struct dentry *child;
+ 
+-	spin_lock(&dparent->d_lock);
++	seq_spin_lock(&dparent->d_lock);
+ 	list_for_each_entry(child, &dparent->d_subdirs, d_u.d_child) {
+ 		if (dentry == child) {
+-			spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++			seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 			__dget_dlock(dentry);
+-			spin_unlock(&dentry->d_lock);
+-			spin_unlock(&dparent->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dparent->d_lock);
+ 			return 1;
+ 		}
+ 	}
+-	spin_unlock(&dparent->d_lock);
++	seq_spin_unlock(&dparent->d_lock);
+ 
+ 	return 0;
+ }
+@@ -1969,12 +1968,12 @@ void d_delete(struct dentry * dentry)
+ 	 * Are we the only user?
+ 	 */
+ again:
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	inode = dentry->d_inode;
+ 	isdir = S_ISDIR(inode->i_mode);
+ 	if (dentry->d_count == 1) {
+ 		if (inode && !spin_trylock(&inode->i_lock)) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			cpu_relax();
+ 			goto again;
+ 		}
+@@ -1987,7 +1986,7 @@ again:
+ 	if (!d_unhashed(dentry))
+ 		__d_drop(dentry);
+ 
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	fsnotify_nameremove(dentry, isdir);
+ }
+@@ -2016,9 +2015,9 @@ static void _d_rehash(struct dentry * en
+  
+ void d_rehash(struct dentry * entry)
+ {
+-	spin_lock(&entry->d_lock);
++	seq_spin_lock(&entry->d_lock);
+ 	_d_rehash(entry);
+-	spin_unlock(&entry->d_lock);
++	seq_spin_unlock(&entry->d_lock);
+ }
+ EXPORT_SYMBOL(d_rehash);
+ 
+@@ -2041,11 +2040,9 @@ void dentry_update_name_case(struct dent
+ 	BUG_ON(!mutex_is_locked(&dentry->d_parent->d_inode->i_mutex));
+ 	BUG_ON(dentry->d_name.len != name->len); /* d_lookup gives this */
+ 
+-	spin_lock(&dentry->d_lock);
+-	write_seqcount_begin(&dentry->d_seq);
++	write_seqlock(&dentry->d_lock);
+ 	memcpy((unsigned char *)dentry->d_name.name, name->name, name->len);
+-	write_seqcount_end(&dentry->d_seq);
+-	spin_unlock(&dentry->d_lock);
++	write_sequnlock(&dentry->d_lock);
+ }
+ EXPORT_SYMBOL(dentry_update_name_case);
+ 
+@@ -2096,24 +2093,24 @@ static void dentry_lock_for_move(struct 
+ 	 * XXXX: do we really need to take target->d_lock?
+ 	 */
+ 	if (IS_ROOT(dentry) || dentry->d_parent == target->d_parent)
+-		spin_lock(&target->d_parent->d_lock);
++		seq_spin_lock(&target->d_parent->d_lock);
+ 	else {
+ 		if (d_ancestor(dentry->d_parent, target->d_parent)) {
+-			spin_lock(&dentry->d_parent->d_lock);
+-			spin_lock_nested(&target->d_parent->d_lock,
+-						DENTRY_D_LOCK_NESTED);
++			seq_spin_lock(&dentry->d_parent->d_lock);
++			seq_spin_lock_nested(&target->d_parent->d_lock,
++					    DENTRY_D_LOCK_NESTED);
+ 		} else {
+-			spin_lock(&target->d_parent->d_lock);
+-			spin_lock_nested(&dentry->d_parent->d_lock,
+-						DENTRY_D_LOCK_NESTED);
++			seq_spin_lock(&target->d_parent->d_lock);
++			seq_spin_lock_nested(&dentry->d_parent->d_lock,
++					    DENTRY_D_LOCK_NESTED);
+ 		}
+ 	}
+ 	if (target < dentry) {
+-		spin_lock_nested(&target->d_lock, 2);
+-		spin_lock_nested(&dentry->d_lock, 3);
++		seq_spin_lock_nested(&target->d_lock, 2);
++		seq_spin_lock_nested(&dentry->d_lock, 3);
+ 	} else {
+-		spin_lock_nested(&dentry->d_lock, 2);
+-		spin_lock_nested(&target->d_lock, 3);
++		seq_spin_lock_nested(&dentry->d_lock, 2);
++		seq_spin_lock_nested(&target->d_lock, 3);
+ 	}
+ }
+ 
+@@ -2121,9 +2118,9 @@ static void dentry_unlock_parents_for_mo
+ 					struct dentry *target)
+ {
+ 	if (target->d_parent != dentry->d_parent)
+-		spin_unlock(&dentry->d_parent->d_lock);
++		seq_spin_unlock(&dentry->d_parent->d_lock);
+ 	if (target->d_parent != target)
+-		spin_unlock(&target->d_parent->d_lock);
++		seq_spin_unlock(&target->d_parent->d_lock);
+ }
+ 
+ /*
+@@ -2157,8 +2154,8 @@ static void __d_move(struct dentry * den
+ 
+ 	dentry_lock_for_move(dentry, target);
+ 
+-	write_seqcount_begin(&dentry->d_seq);
+-	write_seqcount_begin(&target->d_seq);
++	write_seqlock_begin(&dentry->d_lock);
++	write_seqlock_begin(&target->d_lock);
+ 
+ 	/* __d_drop does write_seqcount_barrier, but they're OK to nest. */
+ 
+@@ -2193,13 +2190,13 @@ static void __d_move(struct dentry * den
+ 
+ 	list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs);
+ 
+-	write_seqcount_end(&target->d_seq);
+-	write_seqcount_end(&dentry->d_seq);
++	write_seqlock_end(&target->d_lock);
++	write_seqlock_end(&dentry->d_lock);
+ 
+ 	dentry_unlock_parents_for_move(dentry, target);
+-	spin_unlock(&target->d_lock);
++	seq_spin_unlock(&target->d_lock);
+ 	fsnotify_d_move(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /*
+@@ -2288,8 +2285,8 @@ static void __d_materialise_dentry(struc
+ 
+ 	dentry_lock_for_move(anon, dentry);
+ 
+-	write_seqcount_begin(&dentry->d_seq);
+-	write_seqcount_begin(&anon->d_seq);
++	write_seqlock_begin(&dentry->d_lock);
++	write_seqlock_begin(&anon->d_lock);
+ 
+ 	dparent = dentry->d_parent;
+ 	aparent = anon->d_parent;
+@@ -2311,11 +2308,11 @@ static void __d_materialise_dentry(struc
+ 	else
+ 		INIT_LIST_HEAD(&anon->d_u.d_child);
+ 
+-	write_seqcount_end(&dentry->d_seq);
+-	write_seqcount_end(&anon->d_seq);
++	write_seqlock_end(&dentry->d_lock);
++	write_seqlock_end(&anon->d_lock);
+ 
+ 	dentry_unlock_parents_for_move(anon, dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	/* anon->d_lock still locked, returns locked */
+ 	anon->d_flags &= ~DCACHE_DISCONNECTED;
+@@ -2391,10 +2388,10 @@ struct dentry *d_materialise_unique(stru
+ 	else
+ 		BUG_ON(!d_unhashed(actual));
+ 
+-	spin_lock(&actual->d_lock);
++	seq_spin_lock(&actual->d_lock);
+ found:
+ 	_d_rehash(actual);
+-	spin_unlock(&actual->d_lock);
++	seq_spin_unlock(&actual->d_lock);
+ 	spin_unlock(&inode->i_lock);
+ out_nolock:
+ 	if (actual == dentry) {
+@@ -2455,9 +2452,9 @@ static int prepend_path(const struct pat
+ 		}
+ 		parent = dentry->d_parent;
+ 		prefetch(parent);
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		error = prepend_name(buffer, buflen, &dentry->d_name);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		if (!error)
+ 			error = prepend(buffer, buflen, "/", 1);
+ 		if (error)
+@@ -2682,9 +2679,9 @@ static char *__dentry_path(struct dentry
+ 		int error;
+ 
+ 		prefetch(parent);
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		error = prepend_name(&end, &buflen, &dentry->d_name);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		if (error != 0 || prepend(&end, &buflen, "/", 1) != 0)
+ 			goto Elong;
+ 
+@@ -2874,7 +2871,7 @@ void d_genocide(struct dentry *root)
+ 	seq = read_seqbegin(&rename_lock);
+ again:
+ 	this_parent = root;
+-	spin_lock(&this_parent->d_lock);
++	seq_spin_lock(&this_parent->d_lock);
+ repeat:
+ 	next = this_parent->d_subdirs.next;
+ resume:
+@@ -2883,23 +2880,23 @@ resume:
+ 		struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child);
+ 		next = tmp->next;
+ 
+-		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 		if (d_unhashed(dentry) || !dentry->d_inode) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			continue;
+ 		}
+ 		if (!list_empty(&dentry->d_subdirs)) {
+-			spin_unlock(&this_parent->d_lock);
+-			spin_release(&dentry->d_lock.dep_map, 1, _RET_IP_);
++			seq_spin_unlock(&this_parent->d_lock);
++			spin_release(&dentry->d_lock.lock.dep_map, 1, _RET_IP_);
+ 			this_parent = dentry;
+-			spin_acquire(&this_parent->d_lock.dep_map, 0, 1, _RET_IP_);
++			spin_acquire(&this_parent->d_lock.lock.dep_map, 0, 1, _RET_IP_);
+ 			goto repeat;
+ 		}
+ 		if (!(dentry->d_flags & DCACHE_GENOCIDE)) {
+ 			dentry->d_flags |= DCACHE_GENOCIDE;
+ 			dentry->d_count--;
+ 		}
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	if (this_parent != root) {
+ 		struct dentry *child = this_parent;
+@@ -2913,7 +2910,7 @@ resume:
+ 		next = child->d_u.d_child.next;
+ 		goto resume;
+ 	}
+-	spin_unlock(&this_parent->d_lock);
++	seq_spin_unlock(&this_parent->d_lock);
+ 	if (!locked && read_seqretry(&rename_lock, seq))
+ 		goto rename_retry;
+ 	if (locked)
+Index: linux-3.2/fs/dcookies.c
+===================================================================
+--- linux-3.2.orig/fs/dcookies.c
++++ linux-3.2/fs/dcookies.c
+@@ -98,9 +98,9 @@ static struct dcookie_struct *alloc_dcoo
+ 		return NULL;
+ 
+ 	d = path->dentry;
+-	spin_lock(&d->d_lock);
++	seq_spin_lock(&d->d_lock);
+ 	d->d_flags |= DCACHE_COOKIE;
+-	spin_unlock(&d->d_lock);
++	seq_spin_unlock(&d->d_lock);
+ 
+ 	dcs->path = *path;
+ 	path_get(path);
+@@ -267,9 +267,9 @@ static void free_dcookie(struct dcookie_
+ {
+ 	struct dentry *d = dcs->path.dentry;
+ 
+-	spin_lock(&d->d_lock);
++	seq_spin_lock(&d->d_lock);
+ 	d->d_flags &= ~DCACHE_COOKIE;
+-	spin_unlock(&d->d_lock);
++	seq_spin_unlock(&d->d_lock);
+ 
+ 	path_put(&dcs->path);
+ 	kmem_cache_free(dcookie_cache, dcs);
+Index: linux-3.2/fs/exportfs/expfs.c
+===================================================================
+--- linux-3.2.orig/fs/exportfs/expfs.c
++++ linux-3.2/fs/exportfs/expfs.c
+@@ -114,15 +114,15 @@ reconnect_path(struct vfsmount *mnt, str
+ 
+ 		if (!IS_ROOT(pd)) {
+ 			/* must have found a connected parent - great */
+-			spin_lock(&pd->d_lock);
++			seq_spin_lock(&pd->d_lock);
+ 			pd->d_flags &= ~DCACHE_DISCONNECTED;
+-			spin_unlock(&pd->d_lock);
++			seq_spin_unlock(&pd->d_lock);
+ 			noprogress = 0;
+ 		} else if (pd == mnt->mnt_sb->s_root) {
+ 			printk(KERN_ERR "export: Eeek filesystem root is not connected, impossible\n");
+-			spin_lock(&pd->d_lock);
++			seq_spin_lock(&pd->d_lock);
+ 			pd->d_flags &= ~DCACHE_DISCONNECTED;
+-			spin_unlock(&pd->d_lock);
++			seq_spin_unlock(&pd->d_lock);
+ 			noprogress = 0;
+ 		} else {
+ 			/*
+@@ -335,11 +335,11 @@ static int export_encode_fh(struct dentr
+ 	if (connectable && !S_ISDIR(inode->i_mode)) {
+ 		struct inode *parent;
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		parent = dentry->d_parent->d_inode;
+ 		fid->i32.parent_ino = parent->i_ino;
+ 		fid->i32.parent_gen = parent->i_generation;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		len = 4;
+ 		type = FILEID_INO32_GEN_PARENT;
+ 	}
+Index: linux-3.2/fs/fat/inode.c
+===================================================================
+--- linux-3.2.orig/fs/fat/inode.c
++++ linux-3.2/fs/fat/inode.c
+@@ -772,9 +772,9 @@ fat_encode_fh(struct dentry *de, __u32 *
+ 	fh[1] = inode->i_generation;
+ 	fh[2] = ipos_h;
+ 	fh[3] = ipos_m | MSDOS_I(inode)->i_logstart;
+-	spin_lock(&de->d_lock);
++	seq_spin_lock(&de->d_lock);
+ 	fh[4] = ipos_l | MSDOS_I(de->d_parent->d_inode)->i_logstart;
+-	spin_unlock(&de->d_lock);
++	seq_spin_unlock(&de->d_lock);
+ 	return 3;
+ }
+ 
+Index: linux-3.2/fs/fat/namei_vfat.c
+===================================================================
+--- linux-3.2.orig/fs/fat/namei_vfat.c
++++ linux-3.2/fs/fat/namei_vfat.c
+@@ -34,10 +34,10 @@
+ static int vfat_revalidate_shortname(struct dentry *dentry)
+ {
+ 	int ret = 1;
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_time != dentry->d_parent->d_inode->i_version)
+ 		ret = 0;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return ret;
+ }
+ 
+Index: linux-3.2/fs/fs-writeback.c
+===================================================================
+--- linux-3.2.orig/fs/fs-writeback.c
++++ linux-3.2/fs/fs-writeback.c
+@@ -1010,7 +1010,7 @@ static noinline void block_dump___mark_i
+ 
+ 		dentry = d_find_alias(inode);
+ 		if (dentry) {
+-			spin_lock(&dentry->d_lock);
++			seq_spin_lock(&dentry->d_lock);
+ 			name = (const char *) dentry->d_name.name;
+ 		}
+ 		printk(KERN_DEBUG
+@@ -1018,7 +1018,7 @@ static noinline void block_dump___mark_i
+ 		       current->comm, task_pid_nr(current), inode->i_ino,
+ 		       name, inode->i_sb->s_id);
+ 		if (dentry) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			dput(dentry);
+ 		}
+ 	}
+Index: linux-3.2/fs/fuse/inode.c
+===================================================================
+--- linux-3.2.orig/fs/fuse/inode.c
++++ linux-3.2/fs/fuse/inode.c
+@@ -652,11 +652,11 @@ static int fuse_encode_fh(struct dentry 
+ 	if (encode_parent) {
+ 		struct inode *parent;
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		parent = dentry->d_parent->d_inode;
+ 		nodeid = get_fuse_inode(parent)->nodeid;
+ 		generation = parent->i_generation;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 
+ 		fh[3] = (u32)(nodeid >> 32);
+ 		fh[4] = (u32)(nodeid & 0xffffffff);
+Index: linux-3.2/fs/gfs2/export.c
+===================================================================
+--- linux-3.2.orig/fs/gfs2/export.c
++++ linux-3.2/fs/gfs2/export.c
+@@ -53,11 +53,11 @@ static int gfs2_encode_fh(struct dentry 
+ 	if (!connectable || inode == sb->s_root->d_inode)
+ 		return *len;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	inode = dentry->d_parent->d_inode;
+ 	ip = GFS2_I(inode);
+ 	igrab(inode);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	fh[4] = cpu_to_be32(ip->i_no_formal_ino >> 32);
+ 	fh[5] = cpu_to_be32(ip->i_no_formal_ino & 0xFFFFFFFF);
+Index: linux-3.2/fs/isofs/export.c
+===================================================================
+--- linux-3.2.orig/fs/isofs/export.c
++++ linux-3.2/fs/isofs/export.c
+@@ -139,13 +139,13 @@ isofs_export_encode_fh(struct dentry *de
+ 	if (connectable && !S_ISDIR(inode->i_mode)) {
+ 		struct inode *parent;
+ 		struct iso_inode_info *eparent;
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		parent = dentry->d_parent->d_inode;
+ 		eparent = ISOFS_I(parent);
+ 		fh32[3] = eparent->i_iget5_block;
+ 		fh16[3] = (__u16)eparent->i_iget5_offset;  /* fh16 [sic] */
+ 		fh32[4] = parent->i_generation;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		len = 5;
+ 		type = 2;
+ 	}
+Index: linux-3.2/fs/libfs.c
+===================================================================
+--- linux-3.2.orig/fs/libfs.c
++++ linux-3.2/fs/libfs.c
+@@ -102,21 +102,21 @@ loff_t dcache_dir_lseek(struct file *fil
+ 			struct dentry *cursor = file->private_data;
+ 			loff_t n = file->f_pos - 2;
+ 
+-			spin_lock(&dentry->d_lock);
++			seq_spin_lock(&dentry->d_lock);
+ 			/* d_lock not required for cursor */
+ 			list_del(&cursor->d_u.d_child);
+ 			p = dentry->d_subdirs.next;
+ 			while (n && p != &dentry->d_subdirs) {
+ 				struct dentry *next;
+ 				next = list_entry(p, struct dentry, d_u.d_child);
+-				spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
++				seq_spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
+ 				if (simple_positive(next))
+ 					n--;
+-				spin_unlock(&next->d_lock);
++				seq_spin_unlock(&next->d_lock);
+ 				p = p->next;
+ 			}
+ 			list_add_tail(&cursor->d_u.d_child, p);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 		}
+ 	}
+ 	mutex_unlock(&dentry->d_inode->i_mutex);
+@@ -159,35 +159,35 @@ int dcache_readdir(struct file * filp, v
+ 			i++;
+ 			/* fallthrough */
+ 		default:
+-			spin_lock(&dentry->d_lock);
++			seq_spin_lock(&dentry->d_lock);
+ 			if (filp->f_pos == 2)
+ 				list_move(q, &dentry->d_subdirs);
+ 
+ 			for (p=q->next; p != &dentry->d_subdirs; p=p->next) {
+ 				struct dentry *next;
+ 				next = list_entry(p, struct dentry, d_u.d_child);
+-				spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
++				seq_spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
+ 				if (!simple_positive(next)) {
+-					spin_unlock(&next->d_lock);
++					seq_spin_unlock(&next->d_lock);
+ 					continue;
+ 				}
+ 
+-				spin_unlock(&next->d_lock);
+-				spin_unlock(&dentry->d_lock);
++				seq_spin_unlock(&next->d_lock);
++				seq_spin_unlock(&dentry->d_lock);
+ 				if (filldir(dirent, next->d_name.name, 
+ 					    next->d_name.len, filp->f_pos, 
+ 					    next->d_inode->i_ino, 
+ 					    dt_type(next->d_inode)) < 0)
+ 					return 0;
+-				spin_lock(&dentry->d_lock);
+-				spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
++				seq_spin_lock(&dentry->d_lock);
++				seq_spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
+ 				/* next is still alive */
+ 				list_move(q, p);
+-				spin_unlock(&next->d_lock);
++				seq_spin_unlock(&next->d_lock);
+ 				p = q;
+ 				filp->f_pos++;
+ 			}
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	return 0;
+ }
+@@ -281,18 +281,18 @@ int simple_empty(struct dentry *dentry)
+ 	struct dentry *child;
+ 	int ret = 0;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	list_for_each_entry(child, &dentry->d_subdirs, d_u.d_child) {
+-		spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
+ 		if (simple_positive(child)) {
+-			spin_unlock(&child->d_lock);
++			seq_spin_unlock(&child->d_lock);
+ 			goto out;
+ 		}
+-		spin_unlock(&child->d_lock);
++		seq_spin_unlock(&child->d_lock);
+ 	}
+ 	ret = 1;
+ out:
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return ret;
+ }
+ 
+Index: linux-3.2/fs/namei.c
+===================================================================
+--- linux-3.2.orig/fs/namei.c
++++ linux-3.2/fs/namei.c
+@@ -433,7 +433,7 @@ static int unlazy_walk(struct nameidata 
+ 				nd->root.dentry != fs->root.dentry)
+ 			goto err_root;
+ 	}
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	if (!dentry) {
+ 		if (!__d_rcu_to_refcount(parent, nd->seq))
+ 			goto err_parent;
+@@ -441,7 +441,7 @@ static int unlazy_walk(struct nameidata 
+ 	} else {
+ 		if (dentry->d_parent != parent)
+ 			goto err_parent;
+-		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 		if (!__d_rcu_to_refcount(dentry, nd->seq))
+ 			goto err_child;
+ 		/*
+@@ -453,9 +453,9 @@ static int unlazy_walk(struct nameidata 
+ 		BUG_ON(!IS_ROOT(dentry) && dentry->d_parent != parent);
+ 		BUG_ON(!parent->d_count);
+ 		parent->d_count++;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ 	if (want_root) {
+ 		path_get(&nd->root);
+ 		seq_spin_unlock(&fs->lock);
+@@ -468,9 +468,9 @@ static int unlazy_walk(struct nameidata 
+ 	return 0;
+ 
+ err_child:
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ err_parent:
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ err_root:
+ 	if (want_root)
+ 		seq_spin_unlock(&fs->lock);
+@@ -517,15 +517,15 @@ static int complete_walk(struct nameidat
+ 		nd->flags &= ~LOOKUP_RCU;
+ 		if (!(nd->flags & LOOKUP_ROOT))
+ 			nd->root.mnt = NULL;
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (unlikely(!__d_rcu_to_refcount(dentry, nd->seq))) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			rcu_read_unlock();
+ 			br_read_unlock(vfsmount_lock);
+ 			return -ECHILD;
+ 		}
+ 		BUG_ON(nd->inode != dentry->d_inode);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		mntget(nd->path.mnt);
+ 		rcu_read_unlock();
+ 		br_read_unlock(vfsmount_lock);
+@@ -569,7 +569,7 @@ static __always_inline void set_root_rcu
+ 		do {
+ 			seq = read_seqbegin(&fs->lock);
+ 			nd->root = fs->root;
+-			nd->seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
++			nd->seq = __read_seqbegin(&nd->root.dentry->d_lock);
+ 		} while (read_seqretry(&fs->lock, seq));
+ 	}
+ }
+@@ -901,7 +901,7 @@ static bool __follow_mount_rcu(struct na
+ 		path->mnt = mounted;
+ 		path->dentry = mounted->mnt_root;
+ 		nd->flags |= LOOKUP_JUMPED;
+-		nd->seq = read_seqcount_begin(&path->dentry->d_seq);
++		nd->seq = read_seqbegin(&path->dentry->d_lock);
+ 		/*
+ 		 * Update the inode too. We don't need to re-check the
+ 		 * dentry sequence number here after this d_inode read,
+@@ -921,7 +921,7 @@ static void follow_mount_rcu(struct name
+ 			break;
+ 		nd->path.mnt = mounted;
+ 		nd->path.dentry = mounted->mnt_root;
+-		nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
++		nd->seq = read_seqbegin(&nd->path.dentry->d_lock);
+ 	}
+ }
+ 
+@@ -939,8 +939,8 @@ static int follow_dotdot_rcu(struct name
+ 			struct dentry *parent = old->d_parent;
+ 			unsigned seq;
+ 
+-			seq = read_seqcount_begin(&parent->d_seq);
+-			if (read_seqcount_retry(&old->d_seq, nd->seq))
++			seq = read_seqbegin(&parent->d_lock);
++			if (read_seqretry(&old->d_lock, nd->seq))
+ 				goto failed;
+ 			nd->path.dentry = parent;
+ 			nd->seq = seq;
+@@ -948,7 +948,7 @@ static int follow_dotdot_rcu(struct name
+ 		}
+ 		if (!follow_up_rcu(&nd->path))
+ 			break;
+-		nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
++		nd->seq = read_seqbegin(&nd->path.dentry->d_lock);
+ 	}
+ 	follow_mount_rcu(nd);
+ 	nd->inode = nd->path.dentry->d_inode;
+@@ -1134,7 +1134,7 @@ static int do_lookup(struct nameidata *n
+ 			goto unlazy;
+ 
+ 		/* Memory barrier in read_seqcount_begin of child is enough */
+-		if (__read_seqcount_retry(&parent->d_seq, nd->seq))
++		if (__read_seqretry(&parent->d_lock, nd->seq))
+ 			return -ECHILD;
+ 		nd->seq = seq;
+ 
+@@ -1491,7 +1491,7 @@ static int path_init(int dfd, const char
+ 		if (flags & LOOKUP_RCU) {
+ 			br_read_lock(vfsmount_lock);
+ 			rcu_read_lock();
+-			nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
++			nd->seq = __read_seqbegin(&nd->path.dentry->d_lock);
+ 		} else {
+ 			path_get(&nd->path);
+ 		}
+@@ -1521,7 +1521,7 @@ static int path_init(int dfd, const char
+ 			do {
+ 				seq = read_seqbegin(&fs->lock);
+ 				nd->path = fs->pwd;
+-				nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
++				nd->seq = __read_seqbegin(&nd->path.dentry->d_lock);
+ 			} while (read_seqretry(&fs->lock, seq));
+ 		} else {
+ 			get_fs_pwd(current->fs, &nd->path);
+@@ -1550,7 +1550,7 @@ static int path_init(int dfd, const char
+ 		if (flags & LOOKUP_RCU) {
+ 			if (fput_needed)
+ 				*fp = file;
+-			nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
++			nd->seq = __read_seqbegin(&nd->path.dentry->d_lock);
+ 			br_read_lock(vfsmount_lock);
+ 			rcu_read_lock();
+ 		} else {
+@@ -2615,10 +2615,10 @@ SYSCALL_DEFINE2(mkdir, const char __user
+ void dentry_unhash(struct dentry *dentry)
+ {
+ 	shrink_dcache_parent(dentry);
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_count == 1)
+ 		__d_drop(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ int vfs_rmdir(struct inode *dir, struct dentry *dentry)
+Index: linux-3.2/fs/namespace.c
+===================================================================
+--- linux-3.2.orig/fs/namespace.c
++++ linux-3.2/fs/namespace.c
+@@ -560,9 +560,9 @@ static void dentry_reset_mounted(struct 
+ 				return;
+ 		}
+ 	}
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	dentry->d_flags &= ~DCACHE_MOUNTED;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /*
+@@ -587,9 +587,9 @@ void mnt_set_mountpoint(struct vfsmount 
+ {
+ 	child_mnt->mnt_parent = mntget(mnt);
+ 	child_mnt->mnt_mountpoint = dget(dentry);
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	dentry->d_flags |= DCACHE_MOUNTED;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /*
+Index: linux-3.2/fs/ncpfs/dir.c
+===================================================================
+--- linux-3.2.orig/fs/ncpfs/dir.c
++++ linux-3.2/fs/ncpfs/dir.c
+@@ -388,7 +388,7 @@ ncp_dget_fpos(struct dentry *dentry, str
+ 	}
+ 
+ 	/* If a pointer is invalid, we search the dentry. */
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	next = parent->d_subdirs.next;
+ 	while (next != &parent->d_subdirs) {
+ 		dent = list_entry(next, struct dentry, d_u.d_child);
+@@ -397,12 +397,12 @@ ncp_dget_fpos(struct dentry *dentry, str
+ 				dget(dent);
+ 			else
+ 				dent = NULL;
+-			spin_unlock(&parent->d_lock);
++			seq_spin_unlock(&parent->d_lock);
+ 			goto out;
+ 		}
+ 		next = next->next;
+ 	}
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ 	return NULL;
+ 
+ out:
+Index: linux-3.2/fs/ncpfs/ncplib_kernel.h
+===================================================================
+--- linux-3.2.orig/fs/ncpfs/ncplib_kernel.h
++++ linux-3.2/fs/ncpfs/ncplib_kernel.h
+@@ -191,7 +191,7 @@ ncp_renew_dentries(struct dentry *parent
+ 	struct list_head *next;
+ 	struct dentry *dentry;
+ 
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	next = parent->d_subdirs.next;
+ 	while (next != &parent->d_subdirs) {
+ 		dentry = list_entry(next, struct dentry, d_u.d_child);
+@@ -203,7 +203,7 @@ ncp_renew_dentries(struct dentry *parent
+ 
+ 		next = next->next;
+ 	}
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ }
+ 
+ static inline void
+@@ -213,7 +213,7 @@ ncp_invalidate_dircache_entries(struct d
+ 	struct list_head *next;
+ 	struct dentry *dentry;
+ 
+-	spin_lock(&parent->d_lock);
++	seq_spin_lock(&parent->d_lock);
+ 	next = parent->d_subdirs.next;
+ 	while (next != &parent->d_subdirs) {
+ 		dentry = list_entry(next, struct dentry, d_u.d_child);
+@@ -221,7 +221,7 @@ ncp_invalidate_dircache_entries(struct d
+ 		ncp_age_dentry(server, dentry);
+ 		next = next->next;
+ 	}
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ }
+ 
+ struct ncp_cache_head {
+Index: linux-3.2/fs/nfs/dir.c
+===================================================================
+--- linux-3.2.orig/fs/nfs/dir.c
++++ linux-3.2/fs/nfs/dir.c
+@@ -1823,9 +1823,9 @@ static int nfs_unlink(struct inode *dir,
+ 	dfprintk(VFS, "NFS: unlink(%s/%ld, %s)\n", dir->i_sb->s_id,
+ 		dir->i_ino, dentry->d_name.name);
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_count > 1) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		/* Start asynchronous writeout of the inode */
+ 		write_inode_now(dentry->d_inode, 0);
+ 		error = nfs_sillyrename(dir, dentry);
+@@ -1835,7 +1835,7 @@ static int nfs_unlink(struct inode *dir,
+ 		__d_drop(dentry);
+ 		need_rehash = 1;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	error = nfs_safe_remove(dentry);
+ 	if (!error || error == -ENOENT) {
+ 		nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
+Index: linux-3.2/fs/nfs/getroot.c
+===================================================================
+--- linux-3.2.orig/fs/nfs/getroot.c
++++ linux-3.2/fs/nfs/getroot.c
+@@ -64,9 +64,9 @@ static int nfs_superblock_set_dummy_root
+ 		 * Oops, since the test for IS_ROOT() will fail.
+ 		 */
+ 		spin_lock(&sb->s_root->d_inode->i_lock);
+-		spin_lock(&sb->s_root->d_lock);
++		seq_spin_lock(&sb->s_root->d_lock);
+ 		list_del_init(&sb->s_root->d_alias);
+-		spin_unlock(&sb->s_root->d_lock);
++		seq_spin_unlock(&sb->s_root->d_lock);
+ 		spin_unlock(&sb->s_root->d_inode->i_lock);
+ 	}
+ 	return 0;
+@@ -126,12 +126,12 @@ struct dentry *nfs_get_root(struct super
+ 	}
+ 
+ 	security_d_instantiate(ret, inode);
+-	spin_lock(&ret->d_lock);
++	seq_spin_lock(&ret->d_lock);
+ 	if (IS_ROOT(ret) && !(ret->d_flags & DCACHE_NFSFS_RENAMED)) {
+ 		ret->d_fsdata = name;
+ 		name = NULL;
+ 	}
+-	spin_unlock(&ret->d_lock);
++	seq_spin_unlock(&ret->d_lock);
+ out:
+ 	if (name)
+ 		kfree(name);
+@@ -250,12 +250,12 @@ struct dentry *nfs4_get_root(struct supe
+ 	}
+ 
+ 	security_d_instantiate(ret, inode);
+-	spin_lock(&ret->d_lock);
++	seq_spin_lock(&ret->d_lock);
+ 	if (IS_ROOT(ret) && !(ret->d_flags & DCACHE_NFSFS_RENAMED)) {
+ 		ret->d_fsdata = name;
+ 		name = NULL;
+ 	}
+-	spin_unlock(&ret->d_lock);
++	seq_spin_unlock(&ret->d_lock);
+ out:
+ 	if (name)
+ 		kfree(name);
+Index: linux-3.2/fs/nfs/namespace.c
+===================================================================
+--- linux-3.2.orig/fs/nfs/namespace.c
++++ linux-3.2/fs/nfs/namespace.c
+@@ -60,7 +60,7 @@ rename_retry:
+ 	seq = read_seqbegin(&rename_lock);
+ 	rcu_read_lock();
+ 	while (1) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (IS_ROOT(dentry))
+ 			break;
+ 		namelen = dentry->d_name.len;
+@@ -70,17 +70,17 @@ rename_retry:
+ 		end -= namelen;
+ 		memcpy(end, dentry->d_name.name, namelen);
+ 		*--end = '/';
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		dentry = dentry->d_parent;
+ 	}
+ 	if (read_seqretry(&rename_lock, seq)) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		rcu_read_unlock();
+ 		goto rename_retry;
+ 	}
+ 	if (*end != '/') {
+ 		if (--buflen < 0) {
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			rcu_read_unlock();
+ 			goto Elong;
+ 		}
+@@ -89,7 +89,7 @@ rename_retry:
+ 	*p = end;
+ 	base = dentry->d_fsdata;
+ 	if (!base) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		rcu_read_unlock();
+ 		WARN_ON(1);
+ 		return end;
+@@ -100,17 +100,17 @@ rename_retry:
+ 		namelen--;
+ 	buflen -= namelen;
+ 	if (buflen < 0) {
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		rcu_read_unlock();
+ 		goto Elong;
+ 	}
+ 	end -= namelen;
+ 	memcpy(end, base, namelen);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	rcu_read_unlock();
+ 	return end;
+ Elong_unlock:
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	rcu_read_unlock();
+ 	if (read_seqretry(&rename_lock, seq))
+ 		goto rename_retry;
+Index: linux-3.2/fs/nfs/unlink.c
+===================================================================
+--- linux-3.2.orig/fs/nfs/unlink.c
++++ linux-3.2/fs/nfs/unlink.c
+@@ -156,7 +156,7 @@ static int nfs_do_call_unlink(struct den
+ 		 */
+ 		nfs_free_dname(data);
+ 		ret = nfs_copy_dname(alias, data);
+-		spin_lock(&alias->d_lock);
++		seq_spin_lock(&alias->d_lock);
+ 		if (ret == 0 && alias->d_inode != NULL &&
+ 		    !(alias->d_flags & DCACHE_NFSFS_RENAMED)) {
+ 			devname_garbage = alias->d_fsdata;
+@@ -165,7 +165,7 @@ static int nfs_do_call_unlink(struct den
+ 			ret = 1;
+ 		} else
+ 			ret = 0;
+-		spin_unlock(&alias->d_lock);
++		seq_spin_unlock(&alias->d_lock);
+ 		nfs_dec_sillycount(dir);
+ 		dput(alias);
+ 		/*
+@@ -274,13 +274,13 @@ nfs_async_unlink(struct inode *dir, stru
+ 	data->res.dir_attr = &data->dir_attr;
+ 
+ 	status = -EBUSY;
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_flags & DCACHE_NFSFS_RENAMED)
+ 		goto out_unlock;
+ 	dentry->d_flags |= DCACHE_NFSFS_RENAMED;
+ 	devname_garbage = dentry->d_fsdata;
+ 	dentry->d_fsdata = data;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	/*
+ 	 * If we'd displaced old cached devname, free it.  At that
+ 	 * point dentry is definitely not a root, so we won't need
+@@ -290,7 +290,7 @@ nfs_async_unlink(struct inode *dir, stru
+ 		kfree(devname_garbage);
+ 	return 0;
+ out_unlock:
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	put_rpccred(data->cred);
+ out_free:
+ 	kfree(data);
+@@ -312,13 +312,13 @@ nfs_complete_unlink(struct dentry *dentr
+ {
+ 	struct nfs_unlinkdata	*data = NULL;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
+ 		dentry->d_flags &= ~DCACHE_NFSFS_RENAMED;
+ 		data = dentry->d_fsdata;
+ 		dentry->d_fsdata = NULL;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 
+ 	if (data != NULL && (NFS_STALE(inode) || !nfs_call_unlink(dentry, data)))
+ 		nfs_free_unlinkdata(data);
+@@ -328,17 +328,17 @@ nfs_complete_unlink(struct dentry *dentr
+ static void
+ nfs_cancel_async_unlink(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	if (dentry->d_flags & DCACHE_NFSFS_RENAMED) {
+ 		struct nfs_unlinkdata *data = dentry->d_fsdata;
+ 
+ 		dentry->d_flags &= ~DCACHE_NFSFS_RENAMED;
+ 		dentry->d_fsdata = NULL;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		nfs_free_unlinkdata(data);
+ 		return;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ struct nfs_renamedata {
+Index: linux-3.2/fs/nilfs2/namei.c
+===================================================================
+--- linux-3.2.orig/fs/nilfs2/namei.c
++++ linux-3.2/fs/nilfs2/namei.c
+@@ -538,11 +538,11 @@ static int nilfs_encode_fh(struct dentry
+ 	if (connectable && !S_ISDIR(inode->i_mode)) {
+ 		struct inode *parent;
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		parent = dentry->d_parent->d_inode;
+ 		fid->parent_ino = parent->i_ino;
+ 		fid->parent_gen = parent->i_generation;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 
+ 		type = FILEID_NILFS_WITH_PARENT;
+ 		*lenp = NILFS_FID_SIZE_CONNECTABLE;
+Index: linux-3.2/fs/notify/fsnotify.c
+===================================================================
+--- linux-3.2.orig/fs/notify/fsnotify.c
++++ linux-3.2/fs/notify/fsnotify.c
+@@ -68,19 +68,19 @@ void __fsnotify_update_child_dentry_flag
+ 		/* run all of the children of the original inode and fix their
+ 		 * d_flags to indicate parental interest (their parent is the
+ 		 * original inode) */
+-		spin_lock(&alias->d_lock);
++		seq_spin_lock(&alias->d_lock);
+ 		list_for_each_entry(child, &alias->d_subdirs, d_u.d_child) {
+ 			if (!child->d_inode)
+ 				continue;
+ 
+-			spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
++			seq_spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
+ 			if (watched)
+ 				child->d_flags |= DCACHE_FSNOTIFY_PARENT_WATCHED;
+ 			else
+ 				child->d_flags &= ~DCACHE_FSNOTIFY_PARENT_WATCHED;
+-			spin_unlock(&child->d_lock);
++			seq_spin_unlock(&child->d_lock);
+ 		}
+-		spin_unlock(&alias->d_lock);
++		seq_spin_unlock(&alias->d_lock);
+ 	}
+ 	spin_unlock(&inode->i_lock);
+ }
+Index: linux-3.2/fs/notify/vfsmount_mark.c
+===================================================================
+--- linux-3.2.orig/fs/notify/vfsmount_mark.c
++++ linux-3.2/fs/notify/vfsmount_mark.c
+@@ -35,13 +35,13 @@ void fsnotify_clear_marks_by_mount(struc
+ 	struct hlist_node *pos, *n;
+ 	LIST_HEAD(free_list);
+ 
+-	spin_lock(&mnt->mnt_root->d_lock);
++	seq_spin_lock(&mnt->mnt_root->d_lock);
+ 	hlist_for_each_entry_safe(mark, pos, n, &mnt->mnt_fsnotify_marks, m.m_list) {
+ 		list_add(&mark->m.free_m_list, &free_list);
+ 		hlist_del_init_rcu(&mark->m.m_list);
+ 		fsnotify_get_mark(mark);
+ 	}
+-	spin_unlock(&mnt->mnt_root->d_lock);
++	seq_spin_unlock(&mnt->mnt_root->d_lock);
+ 
+ 	list_for_each_entry_safe(mark, lmark, &free_list, m.free_m_list) {
+ 		fsnotify_destroy_mark(mark);
+@@ -63,7 +63,7 @@ static void fsnotify_recalc_vfsmount_mas
+ 	struct hlist_node *pos;
+ 	__u32 new_mask = 0;
+ 
+-	assert_spin_locked(&mnt->mnt_root->d_lock);
++	assert_seq_spin_locked(&mnt->mnt_root->d_lock);
+ 
+ 	hlist_for_each_entry(mark, pos, &mnt->mnt_fsnotify_marks, m.m_list)
+ 		new_mask |= mark->mask;
+@@ -76,9 +76,9 @@ static void fsnotify_recalc_vfsmount_mas
+  */
+ void fsnotify_recalc_vfsmount_mask(struct vfsmount *mnt)
+ {
+-	spin_lock(&mnt->mnt_root->d_lock);
++	seq_spin_lock(&mnt->mnt_root->d_lock);
+ 	fsnotify_recalc_vfsmount_mask_locked(mnt);
+-	spin_unlock(&mnt->mnt_root->d_lock);
++	seq_spin_unlock(&mnt->mnt_root->d_lock);
+ }
+ 
+ void fsnotify_destroy_vfsmount_mark(struct fsnotify_mark *mark)
+@@ -88,14 +88,14 @@ void fsnotify_destroy_vfsmount_mark(stru
+ 	assert_spin_locked(&mark->lock);
+ 	assert_spin_locked(&mark->group->mark_lock);
+ 
+-	spin_lock(&mnt->mnt_root->d_lock);
++	seq_spin_lock(&mnt->mnt_root->d_lock);
+ 
+ 	hlist_del_init_rcu(&mark->m.m_list);
+ 	mark->m.mnt = NULL;
+ 
+ 	fsnotify_recalc_vfsmount_mask_locked(mnt);
+ 
+-	spin_unlock(&mnt->mnt_root->d_lock);
++	seq_spin_unlock(&mnt->mnt_root->d_lock);
+ }
+ 
+ static struct fsnotify_mark *fsnotify_find_vfsmount_mark_locked(struct fsnotify_group *group,
+@@ -104,7 +104,7 @@ static struct fsnotify_mark *fsnotify_fi
+ 	struct fsnotify_mark *mark;
+ 	struct hlist_node *pos;
+ 
+-	assert_spin_locked(&mnt->mnt_root->d_lock);
++	assert_seq_spin_locked(&mnt->mnt_root->d_lock);
+ 
+ 	hlist_for_each_entry(mark, pos, &mnt->mnt_fsnotify_marks, m.m_list) {
+ 		if (mark->group == group) {
+@@ -124,9 +124,9 @@ struct fsnotify_mark *fsnotify_find_vfsm
+ {
+ 	struct fsnotify_mark *mark;
+ 
+-	spin_lock(&mnt->mnt_root->d_lock);
++	seq_spin_lock(&mnt->mnt_root->d_lock);
+ 	mark = fsnotify_find_vfsmount_mark_locked(group, mnt);
+-	spin_unlock(&mnt->mnt_root->d_lock);
++	seq_spin_unlock(&mnt->mnt_root->d_lock);
+ 
+ 	return mark;
+ }
+@@ -149,7 +149,7 @@ int fsnotify_add_vfsmount_mark(struct fs
+ 	assert_spin_locked(&mark->lock);
+ 	assert_spin_locked(&group->mark_lock);
+ 
+-	spin_lock(&mnt->mnt_root->d_lock);
++	seq_spin_lock(&mnt->mnt_root->d_lock);
+ 
+ 	mark->m.mnt = mnt;
+ 
+@@ -184,7 +184,7 @@ int fsnotify_add_vfsmount_mark(struct fs
+ 	hlist_add_after_rcu(last, &mark->m.m_list);
+ out:
+ 	fsnotify_recalc_vfsmount_mask_locked(mnt);
+-	spin_unlock(&mnt->mnt_root->d_lock);
++	seq_spin_unlock(&mnt->mnt_root->d_lock);
+ 
+ 	return ret;
+ }
+Index: linux-3.2/fs/ocfs2/dcache.c
+===================================================================
+--- linux-3.2.orig/fs/ocfs2/dcache.c
++++ linux-3.2/fs/ocfs2/dcache.c
+@@ -177,16 +177,16 @@ struct dentry *ocfs2_find_local_alias(st
+ 	list_for_each(p, &inode->i_dentry) {
+ 		dentry = list_entry(p, struct dentry, d_alias);
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		if (ocfs2_match_dentry(dentry, parent_blkno, skip_unhashed)) {
+ 			trace_ocfs2_find_local_alias(dentry->d_name.len,
+ 						     dentry->d_name.name);
+ 
+ 			dget_dlock(dentry);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			break;
+ 		}
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 
+ 		dentry = NULL;
+ 	}
+Index: linux-3.2/fs/ocfs2/export.c
+===================================================================
+--- linux-3.2.orig/fs/ocfs2/export.c
++++ linux-3.2/fs/ocfs2/export.c
+@@ -214,7 +214,7 @@ static int ocfs2_encode_fh(struct dentry
+ 	if (connectable && !S_ISDIR(inode->i_mode)) {
+ 		struct inode *parent;
+ 
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 
+ 		parent = dentry->d_parent->d_inode;
+ 		blkno = OCFS2_I(parent)->ip_blkno;
+@@ -224,7 +224,7 @@ static int ocfs2_encode_fh(struct dentry
+ 		fh[4] = cpu_to_le32((u32)(blkno & 0xffffffff));
+ 		fh[5] = cpu_to_le32(generation);
+ 
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 
+ 		len = 6;
+ 		type = 2;
+Index: linux-3.2/fs/reiserfs/inode.c
+===================================================================
+--- linux-3.2.orig/fs/reiserfs/inode.c
++++ linux-3.2/fs/reiserfs/inode.c
+@@ -1614,7 +1614,7 @@ int reiserfs_encode_fh(struct dentry *de
+ 	if (maxlen < 5 || !need_parent)
+ 		return 3;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	inode = dentry->d_parent->d_inode;
+ 	data[3] = inode->i_ino;
+ 	data[4] = le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
+@@ -1623,7 +1623,7 @@ int reiserfs_encode_fh(struct dentry *de
+ 		data[5] = inode->i_generation;
+ 		*lenp = 6;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return *lenp;
+ }
+ 
+Index: linux-3.2/fs/udf/namei.c
+===================================================================
+--- linux-3.2.orig/fs/udf/namei.c
++++ linux-3.2/fs/udf/namei.c
+@@ -1296,13 +1296,13 @@ static int udf_encode_fh(struct dentry *
+ 	fid->udf.generation = inode->i_generation;
+ 
+ 	if (connectable && !S_ISDIR(inode->i_mode)) {
+-		spin_lock(&de->d_lock);
++		seq_spin_lock(&de->d_lock);
+ 		inode = de->d_parent->d_inode;
+ 		location = UDF_I(inode)->i_location;
+ 		fid->udf.parent_block = location.logicalBlockNum;
+ 		fid->udf.parent_partref = location.partitionReferenceNum;
+ 		fid->udf.parent_generation = inode->i_generation;
+-		spin_unlock(&de->d_lock);
++		seq_spin_unlock(&de->d_lock);
+ 		*lenp = 5;
+ 		type = FILEID_UDF_WITH_PARENT;
+ 	}
+Index: linux-3.2/fs/xfs/xfs_export.c
+===================================================================
+--- linux-3.2.orig/fs/xfs/xfs_export.c
++++ linux-3.2/fs/xfs/xfs_export.c
+@@ -97,20 +97,20 @@ xfs_fs_encode_fh(
+ 
+ 	switch (fileid_type) {
+ 	case FILEID_INO32_GEN_PARENT:
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		fid->i32.parent_ino = XFS_I(dentry->d_parent->d_inode)->i_ino;
+ 		fid->i32.parent_gen = dentry->d_parent->d_inode->i_generation;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		/*FALLTHRU*/
+ 	case FILEID_INO32_GEN:
+ 		fid->i32.ino = XFS_I(inode)->i_ino;
+ 		fid->i32.gen = inode->i_generation;
+ 		break;
+ 	case FILEID_INO32_GEN_PARENT | XFS_FILEID_TYPE_64FLAG:
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		fid64->parent_ino = XFS_I(dentry->d_parent->d_inode)->i_ino;
+ 		fid64->parent_gen = dentry->d_parent->d_inode->i_generation;
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 		/*FALLTHRU*/
+ 	case FILEID_INO32_GEN | XFS_FILEID_TYPE_64FLAG:
+ 		fid64->ino = XFS_I(inode)->i_ino;
+Index: linux-3.2/include/linux/dcache.h
+===================================================================
+--- linux-3.2.orig/include/linux/dcache.h
++++ linux-3.2/include/linux/dcache.h
+@@ -116,7 +116,7 @@ full_name_hash(const unsigned char *name
+ struct dentry {
+ 	/* RCU lookup touched fields */
+ 	unsigned int d_flags;		/* protected by d_lock */
+-	seqcount_t d_seq;		/* per dentry seqlock */
++	seqlock_t d_lock;		/* per dentry seqlock */
+ 	struct hlist_bl_node d_hash;	/* lookup hash list */
+ 	struct dentry *d_parent;	/* parent directory */
+ 	struct qstr d_name;
+@@ -126,7 +126,6 @@ struct dentry {
+ 
+ 	/* Ref lookup also touches following */
+ 	unsigned int d_count;		/* protected by d_lock */
+-	spinlock_t d_lock;		/* per dentry lock */
+ 	const struct dentry_operations *d_op;
+ 	struct super_block *d_sb;	/* The root of the dentry tree */
+ 	unsigned long d_time;		/* used by d_revalidate */
+@@ -323,8 +322,8 @@ static inline int __d_rcu_to_refcount(st
+ {
+ 	int ret = 0;
+ 
+-	assert_spin_locked(&dentry->d_lock);
+-	if (!read_seqcount_retry(&dentry->d_seq, seq)) {
++	assert_seq_spin_locked(&dentry->d_lock);
++	if (!read_seqretry(&dentry->d_lock, seq)) {
+ 		ret = 1;
+ 		dentry->d_count++;
+ 	}
+@@ -367,9 +366,9 @@ static inline struct dentry *dget_dlock(
+ static inline struct dentry *dget(struct dentry *dentry)
+ {
+ 	if (dentry) {
+-		spin_lock(&dentry->d_lock);
++		seq_spin_lock(&dentry->d_lock);
+ 		dget_dlock(dentry);
+-		spin_unlock(&dentry->d_lock);
++		seq_spin_unlock(&dentry->d_lock);
+ 	}
+ 	return dentry;
+ }
+@@ -400,9 +399,9 @@ static inline int cant_mount(struct dent
+ 
+ static inline void dont_mount(struct dentry *dentry)
+ {
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	dentry->d_flags |= DCACHE_CANT_MOUNT;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ extern void dput(struct dentry *);
+Index: linux-3.2/include/linux/fs.h
+===================================================================
+--- linux-3.2.orig/include/linux/fs.h
++++ linux-3.2/include/linux/fs.h
+@@ -2603,9 +2603,9 @@ static inline ino_t parent_ino(struct de
+ 	 * Don't strictly need d_lock here? If the parent ino could change
+ 	 * then surely we'd have a deeper race in the caller?
+ 	 */
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	res = dentry->d_parent->d_inode->i_ino;
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ 	return res;
+ }
+ 
+Index: linux-3.2/include/linux/fsnotify_backend.h
+===================================================================
+--- linux-3.2.orig/include/linux/fsnotify_backend.h
++++ linux-3.2/include/linux/fsnotify_backend.h
+@@ -329,7 +329,7 @@ static inline void __fsnotify_update_dca
+ {
+ 	struct dentry *parent;
+ 
+-	assert_spin_locked(&dentry->d_lock);
++	assert_seq_spin_locked(&dentry->d_lock);
+ 
+ 	/*
+ 	 * Serialisation of setting PARENT_WATCHED on the dentries is provided
+@@ -353,9 +353,9 @@ static inline void __fsnotify_d_instanti
+ 	if (!inode)
+ 		return;
+ 
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	__fsnotify_update_dcache_flags(dentry);
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /* called from fsnotify listeners, such as fanotify or dnotify */
+Index: linux-3.2/kernel/cgroup.c
+===================================================================
+--- linux-3.2.orig/kernel/cgroup.c
++++ linux-3.2/kernel/cgroup.c
+@@ -870,29 +870,29 @@ static void cgroup_clear_directory(struc
+ 	struct list_head *node;
+ 
+ 	BUG_ON(!mutex_is_locked(&dentry->d_inode->i_mutex));
+-	spin_lock(&dentry->d_lock);
++	seq_spin_lock(&dentry->d_lock);
+ 	node = dentry->d_subdirs.next;
+ 	while (node != &dentry->d_subdirs) {
+ 		struct dentry *d = list_entry(node, struct dentry, d_u.d_child);
+ 
+-		spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
+ 		list_del_init(node);
+ 		if (d->d_inode) {
+ 			/* This should never be called on a cgroup
+ 			 * directory with child cgroups */
+ 			BUG_ON(d->d_inode->i_mode & S_IFDIR);
+ 			dget_dlock(d);
+-			spin_unlock(&d->d_lock);
+-			spin_unlock(&dentry->d_lock);
++			seq_spin_unlock(&d->d_lock);
++			seq_spin_unlock(&dentry->d_lock);
+ 			d_delete(d);
+ 			simple_unlink(dentry->d_inode, d);
+ 			dput(d);
+-			spin_lock(&dentry->d_lock);
++			seq_spin_lock(&dentry->d_lock);
+ 		} else
+-			spin_unlock(&d->d_lock);
++			seq_spin_unlock(&d->d_lock);
+ 		node = dentry->d_subdirs.next;
+ 	}
+-	spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
+ }
+ 
+ /*
+@@ -905,11 +905,11 @@ static void cgroup_d_remove_dir(struct d
+ 	cgroup_clear_directory(dentry);
+ 
+ 	parent = dentry->d_parent;
+-	spin_lock(&parent->d_lock);
+-	spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
++	seq_spin_lock(&parent->d_lock);
++	seq_spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
+ 	list_del_init(&dentry->d_u.d_child);
+-	spin_unlock(&dentry->d_lock);
+-	spin_unlock(&parent->d_lock);
++	seq_spin_unlock(&dentry->d_lock);
++	seq_spin_unlock(&parent->d_lock);
+ 	remove_dir(dentry);
+ }
+ 
+Index: linux-3.2/net/sunrpc/rpc_pipe.c
+===================================================================
+--- linux-3.2.orig/net/sunrpc/rpc_pipe.c
++++ linux-3.2/net/sunrpc/rpc_pipe.c
+@@ -397,14 +397,14 @@ rpc_info_open(struct inode *inode, struc
+ 	if (!ret) {
+ 		struct seq_file *m = file->private_data;
+ 
+-		spin_lock(&file->f_path.dentry->d_lock);
++		seq_spin_lock(&file->f_path.dentry->d_lock);
+ 		if (!d_unhashed(file->f_path.dentry))
+ 			clnt = RPC_I(inode)->private;
+ 		if (clnt != NULL && atomic_inc_not_zero(&clnt->cl_count)) {
+-			spin_unlock(&file->f_path.dentry->d_lock);
++			seq_spin_unlock(&file->f_path.dentry->d_lock);
+ 			m->private = clnt;
+ 		} else {
+-			spin_unlock(&file->f_path.dentry->d_lock);
++			seq_spin_unlock(&file->f_path.dentry->d_lock);
+ 			single_release(inode, file);
+ 			ret = -EINVAL;
+ 		}
+Index: linux-3.2/security/selinux/selinuxfs.c
+===================================================================
+--- linux-3.2.orig/security/selinux/selinuxfs.c
++++ linux-3.2/security/selinux/selinuxfs.c
+@@ -1194,28 +1194,28 @@ static void sel_remove_entries(struct de
+ {
+ 	struct list_head *node;
+ 
+-	spin_lock(&de->d_lock);
++	seq_spin_lock(&de->d_lock);
+ 	node = de->d_subdirs.next;
+ 	while (node != &de->d_subdirs) {
+ 		struct dentry *d = list_entry(node, struct dentry, d_u.d_child);
+ 
+-		spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
++		seq_spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
+ 		list_del_init(node);
+ 
+ 		if (d->d_inode) {
+ 			dget_dlock(d);
+-			spin_unlock(&de->d_lock);
+-			spin_unlock(&d->d_lock);
++			seq_spin_unlock(&de->d_lock);
++			seq_spin_unlock(&d->d_lock);
+ 			d_delete(d);
+ 			simple_unlink(de->d_inode, d);
+ 			dput(d);
+-			spin_lock(&de->d_lock);
++			seq_spin_lock(&de->d_lock);
+ 		} else
+-			spin_unlock(&d->d_lock);
++			seq_spin_unlock(&d->d_lock);
+ 		node = de->d_subdirs.next;
+ 	}
+ 
+-	spin_unlock(&de->d_lock);
++	seq_spin_unlock(&de->d_lock);
+ }
+ 
+ #define BOOL_DIR_NAME "booleans"

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-protect-opencoded-isize-seqcount.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-protect-opencoded-isize-seqcount.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-protect-opencoded-isize-seqcount.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-protect-opencoded-isize-seqcount.patch)
@@ -0,0 +1,31 @@
+Subject: fs: Protect open coded isize seqcount
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 01 Mar 2012 16:12:47 +0100
+
+A writer might be preempted in the write side critical section on
+RT. Disable preemption to avoid endless spinning of a preempting
+reader.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+
+---
+ include/linux/fs.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: linux-3.2/include/linux/fs.h
+===================================================================
+--- linux-3.2.orig/include/linux/fs.h
++++ linux-3.2/include/linux/fs.h
+@@ -903,9 +903,11 @@ static inline loff_t i_size_read(const s
+ static inline void i_size_write(struct inode *inode, loff_t i_size)
+ {
+ #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
++	preempt_disable_rt();
+ 	write_seqcount_begin(&inode->i_size_seqcount);
+ 	inode->i_size = i_size;
+ 	write_seqcount_end(&inode->i_size_seqcount);
++	preempt_enable_rt();
+ #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
+ 	preempt_disable();
+ 	inode->i_size = i_size;

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-struct-use-seqlock.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-struct-use-seqlock.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/fs-struct-use-seqlock.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/fs-struct-use-seqlock.patch)
@@ -0,0 +1,339 @@
+Subject: fs: fs_struct use seqlock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Mon, 27 Feb 2012 17:58:13 +0100
+
+Replace the open coded seqlock with a real one, so RT can handle it.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+
+---
+ fs/exec.c                 |    4 ++--
+ fs/fhandle.c              |    4 ++--
+ fs/fs_struct.c            |   46 ++++++++++++++++++----------------------------
+ fs/namei.c                |   14 +++++++-------
+ include/linux/fs_struct.h |   16 +++++++---------
+ kernel/fork.c             |   10 +++++-----
+ 6 files changed, 41 insertions(+), 53 deletions(-)
+
+Index: linux-3.2/fs/exec.c
+===================================================================
+--- linux-3.2.orig/fs/exec.c
++++ linux-3.2/fs/exec.c
+@@ -1239,7 +1239,7 @@ int check_unsafe_exec(struct linux_binpr
+ 	}
+ 
+ 	n_fs = 1;
+-	spin_lock(&p->fs->lock);
++	seq_spin_lock(&p->fs->lock);
+ 	rcu_read_lock();
+ 	for (t = next_thread(p); t != p; t = next_thread(t)) {
+ 		if (t->fs == p->fs)
+@@ -1256,7 +1256,7 @@ int check_unsafe_exec(struct linux_binpr
+ 			res = 1;
+ 		}
+ 	}
+-	spin_unlock(&p->fs->lock);
++	seq_spin_unlock(&p->fs->lock);
+ 
+ 	return res;
+ }
+Index: linux-3.2/fs/fhandle.c
+===================================================================
+--- linux-3.2.orig/fs/fhandle.c
++++ linux-3.2/fs/fhandle.c
+@@ -115,10 +115,10 @@ static struct vfsmount *get_vfsmount_fro
+ 
+ 	if (fd == AT_FDCWD) {
+ 		struct fs_struct *fs = current->fs;
+-		spin_lock(&fs->lock);
++		seq_spin_lock(&fs->lock);
+ 		path = fs->pwd;
+ 		mntget(path.mnt);
+-		spin_unlock(&fs->lock);
++		seq_spin_unlock(&fs->lock);
+ 	} else {
+ 		int fput_needed;
+ 		struct file *file = fget_light(fd, &fput_needed);
+Index: linux-3.2/fs/fs_struct.c
+===================================================================
+--- linux-3.2.orig/fs/fs_struct.c
++++ linux-3.2/fs/fs_struct.c
+@@ -26,13 +26,11 @@ void set_fs_root(struct fs_struct *fs, s
+ {
+ 	struct path old_root;
+ 
+-	spin_lock(&fs->lock);
+-	write_seqcount_begin(&fs->seq);
++	write_seqlock(&fs->lock);
+ 	old_root = fs->root;
+ 	fs->root = *path;
+ 	path_get_longterm(path);
+-	write_seqcount_end(&fs->seq);
+-	spin_unlock(&fs->lock);
++	write_sequnlock(&fs->lock);
+ 	if (old_root.dentry)
+ 		path_put_longterm(&old_root);
+ }
+@@ -45,13 +43,11 @@ void set_fs_pwd(struct fs_struct *fs, st
+ {
+ 	struct path old_pwd;
+ 
+-	spin_lock(&fs->lock);
+-	write_seqcount_begin(&fs->seq);
++	write_seqlock(&fs->lock);
+ 	old_pwd = fs->pwd;
+ 	fs->pwd = *path;
+ 	path_get_longterm(path);
+-	write_seqcount_end(&fs->seq);
+-	spin_unlock(&fs->lock);
++	write_sequnlock(&fs->lock);
+ 
+ 	if (old_pwd.dentry)
+ 		path_put_longterm(&old_pwd);
+@@ -68,8 +64,7 @@ void chroot_fs_refs(struct path *old_roo
+ 		task_lock(p);
+ 		fs = p->fs;
+ 		if (fs) {
+-			spin_lock(&fs->lock);
+-			write_seqcount_begin(&fs->seq);
++			write_seqlock(&fs->lock);
+ 			if (fs->root.dentry == old_root->dentry
+ 			    && fs->root.mnt == old_root->mnt) {
+ 				path_get_longterm(new_root);
+@@ -82,8 +77,7 @@ void chroot_fs_refs(struct path *old_roo
+ 				fs->pwd = *new_root;
+ 				count++;
+ 			}
+-			write_seqcount_end(&fs->seq);
+-			spin_unlock(&fs->lock);
++			write_sequnlock(&fs->lock);
+ 		}
+ 		task_unlock(p);
+ 	} while_each_thread(g, p);
+@@ -106,12 +100,10 @@ void exit_fs(struct task_struct *tsk)
+ 	if (fs) {
+ 		int kill;
+ 		task_lock(tsk);
+-		spin_lock(&fs->lock);
+-		write_seqcount_begin(&fs->seq);
++		write_seqlock(&fs->lock);
+ 		tsk->fs = NULL;
+ 		kill = !--fs->users;
+-		write_seqcount_end(&fs->seq);
+-		spin_unlock(&fs->lock);
++		write_sequnlock(&fs->lock);
+ 		task_unlock(tsk);
+ 		if (kill)
+ 			free_fs_struct(fs);
+@@ -125,16 +117,15 @@ struct fs_struct *copy_fs_struct(struct 
+ 	if (fs) {
+ 		fs->users = 1;
+ 		fs->in_exec = 0;
+-		spin_lock_init(&fs->lock);
+-		seqcount_init(&fs->seq);
++		seqlock_init(&fs->lock);
+ 		fs->umask = old->umask;
+ 
+-		spin_lock(&old->lock);
++		seq_spin_lock(&old->lock);
+ 		fs->root = old->root;
+ 		path_get_longterm(&fs->root);
+ 		fs->pwd = old->pwd;
+ 		path_get_longterm(&fs->pwd);
+-		spin_unlock(&old->lock);
++		seq_spin_unlock(&old->lock);
+ 	}
+ 	return fs;
+ }
+@@ -149,10 +140,10 @@ int unshare_fs_struct(void)
+ 		return -ENOMEM;
+ 
+ 	task_lock(current);
+-	spin_lock(&fs->lock);
++	seq_spin_lock(&fs->lock);
+ 	kill = !--fs->users;
+ 	current->fs = new_fs;
+-	spin_unlock(&fs->lock);
++	seq_spin_unlock(&fs->lock);
+ 	task_unlock(current);
+ 
+ 	if (kill)
+@@ -171,8 +162,7 @@ EXPORT_SYMBOL(current_umask);
+ /* to be mentioned only in INIT_TASK */
+ struct fs_struct init_fs = {
+ 	.users		= 1,
+-	.lock		= __SPIN_LOCK_UNLOCKED(init_fs.lock),
+-	.seq		= SEQCNT_ZERO,
++	.lock		= __SEQLOCK_UNLOCKED(init_fs.lock),
+ 	.umask		= 0022,
+ };
+ 
+@@ -185,14 +175,14 @@ void daemonize_fs_struct(void)
+ 
+ 		task_lock(current);
+ 
+-		spin_lock(&init_fs.lock);
++		seq_spin_lock(&init_fs.lock);
+ 		init_fs.users++;
+-		spin_unlock(&init_fs.lock);
++		seq_spin_unlock(&init_fs.lock);
+ 
+-		spin_lock(&fs->lock);
++		seq_spin_lock(&fs->lock);
+ 		current->fs = &init_fs;
+ 		kill = !--fs->users;
+-		spin_unlock(&fs->lock);
++		seq_spin_unlock(&fs->lock);
+ 
+ 		task_unlock(current);
+ 		if (kill)
+Index: linux-3.2/fs/namei.c
+===================================================================
+--- linux-3.2.orig/fs/namei.c
++++ linux-3.2/fs/namei.c
+@@ -428,7 +428,7 @@ static int unlazy_walk(struct nameidata 
+ 	BUG_ON(!(nd->flags & LOOKUP_RCU));
+ 	if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
+ 		want_root = 1;
+-		spin_lock(&fs->lock);
++		seq_spin_lock(&fs->lock);
+ 		if (nd->root.mnt != fs->root.mnt ||
+ 				nd->root.dentry != fs->root.dentry)
+ 			goto err_root;
+@@ -458,7 +458,7 @@ static int unlazy_walk(struct nameidata 
+ 	spin_unlock(&parent->d_lock);
+ 	if (want_root) {
+ 		path_get(&nd->root);
+-		spin_unlock(&fs->lock);
++		seq_spin_unlock(&fs->lock);
+ 	}
+ 	mntget(nd->path.mnt);
+ 
+@@ -473,7 +473,7 @@ err_parent:
+ 	spin_unlock(&parent->d_lock);
+ err_root:
+ 	if (want_root)
+-		spin_unlock(&fs->lock);
++		seq_spin_unlock(&fs->lock);
+ 	return -ECHILD;
+ }
+ 
+@@ -567,10 +567,10 @@ static __always_inline void set_root_rcu
+ 		unsigned seq;
+ 
+ 		do {
+-			seq = read_seqcount_begin(&fs->seq);
++			seq = read_seqbegin(&fs->lock);
+ 			nd->root = fs->root;
+ 			nd->seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
+-		} while (read_seqcount_retry(&fs->seq, seq));
++		} while (read_seqretry(&fs->lock, seq));
+ 	}
+ }
+ 
+@@ -1519,10 +1519,10 @@ static int path_init(int dfd, const char
+ 			rcu_read_lock();
+ 
+ 			do {
+-				seq = read_seqcount_begin(&fs->seq);
++				seq = read_seqbegin(&fs->lock);
+ 				nd->path = fs->pwd;
+ 				nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
+-			} while (read_seqcount_retry(&fs->seq, seq));
++			} while (read_seqretry(&fs->lock, seq));
+ 		} else {
+ 			get_fs_pwd(current->fs, &nd->path);
+ 		}
+Index: linux-3.2/include/linux/fs_struct.h
+===================================================================
+--- linux-3.2.orig/include/linux/fs_struct.h
++++ linux-3.2/include/linux/fs_struct.h
+@@ -2,13 +2,11 @@
+ #define _LINUX_FS_STRUCT_H
+ 
+ #include <linux/path.h>
+-#include <linux/spinlock.h>
+ #include <linux/seqlock.h>
+ 
+ struct fs_struct {
+ 	int users;
+-	spinlock_t lock;
+-	seqcount_t seq;
++	seqlock_t lock;
+ 	int umask;
+ 	int in_exec;
+ 	struct path root, pwd;
+@@ -26,29 +24,29 @@ extern int unshare_fs_struct(void);
+ 
+ static inline void get_fs_root(struct fs_struct *fs, struct path *root)
+ {
+-	spin_lock(&fs->lock);
++	seq_spin_lock(&fs->lock);
+ 	*root = fs->root;
+ 	path_get(root);
+-	spin_unlock(&fs->lock);
++	seq_spin_unlock(&fs->lock);
+ }
+ 
+ static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
+ {
+-	spin_lock(&fs->lock);
++	seq_spin_lock(&fs->lock);
+ 	*pwd = fs->pwd;
+ 	path_get(pwd);
+-	spin_unlock(&fs->lock);
++	seq_spin_unlock(&fs->lock);
+ }
+ 
+ static inline void get_fs_root_and_pwd(struct fs_struct *fs, struct path *root,
+ 				       struct path *pwd)
+ {
+-	spin_lock(&fs->lock);
++	seq_spin_lock(&fs->lock);
+ 	*root = fs->root;
+ 	path_get(root);
+ 	*pwd = fs->pwd;
+ 	path_get(pwd);
+-	spin_unlock(&fs->lock);
++	seq_spin_unlock(&fs->lock);
+ }
+ 
+ #endif /* _LINUX_FS_STRUCT_H */
+Index: linux-3.2/kernel/fork.c
+===================================================================
+--- linux-3.2.orig/kernel/fork.c
++++ linux-3.2/kernel/fork.c
+@@ -825,13 +825,13 @@ static int copy_fs(unsigned long clone_f
+ 	struct fs_struct *fs = current->fs;
+ 	if (clone_flags & CLONE_FS) {
+ 		/* tsk->fs is already what we want */
+-		spin_lock(&fs->lock);
++		seq_spin_lock(&fs->lock);
+ 		if (fs->in_exec) {
+-			spin_unlock(&fs->lock);
++			seq_spin_unlock(&fs->lock);
+ 			return -EAGAIN;
+ 		}
+ 		fs->users++;
+-		spin_unlock(&fs->lock);
++		seq_spin_unlock(&fs->lock);
+ 		return 0;
+ 	}
+ 	tsk->fs = copy_fs_struct(fs);
+@@ -1717,13 +1717,13 @@ SYSCALL_DEFINE1(unshare, unsigned long, 
+ 
+ 		if (new_fs) {
+ 			fs = current->fs;
+-			spin_lock(&fs->lock);
++			seq_spin_lock(&fs->lock);
+ 			current->fs = new_fs;
+ 			if (--fs->users)
+ 				new_fs = NULL;
+ 			else
+ 				new_fs = fs;
+-			spin_unlock(&fs->lock);
++			seq_spin_unlock(&fs->lock);
+ 		}
+ 
+ 		if (new_fd) {

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/futex-requeue-pi-fix.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/futex-requeue-pi-fix.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/futex-requeue-pi-fix.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -49,11 +49,16 @@
 Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
 
 
-diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
-index 991bc7f..9850dc0 100644
---- a/kernel/rtmutex.c
-+++ b/kernel/rtmutex.c
-@@ -75,7 +75,8 @@ static void fixup_rt_mutex_waiters(struct rt_mutex *lock)
+---
+ kernel/rtmutex.c        |   32 +++++++++++++++++++++++++++++++-
+ kernel/rtmutex_common.h |    1 +
+ 2 files changed, 32 insertions(+), 1 deletion(-)
+
+Index: linux-3.2/kernel/rtmutex.c
+===================================================================
+--- linux-3.2.orig/kernel/rtmutex.c
++++ linux-3.2/kernel/rtmutex.c
+@@ -69,7 +69,8 @@ static void fixup_rt_mutex_waiters(struc
  
  static int rt_mutex_real_waiter(struct rt_mutex_waiter *waiter)
  {
@@ -63,7 +68,7 @@
  }
  
  /*
-@@ -1353,6 +1354,35 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+@@ -1010,6 +1011,35 @@ int rt_mutex_start_proxy_lock(struct rt_
  		return 1;
  	}
  
@@ -99,11 +104,11 @@
  	ret = task_blocks_on_rt_mutex(lock, waiter, task, detect_deadlock);
  
  	if (ret && !rt_mutex_owner(lock)) {
-diff --git a/kernel/rtmutex_common.h b/kernel/rtmutex_common.h
-index a688a29..6ec3dc1 100644
---- a/kernel/rtmutex_common.h
-+++ b/kernel/rtmutex_common.h
-@@ -105,6 +105,7 @@ static inline struct task_struct *rt_mutex_owner(struct rt_mutex *lock)
+Index: linux-3.2/kernel/rtmutex_common.h
+===================================================================
+--- linux-3.2.orig/kernel/rtmutex_common.h
++++ linux-3.2/kernel/rtmutex_common.h
+@@ -104,6 +104,7 @@ static inline struct task_struct *rt_mut
   * PI-futex support (proxy locking functions, etc.):
   */
  #define PI_WAKEUP_INPROGRESS	((struct rt_mutex_waiter *) 1)
@@ -111,6 +116,3 @@
  
  extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock);
  extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
-
-
-

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/ia64-vdso-use-seqcount.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/ia64-vdso-use-seqcount.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/ia64-vdso-use-seqcount.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/ia64-vdso-use-seqcount.patch)
@@ -0,0 +1,91 @@
+Subject: ia64: vsyscall: Use seqcount instead of seqlock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Tue, 28 Feb 2012 18:33:08 +0100
+
+The update of the vdso data happens under xtime_lock, so adding a
+nested lock is pointless. Just use a seqcount to sync the readers.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: Tony Luck <tony.luck at intel.com>
+---
+ arch/ia64/kernel/asm-offsets.c        |    4 ++--
+ arch/ia64/kernel/fsys.S               |    2 +-
+ arch/ia64/kernel/fsyscall_gtod_data.h |    2 +-
+ arch/ia64/kernel/time.c               |   10 +++-------
+ 4 files changed, 7 insertions(+), 11 deletions(-)
+
+Index: linux-2.6/arch/ia64/kernel/asm-offsets.c
+===================================================================
+--- linux-2.6.orig/arch/ia64/kernel/asm-offsets.c
++++ linux-2.6/arch/ia64/kernel/asm-offsets.c
+@@ -269,8 +269,8 @@ void foo(void)
+ 	BLANK();
+ 
+ 	/* used by fsys_gettimeofday in arch/ia64/kernel/fsys.S */
+-	DEFINE(IA64_GTOD_LOCK_OFFSET,
+-		offsetof (struct fsyscall_gtod_data_t, lock));
++	DEFINE(IA64_GTOD_SEQ_OFFSET,
++		offsetof (struct fsyscall_gtod_data_t, seq);
+ 	DEFINE(IA64_GTOD_WALL_TIME_OFFSET,
+ 		offsetof (struct fsyscall_gtod_data_t, wall_time));
+ 	DEFINE(IA64_GTOD_MONO_TIME_OFFSET,
+Index: linux-2.6/arch/ia64/kernel/fsys.S
+===================================================================
+--- linux-2.6.orig/arch/ia64/kernel/fsys.S
++++ linux-2.6/arch/ia64/kernel/fsys.S
+@@ -174,7 +174,7 @@ ENTRY(fsys_set_tid_address)
+ 	FSYS_RETURN
+ END(fsys_set_tid_address)
+ 
+-#if IA64_GTOD_LOCK_OFFSET !=0
++#if IA64_GTOD_SEQ_OFFSET !=0
+ #error fsys_gettimeofday incompatible with changes to struct fsyscall_gtod_data_t
+ #endif
+ #if IA64_ITC_JITTER_OFFSET !=0
+Index: linux-2.6/arch/ia64/kernel/fsyscall_gtod_data.h
+===================================================================
+--- linux-2.6.orig/arch/ia64/kernel/fsyscall_gtod_data.h
++++ linux-2.6/arch/ia64/kernel/fsyscall_gtod_data.h
+@@ -6,7 +6,7 @@
+  */
+ 
+ struct fsyscall_gtod_data_t {
+-	seqlock_t	lock;
++	seqcount_t	seq;
+ 	struct timespec	wall_time;
+ 	struct timespec monotonic_time;
+ 	cycle_t		clk_mask;
+Index: linux-2.6/arch/ia64/kernel/time.c
+===================================================================
+--- linux-2.6.orig/arch/ia64/kernel/time.c
++++ linux-2.6/arch/ia64/kernel/time.c
+@@ -35,9 +35,7 @@
+ 
+ static cycle_t itc_get_cycles(struct clocksource *cs);
+ 
+-struct fsyscall_gtod_data_t fsyscall_gtod_data = {
+-	.lock = __SEQLOCK_UNLOCKED(fsyscall_gtod_data.lock),
+-};
++struct fsyscall_gtod_data_t fsyscall_gtod_data;
+ 
+ struct itc_jitter_data_t itc_jitter_data;
+ 
+@@ -460,9 +458,7 @@ void update_vsyscall_tz(void)
+ void update_vsyscall(struct timespec *wall, struct timespec *wtm,
+ 			struct clocksource *c, u32 mult)
+ {
+-        unsigned long flags;
+-
+-        write_seqlock_irqsave(&fsyscall_gtod_data.lock, flags);
++	write_seqcount_begin(&fsyscall_gtod_data.seq);
+ 
+         /* copy fsyscall clock data */
+         fsyscall_gtod_data.clk_mask = c->mask;
+@@ -485,6 +481,6 @@ void update_vsyscall(struct timespec *wa
+ 		fsyscall_gtod_data.monotonic_time.tv_sec++;
+ 	}
+ 
+-        write_sequnlock_irqrestore(&fsyscall_gtod_data.lock, flags);
++	write_seqcount_end(&fsyscall_gtod_data.seq);
+ }
+ 

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/irq-allow-disabling-of-softirq-processing-in-irq-thread-context.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -138,7 +138,7 @@
 ===================================================================
 --- linux-3.2.orig/kernel/softirq.c
 +++ linux-3.2/kernel/softirq.c
-@@ -431,6 +431,13 @@ void local_bh_enable_ip(unsigned long ip
+@@ -425,6 +425,13 @@ void local_bh_enable_ip(unsigned long ip
  }
  EXPORT_SYMBOL(local_bh_enable_ip);
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/latency-hist.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/latency-hist.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/latency-hist.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -219,7 +219,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -1566,6 +1566,12 @@ struct task_struct {
+@@ -1570,6 +1570,12 @@ struct task_struct {
  	unsigned long trace;
  	/* bitmask and counter of trace recursion */
  	unsigned long trace_recursion;

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/localversion.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/localversion.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/localversion.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -14,4 +14,4 @@
 --- /dev/null
 +++ linux-3.2/localversion-rt
 @@ -0,0 +1 @@
-+-rt12
++-rt15

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/mm-prepare-pf-disable-discoupling.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -19,7 +19,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -1431,6 +1431,7 @@ struct task_struct {
+@@ -1435,6 +1435,7 @@ struct task_struct {
  	/* mutex deadlock detection */
  	struct mutex_waiter *blocked_on;
  #endif

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/net-u64-stat-protect-seqcount.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/net-u64-stat-protect-seqcount.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/net-u64-stat-protect-seqcount.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/net-u64-stat-protect-seqcount.patch)
@@ -0,0 +1,34 @@
+Subject: net: u64_stat: Protect seqcount
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 01 Mar 2012 16:16:02 +0100
+
+On RT we must prevent that the writer gets preempted inside the write
+section. Otherwise a preempting reader might spin forever.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+
+---
+ include/linux/u64_stats_sync.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: linux-3.2/include/linux/u64_stats_sync.h
+===================================================================
+--- linux-3.2.orig/include/linux/u64_stats_sync.h
++++ linux-3.2/include/linux/u64_stats_sync.h
+@@ -70,6 +70,7 @@ struct u64_stats_sync {
+ static inline void u64_stats_update_begin(struct u64_stats_sync *syncp)
+ {
+ #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
++	preempt_disable_rt();
+ 	write_seqcount_begin(&syncp->seq);
+ #endif
+ }
+@@ -78,6 +79,7 @@ static inline void u64_stats_update_end(
+ {
+ #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
+ 	write_seqcount_end(&syncp->seq);
++	preempt_enable_rt();
+ #endif
+ }
+ 

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/net-wireless-warn-nort.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/net-wireless-warn-nort.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/net-wireless-warn-nort.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -11,7 +11,7 @@
 ===================================================================
 --- linux-3.2.orig/net/mac80211/rx.c
 +++ linux-3.2/net/mac80211/rx.c
-@@ -2952,7 +2952,7 @@ void ieee80211_rx(struct ieee80211_hw *h
+@@ -2958,7 +2958,7 @@ void ieee80211_rx(struct ieee80211_hw *h
  	struct ieee80211_supported_band *sband;
  	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/oleg-signal-rt-fix.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/oleg-signal-rt-fix.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/oleg-signal-rt-fix.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -29,15 +29,40 @@
 Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
 ---
 
- arch/x86/kernel/signal.c |    9 +++++++++
- include/linux/sched.h    |    4 ++++
- kernel/signal.c          |   31 +++++++++++++++++++++++++++++--
- 3 files changed, 42 insertions(+), 2 deletions(-)
+ arch/x86/include/asm/signal.h |   13 +++++++++++++
+ arch/x86/kernel/signal.c      |    9 +++++++++
+ include/linux/sched.h         |    4 ++++
+ kernel/signal.c               |   37 +++++++++++++++++++++++++++++++++++--
+ 4 files changed, 61 insertions(+), 2 deletions(-)
 
-Index: linux-rt.git/arch/x86/kernel/signal.c
+Index: linux-3.2/arch/x86/include/asm/signal.h
 ===================================================================
---- linux-rt.git.orig/arch/x86/kernel/signal.c
-+++ linux-rt.git/arch/x86/kernel/signal.c
+--- linux-3.2.orig/arch/x86/include/asm/signal.h
++++ linux-3.2/arch/x86/include/asm/signal.h
+@@ -31,6 +31,19 @@ typedef struct {
+ 	unsigned long sig[_NSIG_WORDS];
+ } sigset_t;
+ 
++/*
++ * Because some traps use the IST stack, we must keep
++ * preemption disabled while calling do_trap(), but do_trap()
++ * may call force_sig_info() which will grab the signal spin_locks
++ * for the task, which in PREEMPT_RT_FULL are mutexes.
++ * By defining ARCH_RT_DELAYS_SIGNAL_SEND the force_sig_info() will
++ * set TIF_NOTIFY_RESUME and set up the signal to be sent on exit
++ * of the trap.
++ */
++#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_X86_64)
++#define ARCH_RT_DELAYS_SIGNAL_SEND
++#endif
++
+ #else
+ /* Here we must cater to libcs that poke about in kernel headers.  */
+ 
+Index: linux-3.2/arch/x86/kernel/signal.c
+===================================================================
+--- linux-3.2.orig/arch/x86/kernel/signal.c
++++ linux-3.2/arch/x86/kernel/signal.c
 @@ -820,6 +820,15 @@ do_notify_resume(struct pt_regs *regs, v
  		mce_notify_process();
  #endif /* CONFIG_X86_64 && CONFIG_X86_MCE */
@@ -54,11 +79,11 @@
  	/* deal with pending signal delivery */
  	if (thread_info_flags & _TIF_SIGPENDING)
  		do_signal(regs);
-Index: linux-rt.git/include/linux/sched.h
+Index: linux-3.2/include/linux/sched.h
 ===================================================================
---- linux-rt.git.orig/include/linux/sched.h
-+++ linux-rt.git/include/linux/sched.h
-@@ -1405,6 +1405,10 @@ struct task_struct {
+--- linux-3.2.orig/include/linux/sched.h
++++ linux-3.2/include/linux/sched.h
+@@ -1392,6 +1392,10 @@ struct task_struct {
  	sigset_t blocked, real_blocked;
  	sigset_t saved_sigmask;	/* restored if set_restore_sigmask() was used */
  	struct sigpending pending;
@@ -69,10 +94,10 @@
  
  	unsigned long sas_ss_sp;
  	size_t sas_ss_size;
-Index: linux-rt.git/kernel/signal.c
+Index: linux-3.2/kernel/signal.c
 ===================================================================
---- linux-rt.git.orig/kernel/signal.c
-+++ linux-rt.git/kernel/signal.c
+--- linux-3.2.orig/kernel/signal.c
++++ linux-3.2/kernel/signal.c
 @@ -1273,8 +1273,8 @@ int do_send_sig_info(int sig, struct sig
   * We don't want to have recursive SIGSEGV's etc, for example,
   * that is why we also clear SIGNAL_UNKILLABLE.
@@ -124,27 +149,3 @@
  /*
   * Nuke all other threads in the group.
   */
-Index: linux-rt.git/arch/x86/include/asm/signal.h
-===================================================================
---- linux-rt.git.orig/arch/x86/include/asm/signal.h
-+++ linux-rt.git/arch/x86/include/asm/signal.h
-@@ -31,6 +31,19 @@ typedef struct {
- 	unsigned long sig[_NSIG_WORDS];
- } sigset_t;
- 
-+/*
-+ * Because some traps use the IST stack, we must keep
-+ * preemption disabled while calling do_trap(), but do_trap()
-+ * may call force_sig_info() which will grab the signal spin_locks
-+ * for the task, which in PREEMPT_RT_FULL are mutexes.
-+ * By defining ARCH_RT_DELAYS_SIGNAL_SEND the force_sig_info() will
-+ * set TIF_NOTIFY_RESUME and set up the signal to be sent on exit
-+ * of the trap.
-+ */
-+#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_X86_64)
-+#define ARCH_RT_DELAYS_SIGNAL_SEND
-+#endif
-+
- #else
- /* Here we must cater to libcs that poke about in kernel headers.  */
- 

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/panic-disable-random-on-rt.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/panic-disable-random-on-rt.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/panic-disable-random-on-rt.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -8,7 +8,7 @@
 ===================================================================
 --- linux-3.2.orig/kernel/panic.c
 +++ linux-3.2/kernel/panic.c
-@@ -334,9 +334,11 @@ static u64 oops_id;
+@@ -343,9 +343,11 @@ static u64 oops_id;
  
  static int init_oops_id(void)
  {

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/patch-to-introduce-rcu-bh-qs-where-safe-from-softirq.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -137,7 +137,7 @@
  
  void __init softirq_early_init(void)
  {
-@@ -448,7 +454,7 @@ EXPORT_SYMBOL(in_serving_softirq);
+@@ -455,7 +461,7 @@ EXPORT_SYMBOL(in_serving_softirq);
   * Called with bh and local interrupts disabled. For full RT cpu must
   * be pinned.
   */
@@ -146,7 +146,7 @@
  {
  	u32 pending = local_softirq_pending();
  	int cpu = smp_processor_id();
-@@ -462,7 +468,7 @@ static void __do_softirq(void)
+@@ -469,7 +475,7 @@ static void __do_softirq(void)
  
  	lockdep_softirq_enter();
  
@@ -155,7 +155,7 @@
  
  	pending = local_softirq_pending();
  	if (pending)
-@@ -501,7 +507,7 @@ static int __thread_do_softirq(int cpu)
+@@ -508,7 +514,7 @@ static int __thread_do_softirq(int cpu)
  	 * schedule!
  	 */
  	if (local_softirq_pending())

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-migrate_disable-2.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -77,7 +77,7 @@
  	cpumask_t cpus_allowed;
  
  #ifdef CONFIG_PREEMPT_RCU
-@@ -2677,11 +2679,22 @@ static inline void set_task_cpu(struct t
+@@ -2681,11 +2683,22 @@ static inline void set_task_cpu(struct t
  
  #endif /* CONFIG_SMP */
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-frob-pagefault_disable.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -346,7 +346,7 @@
  
  #include <asm/processor.h>
  
-@@ -1431,7 +1432,9 @@ struct task_struct {
+@@ -1435,7 +1436,9 @@ struct task_struct {
  	/* mutex deadlock detection */
  	struct mutex_waiter *blocked_on;
  #endif
@@ -356,7 +356,7 @@
  #ifdef CONFIG_TRACE_IRQFLAGS
  	unsigned int irq_events;
  	unsigned long hardirq_enable_ip;
-@@ -1580,6 +1583,17 @@ struct task_struct {
+@@ -1584,6 +1587,17 @@ struct task_struct {
  /* Future-safe accessor for struct task_struct's cpus_allowed. */
  #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-re-_3_0-rt4.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-re-_3_0-rt4.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/peter_zijlstra-re-_3_0-rt4.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -32,7 +32,7 @@
  
  #include <asm/pgtable.h>
  #include <asm/system.h>
-@@ -350,6 +351,41 @@ __switch_to(struct task_struct *prev_p, 
+@@ -339,6 +340,41 @@ __switch_to(struct task_struct *prev_p, 
  		     task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT))
  		__switch_to_xtra(prev_p, next_p, tss);
  
@@ -71,9 +71,9 @@
 +	}
 +#endif
 +
- 	/* If we're going to preload the fpu context, make sure clts
- 	   is run while we're batching the cpu state updates. */
- 	if (preload_fpu)
+ 	/*
+ 	 * Leave lazy mode, flushing any hypercalls made here.
+ 	 * This must be done before restoring TLS segments so
 Index: linux-3.2/include/linux/sched.h
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
@@ -86,7 +86,7 @@
  #include <asm/system.h>
  #include <asm/page.h>
  #include <asm/ptrace.h>
-@@ -1599,6 +1600,10 @@ struct task_struct {
+@@ -1603,6 +1604,10 @@ struct task_struct {
  	struct rcu_head put_rcu;
  	int softirq_nestcnt;
  #endif

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch)
@@ -0,0 +1,53 @@
+Subject: futex/rt: Fix possible lockup when taking pi_lock in proxy handler
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Thu, 01 Mar 2012 13:55:29 -0500
+
+When taking the pi_lock, we must disable interrupts because the
+pi_lock can also be taken in an interrupt handler.
+
+Use raw_spin_lock_irq() instead of raw_spin_lock().
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Carsten Emde <C.Emde at osadl.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Peter Zijlstra <peterz at infradead.org>
+Cc: Clark Williams <clark.williams at gmail.com>
+Cc: stable-rt at vger.kernel.org
+Link: http://lkml.kernel.org/r/20120301190345.165160680@goodmis.org
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/rtmutex.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
+index 9850dc0..b525158 100644
+--- a/kernel/rtmutex.c
++++ b/kernel/rtmutex.c
+@@ -1373,14 +1373,14 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
+ 	 * PI_REQUEUE_INPROGRESS, so that if the task is waking up
+ 	 * it will know that we are in the process of requeuing it.
+ 	 */
+-	raw_spin_lock(&task->pi_lock);
++	raw_spin_lock_irq(&task->pi_lock);
+ 	if (task->pi_blocked_on) {
+-		raw_spin_unlock(&task->pi_lock);
++		raw_spin_unlock_irq(&task->pi_lock);
+ 		raw_spin_unlock(&lock->wait_lock);
+ 		return -EAGAIN;
+ 	}
+ 	task->pi_blocked_on = PI_REQUEUE_INPROGRESS;
+-	raw_spin_unlock(&task->pi_lock);
++	raw_spin_unlock_irq(&task->pi_lock);
+ #endif
+ 
+ 	ret = task_blocks_on_rt_mutex(lock, waiter, task, detect_deadlock);
+-- 
+1.7.3.4
+
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
+the body of a message to majordomo at vger.kernel.org
+More majordomo info at  http://vger.kernel.org/majordomo-info.html
+
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch)
@@ -0,0 +1,118 @@
+Subject: lglock/rt: Use non-rt for_each_cpu() in -rt code
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Thu, 01 Mar 2012 13:55:30 -0500
+
+Currently the RT version of the lglocks() does a for_each_online_cpu()
+in the name##_global_lock_online() functions. Non-rt uses its own
+mask for this, and for good reason.
+
+A task may grab a *_global_lock_online(), and in the mean time, one
+of the CPUs goes offline. Now when that task does a *_global_unlock_online()
+it releases all the locks *except* the one that went offline.
+
+Now if that CPU were to come back on line, its lock is now owned by a
+task that never released it when it should have.
+
+This causes all sorts of fun errors. Like owners of a lock no longer
+existing, or sleeping on IO, waiting to be woken up by a task that
+happens to be blocked on the lock it never released.
+
+Convert the RT versions to use the lglock specific cpumasks. As once
+a CPU comes on line, the mask is set, and never cleared even when the
+CPU goes offline. The locks for that CPU will still be taken and released.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Carsten Emde <C.Emde at osadl.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Peter Zijlstra <peterz at infradead.org>
+Cc: Clark Williams <clark.williams at gmail.com>
+Cc: stable-rt at vger.kernel.org
+Link: http://lkml.kernel.org/r/20120301190345.374756214@goodmis.org
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ include/linux/lglock.h |   35 ++++++++++++++++++++++++++++++++---
+ 1 files changed, 32 insertions(+), 3 deletions(-)
+
+diff --git a/include/linux/lglock.h b/include/linux/lglock.h
+index 52b289f..cdfcef3 100644
+--- a/include/linux/lglock.h
++++ b/include/linux/lglock.h
+@@ -203,9 +203,31 @@
+ #else /* !PREEMPT_RT_FULL */
+ #define DEFINE_LGLOCK(name)						\
+ 									\
+- DEFINE_PER_CPU(struct rt_mutex, name##_lock);					\
++ DEFINE_PER_CPU(struct rt_mutex, name##_lock);				\
++ DEFINE_SPINLOCK(name##_cpu_lock);					\
++ cpumask_t name##_cpus __read_mostly;					\
+  DEFINE_LGLOCK_LOCKDEP(name);						\
+ 									\
++ static int								\
++ name##_lg_cpu_callback(struct notifier_block *nb,			\
++				unsigned long action, void *hcpu)	\
++ {									\
++	switch (action & ~CPU_TASKS_FROZEN) {				\
++	case CPU_UP_PREPARE:						\
++		spin_lock(&name##_cpu_lock);				\
++		cpu_set((unsigned long)hcpu, name##_cpus);		\
++		spin_unlock(&name##_cpu_lock);				\
++		break;							\
++	case CPU_UP_CANCELED: case CPU_DEAD:				\
++		spin_lock(&name##_cpu_lock);				\
++		cpu_clear((unsigned long)hcpu, name##_cpus);		\
++		spin_unlock(&name##_cpu_lock);				\
++	}								\
++	return NOTIFY_OK;						\
++ }									\
++ static struct notifier_block name##_lg_cpu_notifier = {		\
++	.notifier_call = name##_lg_cpu_callback,			\
++ };									\
+  void name##_lock_init(void) {						\
+ 	int i;								\
+ 	LOCKDEP_INIT_MAP(&name##_lock_dep_map, #name, &name##_lock_key, 0); \
+@@ -214,6 +236,11 @@
+ 		lock = &per_cpu(name##_lock, i);			\
+ 		rt_mutex_init(lock);					\
+ 	}								\
++	register_hotcpu_notifier(&name##_lg_cpu_notifier);		\
++	get_online_cpus();						\
++	for_each_online_cpu(i)						\
++		cpu_set(i, name##_cpus);				\
++	put_online_cpus();						\
+  }									\
+  EXPORT_SYMBOL(name##_lock_init);					\
+ 									\
+@@ -254,7 +281,8 @@
+  void name##_global_lock_online(void) {					\
+ 	int i;								\
+ 	rwlock_acquire(&name##_lock_dep_map, 0, 0, _RET_IP_);		\
+-	for_each_online_cpu(i) {					\
++	spin_lock(&name##_cpu_lock);					\
++	for_each_cpu(i, &name##_cpus) {					\
+ 		struct rt_mutex *lock;					\
+ 		lock = &per_cpu(name##_lock, i);			\
+ 		__rt_spin_lock(lock);					\
+@@ -265,11 +293,12 @@
+  void name##_global_unlock_online(void) {				\
+ 	int i;								\
+ 	rwlock_release(&name##_lock_dep_map, 1, _RET_IP_);		\
+-	for_each_online_cpu(i) {					\
++	for_each_cpu(i, &name##_cpus) {					\
+ 		struct rt_mutex *lock;					\
+ 		lock = &per_cpu(name##_lock, i);			\
+ 		__rt_spin_unlock(lock);					\
+ 	}								\
++	spin_unlock(&name##_cpu_lock);					\
+  }									\
+  EXPORT_SYMBOL(name##_global_unlock_online);				\
+ 									\
+-- 
+1.7.3.4
+
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
+the body of a message to majordomo at vger.kernel.org
+More majordomo info at  http://vger.kernel.org/majordomo-info.html
+
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch)
@@ -0,0 +1,33 @@
+Subject: ring-buffer/rt: Check for irqs disabled before grabbing reader lock
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Thu, 01 Mar 2012 13:55:32 -0500
+
+In RT the reader lock is a mutex and we can not grab it when preemption is
+disabled. The in_atomic() check that is there does not check if irqs are
+disabled. Add that check as well.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Carsten Emde <C.Emde at osadl.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Peter Zijlstra <peterz at infradead.org>
+Cc: Clark Williams <clark.williams at gmail.com>
+Cc: stable-rt at vger.kernel.org
+Link: http://lkml.kernel.org/r/20120301190345.786365803@goodmis.org
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/trace/ring_buffer.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-3.2/kernel/trace/ring_buffer.c
+===================================================================
+--- linux-3.2.orig/kernel/trace/ring_buffer.c
++++ linux-3.2/kernel/trace/ring_buffer.c
+@@ -1054,7 +1054,7 @@ static inline int ok_to_lock(void)
+ 	if (in_nmi())
+ 		return 0;
+ #ifdef CONFIG_PREEMPT_RT_FULL
+-	if (in_atomic())
++	if (in_atomic() || irqs_disabled())
+ 		return 0;
+ #endif
+ 	return 1;

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch)
@@ -0,0 +1,58 @@
+Subject: sched/rt: Fix wait_task_interactive() to test rt_spin_lock state
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Thu, 01 Mar 2012 13:55:33 -0500
+
+The wait_task_interactive() will have a task sleep waiting for another
+task to have a certain state. But it ignores the rt_spin_locks state
+and can return with an incorrect result if the task it is waiting
+for is blocked on a rt_spin_lock() and is waking up.
+
+The rt_spin_locks save the tasks state in the saved_state field
+and the wait_task_interactive() must also test that state.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Carsten Emde <C.Emde at osadl.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Peter Zijlstra <peterz at infradead.org>
+Cc: Clark Williams <clark.williams at gmail.com>
+Cc: stable-rt at vger.kernel.org
+Link: http://lkml.kernel.org/r/20120301190345.979435764@goodmis.org
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/sched.c |    6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/kernel/sched.c b/kernel/sched.c
+index 81b340d..1cc706d 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -2450,7 +2450,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
+ 		 * is actually now running somewhere else!
+ 		 */
+ 		while (task_running(rq, p)) {
+-			if (match_state && unlikely(p->state != match_state))
++			if (match_state && unlikely(p->state != match_state)
++			    && unlikely(p->saved_state != match_state))
+ 				return 0;
+ 			cpu_relax();
+ 		}
+@@ -2465,7 +2466,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)
+ 		running = task_running(rq, p);
+ 		on_rq = p->on_rq;
+ 		ncsw = 0;
+-		if (!match_state || p->state == match_state)
++		if (!match_state || p->state == match_state
++		    || p->saved_state == match_state)
+ 			ncsw = p->nvcsw | LONG_MIN; /* sets MSB */
+ 		task_rq_unlock(rq, p, &flags);
+ 
+-- 
+1.7.3.4
+
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
+the body of a message to majordomo at vger.kernel.org
+More majordomo info at  http://vger.kernel.org/majordomo-info.html
+
+

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-timer-fix-hotplug-for-rt.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-timer-fix-hotplug-for-rt.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/rfc-timer-fix-hotplug-for-rt.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/rfc-timer-fix-hotplug-for-rt.patch)
@@ -0,0 +1,72 @@
+Subject: timer: Fix hotplug for -rt
+From: Steven Rostedt <rostedt at goodmis.org>
+Date: Thu, 01 Mar 2012 13:55:28 -0500
+
+Revert the RT patch:
+    Author: Ingo Molnar <mingo at elte.hu>
+    Date:   Fri Jul 3 08:30:32 2009 -0500
+    timers: fix timer hotplug on -rt
+
+    Here we are in the CPU_DEAD notifier, and we must not sleep nor
+    enable interrupts.
+
+There's no problem with sleeping in this notifier.
+
+But the get_cpu_var() had to be converted to a get_local_var().
+
+Replace the previous fix with the get_local_var() convert.
+
+Signed-off-by: Steven Rostedt <rostedt at goodmis.org>
+Cc: Carsten Emde <C.Emde at osadl.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Peter Zijlstra <peterz at infradead.org>
+Cc: Clark Williams <clark.williams at gmail.com>
+Cc: stable-rt at vger.kernel.org
+Link: http://lkml.kernel.org/r/20120301190344.948157137@goodmis.org
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/timer.c |   16 +++++-----------
+ 1 file changed, 5 insertions(+), 11 deletions(-)
+
+Index: linux-3.2/kernel/timer.c
+===================================================================
+--- linux-3.2.orig/kernel/timer.c
++++ linux-3.2/kernel/timer.c
+@@ -1743,21 +1743,17 @@ static void __cpuinit migrate_timers(int
+ {
+ 	struct tvec_base *old_base;
+ 	struct tvec_base *new_base;
+-	unsigned long flags;
+ 	int i;
+ 
+ 	BUG_ON(cpu_online(cpu));
+ 	old_base = per_cpu(tvec_bases, cpu);
+-	new_base = get_cpu_var(tvec_bases);
++	new_base = get_local_var(tvec_bases);
+ 	/*
+ 	 * The caller is globally serialized and nobody else
+ 	 * takes two locks at once, deadlock is not possible.
+ 	 */
+-	local_irq_save(flags);
+-	while (!spin_trylock(&new_base->lock))
+-		cpu_relax();
+-	while (!spin_trylock(&old_base->lock))
+-		cpu_relax();
++	spin_lock_irq(&new_base->lock);
++	spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
+ 
+ 	BUG_ON(old_base->running_timer);
+ 
+@@ -1771,10 +1767,8 @@ static void __cpuinit migrate_timers(int
+ 	}
+ 
+ 	spin_unlock(&old_base->lock);
+-	spin_unlock(&new_base->lock);
+-	local_irq_restore(flags);
+-
+-	put_cpu_var(tvec_bases);
++	spin_unlock_irq(&new_base->lock);
++	put_local_var(tvec_bases);
+ }
+ #endif /* CONFIG_HOTPLUG_CPU */
+ 

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/rt-mutex-add-sleeping-spinlocks-support.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -103,7 +103,7 @@
   *  See Documentation/rt-mutex-design.txt for details.
   */
  #include <linux/spinlock.h>
-@@ -95,6 +101,12 @@ static inline void mark_rt_mutex_waiters
+@@ -96,6 +102,12 @@ static inline void mark_rt_mutex_waiters
  }
  #endif
  
@@ -116,7 +116,7 @@
  /*
   * Calculate task priority from the waiter list priority
   *
-@@ -141,6 +153,14 @@ static void rt_mutex_adjust_prio(struct 
+@@ -142,6 +154,14 @@ static void rt_mutex_adjust_prio(struct 
  	raw_spin_unlock_irqrestore(&task->pi_lock, flags);
  }
  
@@ -131,7 +131,7 @@
  /*
   * Max number of times we'll walk the boosting chain:
   */
-@@ -252,13 +272,15 @@ static int rt_mutex_adjust_prio_chain(st
+@@ -253,13 +273,15 @@ static int rt_mutex_adjust_prio_chain(st
  	/* Release the task */
  	raw_spin_unlock_irqrestore(&task->pi_lock, flags);
  	if (!rt_mutex_owner(lock)) {
@@ -150,7 +150,7 @@
  		raw_spin_unlock(&lock->wait_lock);
  		goto out_put_task;
  	}
-@@ -303,6 +325,25 @@ static int rt_mutex_adjust_prio_chain(st
+@@ -304,6 +326,25 @@ static int rt_mutex_adjust_prio_chain(st
  	return ret;
  }
  
@@ -176,7 +176,7 @@
  /*
   * Try to take an rt-mutex
   *
-@@ -312,8 +353,9 @@ static int rt_mutex_adjust_prio_chain(st
+@@ -313,8 +354,9 @@ static int rt_mutex_adjust_prio_chain(st
   * @task:   the task which wants to acquire the lock
   * @waiter: the waiter that is queued to the lock's wait list. (could be NULL)
   */
@@ -188,7 +188,7 @@
  {
  	/*
  	 * We have to be careful here if the atomic speedups are
-@@ -346,12 +388,14 @@ static int try_to_take_rt_mutex(struct r
+@@ -347,12 +389,14 @@ static int try_to_take_rt_mutex(struct r
  	 * 3) it is top waiter
  	 */
  	if (rt_mutex_has_waiters(lock)) {
@@ -207,7 +207,7 @@
  	if (waiter || rt_mutex_has_waiters(lock)) {
  		unsigned long flags;
  		struct rt_mutex_waiter *top;
-@@ -376,7 +420,6 @@ static int try_to_take_rt_mutex(struct r
+@@ -377,7 +421,6 @@ static int try_to_take_rt_mutex(struct r
  		raw_spin_unlock_irqrestore(&task->pi_lock, flags);
  	}
  
@@ -215,7 +215,7 @@
  	debug_rt_mutex_lock(lock);
  
  	rt_mutex_set_owner(lock, task);
-@@ -386,6 +429,13 @@ static int try_to_take_rt_mutex(struct r
+@@ -387,6 +430,13 @@ static int try_to_take_rt_mutex(struct r
  	return 1;
  }
  
@@ -229,7 +229,7 @@
  /*
   * Task blocks on lock.
   *
-@@ -500,7 +550,7 @@ static void wakeup_next_waiter(struct rt
+@@ -501,7 +551,7 @@ static void wakeup_next_waiter(struct rt
  
  	raw_spin_unlock_irqrestore(&current->pi_lock, flags);
  
@@ -238,7 +238,7 @@
  }
  
  /*
-@@ -579,18 +629,315 @@ void rt_mutex_adjust_pi(struct task_stru
+@@ -580,18 +630,315 @@ void rt_mutex_adjust_pi(struct task_stru
  		return;
  	}
  
@@ -557,7 +557,7 @@
   * @timeout:		 the pre-initialized and started timer, or NULL for none
   * @waiter:		 the pre-initialized rt_mutex_waiter
   *
-@@ -654,9 +1001,10 @@ rt_mutex_slowlock(struct rt_mutex *lock,
+@@ -655,9 +1002,10 @@ rt_mutex_slowlock(struct rt_mutex *lock,
  	struct rt_mutex_waiter waiter;
  	int ret = 0;
  
@@ -569,7 +569,7 @@
  
  	/* Try to acquire the lock again: */
  	if (try_to_take_rt_mutex(lock, current, NULL)) {
-@@ -709,6 +1057,7 @@ rt_mutex_slowtrylock(struct rt_mutex *lo
+@@ -710,6 +1058,7 @@ rt_mutex_slowtrylock(struct rt_mutex *lo
  	int ret = 0;
  
  	raw_spin_lock(&lock->wait_lock);
@@ -577,7 +577,7 @@
  
  	if (likely(rt_mutex_owner(lock) != current)) {
  
-@@ -941,7 +1290,6 @@ EXPORT_SYMBOL_GPL(rt_mutex_destroy);
+@@ -942,7 +1291,6 @@ EXPORT_SYMBOL_GPL(rt_mutex_destroy);
  void __rt_mutex_init(struct rt_mutex *lock, const char *name)
  {
  	lock->owner = NULL;
@@ -585,7 +585,7 @@
  	plist_head_init(&lock->wait_list);
  
  	debug_rt_mutex_init(lock, name);
-@@ -961,7 +1309,7 @@ EXPORT_SYMBOL_GPL(__rt_mutex_init);
+@@ -962,7 +1310,7 @@ EXPORT_SYMBOL_GPL(__rt_mutex_init);
  void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
  				struct task_struct *proxy_owner)
  {
@@ -606,7 +606,7 @@
  #ifdef CONFIG_DEBUG_RT_MUTEXES
  	unsigned long		ip;
  	struct pid		*deadlock_task_pid;
-@@ -125,4 +126,12 @@ extern int rt_mutex_finish_proxy_lock(st
+@@ -126,4 +127,12 @@ extern int rt_mutex_finish_proxy_lock(st
  # include "rtmutex.h"
  #endif
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-delay-put-task.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-delay-put-task.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-delay-put-task.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -12,7 +12,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -1587,6 +1587,9 @@ struct task_struct {
+@@ -1591,6 +1591,9 @@ struct task_struct {
  #ifdef CONFIG_HAVE_HW_BREAKPOINT
  	atomic_t ptrace_bp_refcnt;
  #endif
@@ -22,7 +22,7 @@
  };
  
  /* Future-safe accessor for struct task_struct's cpus_allowed. */
-@@ -1771,6 +1774,15 @@ extern struct pid *cad_pid;
+@@ -1775,6 +1778,15 @@ extern struct pid *cad_pid;
  extern void free_task(struct task_struct *tsk);
  #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
  
@@ -38,7 +38,7 @@
  extern void __put_task_struct(struct task_struct *t);
  
  static inline void put_task_struct(struct task_struct *t)
-@@ -1778,6 +1790,7 @@ static inline void put_task_struct(struc
+@@ -1782,6 +1794,7 @@ static inline void put_task_struct(struc
  	if (atomic_dec_and_test(&t->usage))
  		__put_task_struct(t);
  }

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-migrate-disable.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-migrate-disable.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-migrate-disable.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -42,7 +42,7 @@
  	cpumask_t cpus_allowed;
  
  #ifdef CONFIG_PREEMPT_RCU
-@@ -1594,9 +1595,6 @@ struct task_struct {
+@@ -1598,9 +1599,6 @@ struct task_struct {
  #endif
  };
  
@@ -52,7 +52,7 @@
  #ifdef CONFIG_PREEMPT_RT_FULL
  static inline bool cur_pf_disabled(void) { return current->pagefault_disabled; }
  #else
-@@ -2679,6 +2677,15 @@ static inline void set_task_cpu(struct t
+@@ -2683,6 +2681,15 @@ static inline void set_task_cpu(struct t
  
  #endif /* CONFIG_SMP */
  

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-mmdrop-delayed.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-mmdrop-delayed.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-mmdrop-delayed.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -39,7 +39,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -2264,12 +2264,24 @@ extern struct mm_struct * mm_alloc(void)
+@@ -2268,12 +2268,24 @@ extern struct mm_struct * mm_alloc(void)
  
  /* mmdrop drops the mm and the page tables */
  extern void __mmdrop(struct mm_struct *);

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-no-work-when-pi-blocked.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-no-work-when-pi-blocked.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-no-work-when-pi-blocked.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -12,7 +12,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -2091,12 +2091,20 @@ extern unsigned int sysctl_sched_cfs_ban
+@@ -2095,12 +2095,20 @@ extern unsigned int sysctl_sched_cfs_ban
  extern int rt_mutex_getprio(struct task_struct *p);
  extern void rt_mutex_setprio(struct task_struct *p, int prio);
  extern void rt_mutex_adjust_pi(struct task_struct *p);

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/sched-rt-mutex-wakeup.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -28,7 +28,7 @@
  	void *stack;
  	atomic_t usage;
  	unsigned int flags;	/* per process flags, defined below */
-@@ -2174,6 +2176,7 @@ extern void xtime_update(unsigned long t
+@@ -2178,6 +2180,7 @@ extern void xtime_update(unsigned long t
  
  extern int wake_up_state(struct task_struct *tsk, unsigned int state);
  extern int wake_up_process(struct task_struct *tsk);

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch)
@@ -0,0 +1,56 @@
+Subject: seqlock: Prevent rt starvation
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Wed, 22 Feb 2012 12:03:30 +0100
+
+If a low prio writer gets preempted while holding the seqlock write
+locked, a high prio reader spins forever on RT.
+
+To prevent this let the reader grab the spinlock, so it blocks and
+eventually boosts the writer. This way the writer can proceed and
+endless spinning is prevented.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+
+---
+ include/linux/seqlock.h |   23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+Index: linux-3.2/include/linux/seqlock.h
+===================================================================
+--- linux-3.2.orig/include/linux/seqlock.h
++++ linux-3.2/include/linux/seqlock.h
+@@ -177,10 +177,33 @@ typedef struct {
+ /*
+  * Read side functions for starting and finalizing a read side section.
+  */
++#ifndef CONFIG_PREEMPT_RT
+ static inline unsigned read_seqbegin(const seqlock_t *sl)
+ {
+ 	return read_seqcount_begin(&sl->seqcount);
+ }
++#else
++/*
++ * Starvation safe read side for RT
++ */
++static inline unsigned read_seqbegin(seqlock_t *sl)
++{
++	unsigned ret;
++
++repeat:
++	ret = sl->seqcount.sequence;
++	if (unlikely(ret & 1)) {
++		/*
++		 * Take the lock and let the writer proceed (i.e. evtl
++		 * boost it), otherwise we could loop here forever.
++		 */
++		spin_lock(&sl->lock);
++		spin_unlock(&sl->lock);
++		goto repeat;
++	}
++	return ret;
++}
++#endif
+ 
+ static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
+ {

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-provide-seq-spin-lock.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/seqlock-provide-seq-spin-lock.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-provide-seq-spin-lock.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/seqlock-provide-seq-spin-lock.patch)
@@ -0,0 +1,94 @@
+Subject: seqlock: Provide seq_spin_* functions
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Mon, 27 Feb 2012 17:55:11 +0100
+
+In some cases it's desirable to lock the seqlock w/o changing the
+seqcount. Provide functions for this, so we can avoid open coded
+constructs.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+Cc: stable-rt at vger.kernel.org
+---
+ include/linux/seqlock.h |   64 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 64 insertions(+)
+
+Index: rt/include/linux/seqlock.h
+===================================================================
+--- rt.orig/include/linux/seqlock.h
++++ rt/include/linux/seqlock.h
+@@ -188,6 +188,19 @@ static inline unsigned read_seqretry(con
+ }
+ 
+ /*
++ * Ditto w/o barriers
++ */
++static inline unsigned __read_seqbegin(const seqlock_t *sl)
++{
++	return __read_seqcount_begin(&sl->seqcount);
++}
++
++static inline unsigned __read_seqretry(const seqlock_t *sl, unsigned start)
++{
++	return __read_seqcount_retry(&sl->seqcount, start);
++}
++
++/*
+  * Lock out other writers and update the count.
+  * Acts like a normal spin_lock/unlock.
+  * Don't need preempt_disable() because that is in the spin_lock already.
+@@ -247,4 +260,55 @@ write_sequnlock_irqrestore(seqlock_t *sl
+ 	spin_unlock_irqrestore(&sl->lock, flags);
+ }
+ 
++/*
++ * Instead of open coding a spinlock and a seqcount, the following
++ * functions allow to serialize on the seqlock w/o touching seqcount.
++ */
++static inline void seq_spin_lock(seqlock_t *sl)
++{
++	spin_lock(&sl->lock);
++}
++
++static inline int seq_spin_trylock(seqlock_t *sl)
++{
++	return spin_trylock(&sl->lock);
++}
++
++static inline void seq_spin_unlock(seqlock_t *sl)
++{
++	spin_unlock(&sl->lock);
++}
++
++static inline void assert_seq_spin_locked(seqlock_t *sl)
++{
++	assert_spin_locked(&sl->lock);
++}
++
++static inline void seq_spin_lock_nested(seqlock_t *sl, int subclass)
++{
++	spin_lock_nested(&sl->lock, subclass);
++}
++
++/*
++ * For writers which need to take/release the lock w/o updating seqcount for
++ * whatever reasons the following functions allow to update the count
++ * after the lock has been acquired or before it is released.
++ */
++static inline void write_seqlock_begin(seqlock_t *sl)
++{
++	assert_spin_locked(&sl->lock);
++	write_seqcount_begin(&sl->seqcount);
++}
++
++static inline void write_seqlock_end(seqlock_t *sl)
++{
++	assert_spin_locked(&sl->lock);
++	write_seqcount_end(&sl->seqcount);
++}
++
++static inline void write_seqlock_barrier(seqlock_t *sl)
++{
++	write_seqcount_barrier(&sl->seqcount);
++}
++
+ #endif /* __LINUX_SEQLOCK_H */

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-remove-unused-functions.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,4 +1,4 @@
-Subject: seqlock-remove-unused-functions.patch
+Subject: seqlock: Remove unused functions
 From: Thomas Gleixner <tglx at linutronix.de>
 Date: Sat, 16 Jul 2011 18:38:22 +0200
 

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-use-seqcount.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-use-seqcount.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/seqlock-use-seqcount.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,16 +1,18 @@
-Subject: seqlock-use-seqcount.patch
+Subject: seqlock: Use seqcount
 From: Thomas Gleixner <tglx at linutronix.de>
 Date: Sat, 16 Jul 2011 18:40:26 +0200
 
+No point in having different implementations for the same thing.
+
 Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
 ---
- include/linux/seqlock.h |  166 ++++++++++++++++++++++++------------------------
- 1 file changed, 83 insertions(+), 83 deletions(-)
+ include/linux/seqlock.h |  176 +++++++++++++++++++++++++-----------------------
+ 1 file changed, 93 insertions(+), 83 deletions(-)
 
-Index: linux-3.2/include/linux/seqlock.h
+Index: rt/include/linux/seqlock.h
 ===================================================================
---- linux-3.2.orig/include/linux/seqlock.h
-+++ linux-3.2/include/linux/seqlock.h
+--- rt.orig/include/linux/seqlock.h
++++ rt/include/linux/seqlock.h
 @@ -30,81 +30,12 @@
  #include <linux/preempt.h>
  #include <asm/processor.h>
@@ -101,7 +103,7 @@
  	return __read_seqcount_retry(s, start);
  }
  
-@@ -220,21 +150,91 @@ static inline void write_seqcount_barrie
+@@ -220,21 +150,101 @@ static inline void write_seqcount_barrie
  	s->sequence+=2;
  }
  
@@ -130,8 +132,18 @@
 +#define DEFINE_SEQLOCK(x) \
 +		seqlock_t x = __SEQLOCK_UNLOCKED(x)
 +
-+#define read_seqbegin(sl)		read_seqcount_begin(&(sl)->seqcount)
-+#define read_seqretry(sl, start)	read_seqcount_retry(&(sl)->seqcount, start)
++/*
++ * Read side functions for starting and finalizing a read side section.
++ */
++static inline unsigned read_seqbegin(const seqlock_t *sl)
++{
++	return read_seqcount_begin(&sl->seqcount);
++}
++
++static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
++{
++	return read_seqcount_retry(&sl->seqcount, start);
++}
 +
 +/*
 + * Lock out other writers and update the count.

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/series
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/series	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/series	Sun Mar  4 20:27:13 2012	(r18790)
@@ -16,8 +16,6 @@
 # rtc-deal-with-errors-correctly.patch -- 3.0.1
 # rtc-fix-hrtimer-deadlock.patch -- 3.0.1
 # rtc-limit-frequency.patch -- 3.0.1
-genirq-unmask-oneshot-irqs-when-thread-is-not-woken.patch
-genirq-handle-pending-irqs-in-irq-startup.patch
 
 # Some variant of this is in 3.1
 
@@ -98,7 +96,21 @@
 # Stuff which should go upstream ASAP
 ############################################################
 
+# Timekeeping / VDSO
+time-remove-bogus-comments.patch
+x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch
+x86-vdso-use-seqcount.patch
+ia64-vdso-use-seqcount.patch
+
+# SEQLOCK
+seqlock-remove-unused-functions.patch
+seqlock-use-seqcount.patch
+seqlock-provide-seq-spin-lock.patch
+fs-struct-use-seqlock.patch
+fs-dentry-use-seqlock.patch
+
 # RAW SPINLOCKS
+timekeeping-split-xtime-lock.patch
 intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch
 
 # MM memcg
@@ -196,25 +208,15 @@
 locking-various-init-fixes.patch
 # rtc-tegra-lock-init.patch -- 3.0.1
 
-# SEQLOCK
-seqlock-remove-unused-functions.patch
-seqlock-use-seqcount.patch
-
 # PCI
 wait-provide-__wake_up_all_locked.patch
 pci-access-use-__wake_up_all_locked.patch
 
-# ACPI
-acpi-make-gbl-hardware-lock-raw.patch
-acpi-make-ec-lock-raw-as-well.patch
-
 #####################################################
 # Stuff which should go mainline, but wants some care
 #####################################################
 
 # SEQLOCK
-seqlock-raw-seqlock.patch
-timekeeping-covert-xtimelock.patch
 
 # ANON RW SEMAPHORES
 
@@ -559,17 +561,32 @@
 # Device mapper
 dm-make-rt-aware.patch
 
+# ACPI
+# Dropped those two as they cause a scheduling in atomic failure and
+# we have no clue why we made those locks raw in the first place.
+# acpi-make-gbl-hardware-lock-raw.patch
+# acpi-make-ec-lock-raw-as-well.patch
+
+# This one is just a follow up to the raw spin locks
 # Simple raw spinlock based waitqueue
-wait-simple-version.patch
-acpi-gpe-use-wait-simple.patch
+# wait-simple-version.patch
+# acpi-gpe-use-wait-simple.patch
 
 # CPUMASK OFFSTACK
 cpumask-disable-offstack-on-rt.patch
 
+# Various fixes - fold them back
+seqlock-prevent-rt-starvation.patch
+fs-protect-opencoded-isize-seqcount.patch
+net-u64-stat-protect-seqcount.patch
+rfc-timer-fix-hotplug-for-rt.patch
+rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch
+rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch
+rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch
+rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch
+
 # Enable full RT
+cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch
 kconfig-disable-a-few-options-rt.patch
 kconfig-preempt-rt-full.patch
 
-# Needs some thought and testing
-#softirq-preempt-fix.patch
-

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/signal-fix-up-rcu-wreckage.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -11,7 +11,7 @@
 ===================================================================
 --- linux-3.2.orig/kernel/signal.c
 +++ linux-3.2/kernel/signal.c
-@@ -1329,12 +1329,12 @@ struct sighand_struct *__lock_task_sigha
+@@ -1362,12 +1362,12 @@ struct sighand_struct *__lock_task_sigha
  	struct sighand_struct *sighand;
  
  	for (;;) {
@@ -26,7 +26,7 @@
  			break;
  		}
  
-@@ -1345,7 +1345,7 @@ struct sighand_struct *__lock_task_sigha
+@@ -1378,7 +1378,7 @@ struct sighand_struct *__lock_task_sigha
  		}
  		spin_unlock(&sighand->siglock);
  		rcu_read_unlock();

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-disable-softirq-stacks-for-rt.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -19,7 +19,7 @@
 ===================================================================
 --- linux-3.2.orig/arch/powerpc/kernel/irq.c
 +++ linux-3.2/arch/powerpc/kernel/irq.c
-@@ -443,6 +443,7 @@ void irq_ctx_init(void)
+@@ -440,6 +440,7 @@ void irq_ctx_init(void)
  	}
  }
  
@@ -27,7 +27,7 @@
  static inline void do_softirq_onstack(void)
  {
  	struct thread_info *curtp, *irqtp;
-@@ -479,7 +480,7 @@ void do_softirq(void)
+@@ -476,7 +477,7 @@ void do_softirq(void)
  
  	local_irq_restore(flags);
  }

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-local-lock.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-local-lock.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/softirq-local-lock.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -89,7 +89,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -1597,6 +1597,7 @@ struct task_struct {
+@@ -1601,6 +1601,7 @@ struct task_struct {
  #endif
  #ifdef CONFIG_PREEMPT_RT_BASE
  	struct rcu_head put_rcu;

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/stomp-machine-mark-stomper-thread.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -12,7 +12,7 @@
 ===================================================================
 --- linux-3.2.orig/include/linux/sched.h
 +++ linux-3.2/include/linux/sched.h
-@@ -1818,6 +1818,7 @@ extern void thread_group_times(struct ta
+@@ -1822,6 +1822,7 @@ extern void thread_group_times(struct ta
  #define PF_FROZEN	0x00010000	/* frozen for system suspend */
  #define PF_FSTRANS	0x00020000	/* inside a filesystem transaction */
  #define PF_KSWAPD	0x00040000	/* I am kswapd */

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/time-remove-bogus-comments.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/time-remove-bogus-comments.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/time-remove-bogus-comments.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/time-remove-bogus-comments.patch)
@@ -0,0 +1,38 @@
+Subject: time: Remove bogus comments
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Tue, 28 Feb 2012 19:06:50 +0100
+
+There is no global irq lock which makes a syscall magically SMP
+safe. Remove the outdated comment concerning do_settimeofday() as
+well.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/time.c |    6 ------
+ 1 file changed, 6 deletions(-)
+
+Index: linux-3.2/kernel/time.c
+===================================================================
+--- linux-3.2.orig/kernel/time.c
++++ linux-3.2/kernel/time.c
+@@ -163,7 +163,6 @@ int do_sys_settimeofday(const struct tim
+ 		return error;
+ 
+ 	if (tz) {
+-		/* SMP safe, global irq locking makes it work. */
+ 		sys_tz = *tz;
+ 		update_vsyscall_tz();
+ 		if (firsttime) {
+@@ -173,12 +172,7 @@ int do_sys_settimeofday(const struct tim
+ 		}
+ 	}
+ 	if (tv)
+-	{
+-		/* SMP safe, again the code in arch/foo/time.c should
+-		 * globally block out interrupts when it runs.
+-		 */
+ 		return do_settimeofday(tv);
+-	}
+ 	return 0;
+ }
+ 

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/timekeeping-split-xtime-lock.patch)
@@ -0,0 +1,533 @@
+Subject: timekeeping: Split xtime_lock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Thu, 01 Mar 2012 15:14:06 +0100
+
+xtime_lock is going to be split apart in mainline, so we can shorten
+the seqcount protected regions and avoid updating seqcount in some
+code pathes. This is a straight forward split, so we can avoid the
+whole mess with raw seqlocks for RT.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ kernel/time/jiffies.c       |    4 -
+ kernel/time/ntp.c           |   24 +++++++----
+ kernel/time/tick-common.c   |   10 ++--
+ kernel/time/tick-internal.h |    3 -
+ kernel/time/tick-sched.c    |   16 ++++---
+ kernel/time/timekeeping.c   |   90 +++++++++++++++++++++++++-------------------
+ 6 files changed, 88 insertions(+), 59 deletions(-)
+
+Index: linux-3.2/kernel/time/jiffies.c
+===================================================================
+--- linux-3.2.orig/kernel/time/jiffies.c
++++ linux-3.2/kernel/time/jiffies.c
+@@ -74,9 +74,9 @@ u64 get_jiffies_64(void)
+ 	u64 ret;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		ret = jiffies_64;
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 	return ret;
+ }
+ EXPORT_SYMBOL(get_jiffies_64);
+Index: linux-3.2/kernel/time/ntp.c
+===================================================================
+--- linux-3.2.orig/kernel/time/ntp.c
++++ linux-3.2/kernel/time/ntp.c
+@@ -358,7 +358,8 @@ static enum hrtimer_restart ntp_leap_sec
+ {
+ 	enum hrtimer_restart res = HRTIMER_NORESTART;
+ 
+-	write_seqlock(&xtime_lock);
++	raw_spin_lock(&xtime_lock);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	switch (time_state) {
+ 	case TIME_OK:
+@@ -388,7 +389,8 @@ static enum hrtimer_restart ntp_leap_sec
+ 		break;
+ 	}
+ 
+-	write_sequnlock(&xtime_lock);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock(&xtime_lock);
+ 
+ 	return res;
+ }
+@@ -663,7 +665,8 @@ int do_adjtimex(struct timex *txc)
+ 
+ 	getnstimeofday(&ts);
+ 
+-	write_seqlock_irq(&xtime_lock);
++	raw_spin_lock_irq(&xtime_lock);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	if (txc->modes & ADJ_ADJTIME) {
+ 		long save_adjust = time_adjust;
+@@ -705,7 +708,8 @@ int do_adjtimex(struct timex *txc)
+ 	/* fill PPS status fields */
+ 	pps_fill_timex(txc);
+ 
+-	write_sequnlock_irq(&xtime_lock);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irq(&xtime_lock);
+ 
+ 	txc->time.tv_sec = ts.tv_sec;
+ 	txc->time.tv_usec = ts.tv_nsec;
+@@ -903,7 +907,8 @@ void hardpps(const struct timespec *phas
+ 
+ 	pts_norm = pps_normalize_ts(*phase_ts);
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	/* clear the error bits, they will be set again if needed */
+ 	time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR);
+@@ -916,7 +921,8 @@ void hardpps(const struct timespec *phas
+ 	 * just start the frequency interval */
+ 	if (unlikely(pps_fbase.tv_sec == 0)) {
+ 		pps_fbase = *raw_ts;
+-		write_sequnlock_irqrestore(&xtime_lock, flags);
++		write_seqcount_end(&xtime_seq);
++		raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 		return;
+ 	}
+ 
+@@ -931,7 +937,8 @@ void hardpps(const struct timespec *phas
+ 		time_status |= STA_PPSJITTER;
+ 		/* restart the frequency calibration interval */
+ 		pps_fbase = *raw_ts;
+-		write_sequnlock_irqrestore(&xtime_lock, flags);
++		write_seqcount_end(&xtime_seq);
++		raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 		pr_err("hardpps: PPSJITTER: bad pulse\n");
+ 		return;
+ 	}
+@@ -948,7 +955,8 @@ void hardpps(const struct timespec *phas
+ 
+ 	hardpps_update_phase(pts_norm.nsec);
+ 
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ }
+ EXPORT_SYMBOL(hardpps);
+ 
+Index: linux-3.2/kernel/time/tick-common.c
+===================================================================
+--- linux-3.2.orig/kernel/time/tick-common.c
++++ linux-3.2/kernel/time/tick-common.c
+@@ -63,13 +63,15 @@ int tick_is_oneshot_available(void)
+ static void tick_periodic(int cpu)
+ {
+ 	if (tick_do_timer_cpu == cpu) {
+-		write_seqlock(&xtime_lock);
++		raw_spin_lock(&xtime_lock);
++		write_seqcount_begin(&xtime_seq);
+ 
+ 		/* Keep track of the next tick event */
+ 		tick_next_period = ktime_add(tick_next_period, tick_period);
+ 
+ 		do_timer(1);
+-		write_sequnlock(&xtime_lock);
++		write_seqcount_end(&xtime_seq);
++		raw_spin_unlock(&xtime_lock);
+ 	}
+ 
+ 	update_process_times(user_mode(get_irq_regs()));
+@@ -130,9 +132,9 @@ void tick_setup_periodic(struct clock_ev
+ 		ktime_t next;
+ 
+ 		do {
+-			seq = read_seqbegin(&xtime_lock);
++			seq = read_seqcount_begin(&xtime_seq);
+ 			next = tick_next_period;
+-		} while (read_seqretry(&xtime_lock, seq));
++		} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 		clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT);
+ 
+Index: linux-3.2/kernel/time/tick-internal.h
+===================================================================
+--- linux-3.2.orig/kernel/time/tick-internal.h
++++ linux-3.2/kernel/time/tick-internal.h
+@@ -141,4 +141,5 @@ static inline int tick_device_is_functio
+ #endif
+ 
+ extern void do_timer(unsigned long ticks);
+-extern seqlock_t xtime_lock;
++extern raw_spinlock_t xtime_lock;
++extern seqcount_t xtime_seq;
+Index: linux-3.2/kernel/time/tick-sched.c
+===================================================================
+--- linux-3.2.orig/kernel/time/tick-sched.c
++++ linux-3.2/kernel/time/tick-sched.c
+@@ -56,7 +56,8 @@ static void tick_do_update_jiffies64(kti
+ 		return;
+ 
+ 	/* Reevalute with xtime_lock held */
+-	write_seqlock(&xtime_lock);
++	raw_spin_lock(&xtime_lock);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	delta = ktime_sub(now, last_jiffies_update);
+ 	if (delta.tv64 >= tick_period.tv64) {
+@@ -79,7 +80,8 @@ static void tick_do_update_jiffies64(kti
+ 		/* Keep the tick_next_period variable up to date */
+ 		tick_next_period = ktime_add(last_jiffies_update, tick_period);
+ 	}
+-	write_sequnlock(&xtime_lock);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock(&xtime_lock);
+ }
+ 
+ /*
+@@ -89,12 +91,14 @@ static ktime_t tick_init_jiffy_update(vo
+ {
+ 	ktime_t period;
+ 
+-	write_seqlock(&xtime_lock);
++	raw_spin_lock(&xtime_lock);
++	write_seqcount_begin(&xtime_seq);
+ 	/* Did we start the jiffies update yet ? */
+ 	if (last_jiffies_update.tv64 == 0)
+ 		last_jiffies_update = tick_next_period;
+ 	period = last_jiffies_update;
+-	write_sequnlock(&xtime_lock);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock(&xtime_lock);
+ 	return period;
+ }
+ 
+@@ -345,11 +349,11 @@ void tick_nohz_stop_sched_tick(int inidl
+ 	ts->idle_calls++;
+ 	/* Read jiffies and the time when jiffies were updated last */
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		last_update = last_jiffies_update;
+ 		last_jiffies = jiffies;
+ 		time_delta = timekeeping_max_deferment();
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	if (rcu_needs_cpu(cpu) || printk_needs_cpu(cpu) ||
+ 	    arch_needs_cpu(cpu)) {
+Index: linux-3.2/kernel/time/timekeeping.c
+===================================================================
+--- linux-3.2.orig/kernel/time/timekeeping.c
++++ linux-3.2/kernel/time/timekeeping.c
+@@ -139,8 +139,8 @@ static inline s64 timekeeping_get_ns_raw
+  * This read-write spinlock protects us from races in SMP while
+  * playing with xtime.
+  */
+-__cacheline_aligned_in_smp DEFINE_SEQLOCK(xtime_lock);
+-
++__cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(xtime_lock);
++seqcount_t xtime_seq;
+ 
+ /*
+  * The current time
+@@ -222,7 +222,7 @@ void getnstimeofday(struct timespec *ts)
+ 	WARN_ON(timekeeping_suspended);
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 
+ 		*ts = xtime;
+ 		nsecs = timekeeping_get_ns();
+@@ -230,7 +230,7 @@ void getnstimeofday(struct timespec *ts)
+ 		/* If arch requires, add in gettimeoffset() */
+ 		nsecs += arch_gettimeoffset();
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	timespec_add_ns(ts, nsecs);
+ }
+@@ -245,14 +245,14 @@ ktime_t ktime_get(void)
+ 	WARN_ON(timekeeping_suspended);
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		secs = xtime.tv_sec + wall_to_monotonic.tv_sec;
+ 		nsecs = xtime.tv_nsec + wall_to_monotonic.tv_nsec;
+ 		nsecs += timekeeping_get_ns();
+ 		/* If arch requires, add in gettimeoffset() */
+ 		nsecs += arch_gettimeoffset();
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 	/*
+ 	 * Use ktime_set/ktime_add_ns to create a proper ktime on
+ 	 * 32-bit architectures without CONFIG_KTIME_SCALAR.
+@@ -278,14 +278,14 @@ void ktime_get_ts(struct timespec *ts)
+ 	WARN_ON(timekeeping_suspended);
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		*ts = xtime;
+ 		tomono = wall_to_monotonic;
+ 		nsecs = timekeeping_get_ns();
+ 		/* If arch requires, add in gettimeoffset() */
+ 		nsecs += arch_gettimeoffset();
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec,
+ 				ts->tv_nsec + tomono.tv_nsec + nsecs);
+@@ -313,7 +313,7 @@ void getnstime_raw_and_real(struct times
+ 	do {
+ 		u32 arch_offset;
+ 
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 
+ 		*ts_raw = raw_time;
+ 		*ts_real = xtime;
+@@ -326,7 +326,7 @@ void getnstime_raw_and_real(struct times
+ 		nsecs_raw += arch_offset;
+ 		nsecs_real += arch_offset;
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	timespec_add_ns(ts_raw, nsecs_raw);
+ 	timespec_add_ns(ts_real, nsecs_real);
+@@ -365,7 +365,8 @@ int do_settimeofday(const struct timespe
+ 	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
+ 		return -EINVAL;
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	timekeeping_forward_now();
+ 
+@@ -381,7 +382,8 @@ int do_settimeofday(const struct timespe
+ 	update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock,
+ 				timekeeper.mult);
+ 
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 
+ 	/* signal hrtimers about time change */
+ 	clock_was_set();
+@@ -405,7 +407,8 @@ int timekeeping_inject_offset(struct tim
+ 	if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
+ 		return -EINVAL;
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	timekeeping_forward_now();
+ 
+@@ -418,7 +421,8 @@ int timekeeping_inject_offset(struct tim
+ 	update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock,
+ 				timekeeper.mult);
+ 
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 
+ 	/* signal hrtimers about time change */
+ 	clock_was_set();
+@@ -490,11 +494,11 @@ void getrawmonotonic(struct timespec *ts
+ 	s64 nsecs;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		nsecs = timekeeping_get_ns_raw();
+ 		*ts = raw_time;
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	timespec_add_ns(ts, nsecs);
+ }
+@@ -510,11 +514,11 @@ int timekeeping_valid_for_hres(void)
+ 	int ret;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 
+ 		ret = timekeeper.clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	return ret;
+ }
+@@ -572,7 +576,8 @@ void __init timekeeping_init(void)
+ 	read_persistent_clock(&now);
+ 	read_boot_clock(&boot);
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	ntp_init();
+ 
+@@ -593,7 +598,8 @@ void __init timekeeping_init(void)
+ 				-boot.tv_sec, -boot.tv_nsec);
+ 	total_sleep_time.tv_sec = 0;
+ 	total_sleep_time.tv_nsec = 0;
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ }
+ 
+ /* time in seconds when suspend began */
+@@ -640,7 +646,8 @@ void timekeeping_inject_sleeptime(struct
+ 	if (!(ts.tv_sec == 0 && ts.tv_nsec == 0))
+ 		return;
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 	timekeeping_forward_now();
+ 
+ 	__timekeeping_inject_sleeptime(delta);
+@@ -650,7 +657,8 @@ void timekeeping_inject_sleeptime(struct
+ 	update_vsyscall(&xtime, &wall_to_monotonic, timekeeper.clock,
+ 				timekeeper.mult);
+ 
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 
+ 	/* signal hrtimers about time change */
+ 	clock_was_set();
+@@ -673,7 +681,8 @@ static void timekeeping_resume(void)
+ 
+ 	clocksource_resume();
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 
+ 	if (timespec_compare(&ts, &timekeeping_suspend_time) > 0) {
+ 		ts = timespec_sub(ts, timekeeping_suspend_time);
+@@ -683,7 +692,8 @@ static void timekeeping_resume(void)
+ 	timekeeper.clock->cycle_last = timekeeper.clock->read(timekeeper.clock);
+ 	timekeeper.ntp_error = 0;
+ 	timekeeping_suspended = 0;
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 
+ 	touch_softlockup_watchdog();
+ 
+@@ -701,7 +711,8 @@ static int timekeeping_suspend(void)
+ 
+ 	read_persistent_clock(&timekeeping_suspend_time);
+ 
+-	write_seqlock_irqsave(&xtime_lock, flags);
++	raw_spin_lock_irqsave(&xtime_lock, flags);
++	write_seqcount_begin(&xtime_seq);
+ 	timekeeping_forward_now();
+ 	timekeeping_suspended = 1;
+ 
+@@ -724,7 +735,8 @@ static int timekeeping_suspend(void)
+ 		timekeeping_suspend_time =
+ 			timespec_add(timekeeping_suspend_time, delta_delta);
+ 	}
+-	write_sequnlock_irqrestore(&xtime_lock, flags);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock_irqrestore(&xtime_lock, flags);
+ 
+ 	clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
+ 	clocksource_suspend();
+@@ -1101,13 +1113,13 @@ void get_monotonic_boottime(struct times
+ 	WARN_ON(timekeeping_suspended);
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		*ts = xtime;
+ 		tomono = wall_to_monotonic;
+ 		sleep = total_sleep_time;
+ 		nsecs = timekeeping_get_ns();
+ 
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec + sleep.tv_sec,
+ 			ts->tv_nsec + tomono.tv_nsec + sleep.tv_nsec + nsecs);
+@@ -1158,10 +1170,10 @@ struct timespec current_kernel_time(void
+ 	unsigned long seq;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 
+ 		now = xtime;
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	return now;
+ }
+@@ -1173,11 +1185,11 @@ struct timespec get_monotonic_coarse(voi
+ 	unsigned long seq;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 
+ 		now = xtime;
+ 		mono = wall_to_monotonic;
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 
+ 	set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
+ 				now.tv_nsec + mono.tv_nsec);
+@@ -1209,11 +1221,11 @@ void get_xtime_and_monotonic_and_sleep_o
+ 	unsigned long seq;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		*xtim = xtime;
+ 		*wtom = wall_to_monotonic;
+ 		*sleep = total_sleep_time;
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ }
+ 
+ /**
+@@ -1225,9 +1237,9 @@ ktime_t ktime_get_monotonic_offset(void)
+ 	struct timespec wtom;
+ 
+ 	do {
+-		seq = read_seqbegin(&xtime_lock);
++		seq = read_seqcount_begin(&xtime_seq);
+ 		wtom = wall_to_monotonic;
+-	} while (read_seqretry(&xtime_lock, seq));
++	} while (read_seqcount_retry(&xtime_seq, seq));
+ 	return timespec_to_ktime(wtom);
+ }
+ 
+@@ -1239,7 +1251,9 @@ ktime_t ktime_get_monotonic_offset(void)
+  */
+ void xtime_update(unsigned long ticks)
+ {
+-	write_seqlock(&xtime_lock);
++	raw_spin_lock(&xtime_lock);
++	write_seqcount_begin(&xtime_seq);
+ 	do_timer(ticks);
+-	write_sequnlock(&xtime_lock);
++	write_seqcount_end(&xtime_seq);
++	raw_spin_unlock(&xtime_lock);
+ }

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/timer-handle-idle-trylock-in-get-next-timer-irq.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -36,7 +36,7 @@
 ===================================================================
 --- linux-3.2.orig/kernel/rtmutex.c
 +++ linux-3.2/kernel/rtmutex.c
-@@ -860,15 +860,10 @@ EXPORT_SYMBOL(rt_spin_unlock_wait);
+@@ -861,15 +861,10 @@ EXPORT_SYMBOL(rt_spin_unlock_wait);
  
  int __lockfunc rt_spin_trylock(spinlock_t *lock)
  {

Modified: dists/trunk/linux-2.6/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/usb-hcd-use-local-irq-nort.patch	Sun Mar  4 20:27:13 2012	(r18790)
@@ -16,7 +16,7 @@
 ===================================================================
 --- linux-3.2.orig/drivers/usb/core/hcd.c
 +++ linux-3.2/drivers/usb/core/hcd.c
-@@ -2146,7 +2146,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
+@@ -2145,7 +2145,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
  	 * when the first handler doesn't use it.  So let's just
  	 * assume it's never used.
  	 */
@@ -25,7 +25,7 @@
  
  	if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd))) {
  		rc = IRQ_NONE;
-@@ -2159,7 +2159,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
+@@ -2158,7 +2158,7 @@ irqreturn_t usb_hcd_irq (int irq, void *
  		rc = IRQ_HANDLED;
  	}
  

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch)
@@ -0,0 +1,32 @@
+Subject: x86: vdso: Remove bogus locking in update_vsyscall_tz()
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Tue, 28 Feb 2012 19:10:46 +0100
+
+Changing the sequence count in update_vsyscall_tz() is completely
+pointless. 
+
+The vdso code copies the data unprotected. There is no point to change
+this as sys_tz is nowhere protected at all. See sys_gettimeofday().
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ arch/x86/kernel/vsyscall_64.c |    5 -----
+ 1 file changed, 5 deletions(-)
+
+Index: linux-2.6/arch/x86/kernel/vsyscall_64.c
+===================================================================
+--- linux-2.6.orig/arch/x86/kernel/vsyscall_64.c
++++ linux-2.6/arch/x86/kernel/vsyscall_64.c
+@@ -80,12 +80,7 @@ early_param("vsyscall", vsyscall_setup);
+ 
+ void update_vsyscall_tz(void)
+ {
+-	unsigned long flags;
+-
+-	write_seqlock_irqsave(&vsyscall_gtod_data.lock, flags);
+-	/* sys_tz has changed */
+ 	vsyscall_gtod_data.sys_tz = sys_tz;
+-	write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags);
+ }
+ 
+ void update_vsyscall(struct timespec *wall_time, struct timespec *wtm,

Copied: dists/trunk/linux-2.6/debian/patches/features/all/rt/x86-vdso-use-seqcount.patch (from r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/x86-vdso-use-seqcount.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/rt/x86-vdso-use-seqcount.patch	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/patches/features/all/rt/x86-vdso-use-seqcount.patch)
@@ -0,0 +1,124 @@
+Subject: x86: vdso: Use seqcount instead of seqlock
+From: Thomas Gleixner <tglx at linutronix.de>
+Date: Tue, 28 Feb 2012 18:24:07 +0100
+
+The update of the vdso data happens under xtime_lock, so adding a
+nested lock is pointless. Just use a seqcount to sync the readers.
+
+Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
+---
+ arch/x86/include/asm/vgtod.h   |    2 +-
+ arch/x86/kernel/vsyscall_64.c  |   11 +++--------
+ arch/x86/vdso/vclock_gettime.c |   16 ++++++++--------
+ 3 files changed, 12 insertions(+), 17 deletions(-)
+
+Index: linux-3.2/arch/x86/include/asm/vgtod.h
+===================================================================
+--- linux-3.2.orig/arch/x86/include/asm/vgtod.h
++++ linux-3.2/arch/x86/include/asm/vgtod.h
+@@ -5,7 +5,7 @@
+ #include <linux/clocksource.h>
+ 
+ struct vsyscall_gtod_data {
+-	seqlock_t	lock;
++	seqcount_t	seq;
+ 
+ 	/* open coded 'struct timespec' */
+ 	time_t		wall_time_sec;
+Index: linux-3.2/arch/x86/kernel/vsyscall_64.c
+===================================================================
+--- linux-3.2.orig/arch/x86/kernel/vsyscall_64.c
++++ linux-3.2/arch/x86/kernel/vsyscall_64.c
+@@ -52,10 +52,7 @@
+ #include "vsyscall_trace.h"
+ 
+ DEFINE_VVAR(int, vgetcpu_mode);
+-DEFINE_VVAR(struct vsyscall_gtod_data, vsyscall_gtod_data) =
+-{
+-	.lock = __SEQLOCK_UNLOCKED(__vsyscall_gtod_data.lock),
+-};
++DEFINE_VVAR(struct vsyscall_gtod_data, vsyscall_gtod_data);
+ 
+ static enum { EMULATE, NATIVE, NONE } vsyscall_mode = NATIVE;
+ 
+@@ -86,9 +83,7 @@ void update_vsyscall_tz(void)
+ void update_vsyscall(struct timespec *wall_time, struct timespec *wtm,
+ 			struct clocksource *clock, u32 mult)
+ {
+-	unsigned long flags;
+-
+-	write_seqlock_irqsave(&vsyscall_gtod_data.lock, flags);
++	write_seqcount_begin(&vsyscall_gtod_data.seq);
+ 
+ 	/* copy vsyscall data */
+ 	vsyscall_gtod_data.clock.vclock_mode	= clock->archdata.vclock_mode;
+@@ -101,7 +96,7 @@ void update_vsyscall(struct timespec *wa
+ 	vsyscall_gtod_data.wall_to_monotonic	= *wtm;
+ 	vsyscall_gtod_data.wall_time_coarse	= __current_kernel_time();
+ 
+-	write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags);
++	write_seqcount_end(&vsyscall_gtod_data.seq);
+ }
+ 
+ static void warn_bad_vsyscall(const char *level, struct pt_regs *regs,
+Index: linux-3.2/arch/x86/vdso/vclock_gettime.c
+===================================================================
+--- linux-3.2.orig/arch/x86/vdso/vclock_gettime.c
++++ linux-3.2/arch/x86/vdso/vclock_gettime.c
+@@ -86,11 +86,11 @@ notrace static noinline int do_realtime(
+ {
+ 	unsigned long seq, ns;
+ 	do {
+-		seq = read_seqbegin(&gtod->lock);
++		seq = read_seqcount_begin(&gtod->seq);
+ 		ts->tv_sec = gtod->wall_time_sec;
+ 		ts->tv_nsec = gtod->wall_time_nsec;
+ 		ns = vgetns();
+-	} while (unlikely(read_seqretry(&gtod->lock, seq)));
++	} while (unlikely(read_seqcount_retry(&gtod->seq, seq)));
+ 	timespec_add_ns(ts, ns);
+ 	return 0;
+ }
+@@ -99,12 +99,12 @@ notrace static noinline int do_monotonic
+ {
+ 	unsigned long seq, ns, secs;
+ 	do {
+-		seq = read_seqbegin(&gtod->lock);
++		seq = read_seqcount_begin(&gtod->seq);
+ 		secs = gtod->wall_time_sec;
+ 		ns = gtod->wall_time_nsec + vgetns();
+ 		secs += gtod->wall_to_monotonic.tv_sec;
+ 		ns += gtod->wall_to_monotonic.tv_nsec;
+-	} while (unlikely(read_seqretry(&gtod->lock, seq)));
++	} while (unlikely(read_seqcount_retry(&gtod->seq, seq)));
+ 
+ 	/* wall_time_nsec, vgetns(), and wall_to_monotonic.tv_nsec
+ 	 * are all guaranteed to be nonnegative.
+@@ -123,10 +123,10 @@ notrace static noinline int do_realtime_
+ {
+ 	unsigned long seq;
+ 	do {
+-		seq = read_seqbegin(&gtod->lock);
++		seq = read_seqcount_begin(&gtod->seq);
+ 		ts->tv_sec = gtod->wall_time_coarse.tv_sec;
+ 		ts->tv_nsec = gtod->wall_time_coarse.tv_nsec;
+-	} while (unlikely(read_seqretry(&gtod->lock, seq)));
++	} while (unlikely(read_seqcount_retry(&gtod->seq, seq)));
+ 	return 0;
+ }
+ 
+@@ -134,12 +134,12 @@ notrace static noinline int do_monotonic
+ {
+ 	unsigned long seq, ns, secs;
+ 	do {
+-		seq = read_seqbegin(&gtod->lock);
++		seq = read_seqcount_begin(&gtod->seq);
+ 		secs = gtod->wall_time_coarse.tv_sec;
+ 		ns = gtod->wall_time_coarse.tv_nsec;
+ 		secs += gtod->wall_to_monotonic.tv_sec;
+ 		ns += gtod->wall_to_monotonic.tv_nsec;
+-	} while (unlikely(read_seqretry(&gtod->lock, seq)));
++	} while (unlikely(read_seqcount_retry(&gtod->seq, seq)));
+ 
+ 	/* wall_time_nsec and wall_to_monotonic.tv_nsec are
+ 	 * guaranteed to be between 0 and NSEC_PER_SEC.

Modified: dists/trunk/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/series/base	Sun Mar  4 20:27:13 2012	(r18790)
@@ -48,3 +48,9 @@
 + bugfix/alpha/alpha-add-io-read-write-16-32-be-functions.patch
 + bugfix/arm/ARM-ixp4xx-mtd-oops.patch
 
++ features/all/fs-symlink-restrictions-on-sticky-directories.patch
++ features/all/fs-symlink-restrictions-on-sticky-directories-fix-2.patch
++ features/all/fs-hardlink-creation-restrictions.patch
++ features/all/fs-hardlink-creation-restrictions-fix.patch
++ features/all/fs-hardlink-creation-restriction-cleanup.patch
++ bugfix/all/iwlwifi-fix-key-removal.patch

Modified: dists/trunk/linux-2.6/debian/patches/series/base-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base-extra	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/patches/series/base-extra	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,7 +1,5 @@
 + features/all/rt/x86_64-patch-for-idle-notifiers.patch featureset=rt
 + features/all/rt/re-possible-slab-deadlock-while-doing-ifenslave-1.patch featureset=rt
-+ features/all/rt/genirq-unmask-oneshot-irqs-when-thread-is-not-woken.patch featureset=rt
-+ features/all/rt/genirq-handle-pending-irqs-in-irq-startup.patch featureset=rt
 + features/all/rt/x86-kprobes-remove-bogus-preempt-enable.patch featureset=rt
 + features/all/rt/x86-hpet-disable-msi-on-lenovo-w510.patch featureset=rt
 + features/all/rt/block-shorten-interrupt-disabled-regions.patch featureset=rt
@@ -14,6 +12,16 @@
 + features/all/rt/power-allow-irq-threading.patch featureset=rt
 + features/all/rt/sched-keep-period-timer-alive-when-throttled.patch featureset=rt
 + features/all/rt/sched-prevent-boosting-from-throttling.patch featureset=rt
++ features/all/rt/time-remove-bogus-comments.patch featureset=rt
++ features/all/rt/x86-vdso-remove-bogus-locking-in-update_vsyscall_tz.patch featureset=rt
++ features/all/rt/x86-vdso-use-seqcount.patch featureset=rt
++ features/all/rt/ia64-vdso-use-seqcount.patch featureset=rt
++ features/all/rt/seqlock-remove-unused-functions.patch featureset=rt
++ features/all/rt/seqlock-use-seqcount.patch featureset=rt
++ features/all/rt/seqlock-provide-seq-spin-lock.patch featureset=rt
++ features/all/rt/fs-struct-use-seqlock.patch featureset=rt
++ features/all/rt/fs-dentry-use-seqlock.patch featureset=rt
++ features/all/rt/timekeeping-split-xtime-lock.patch featureset=rt
 + features/all/rt/intel_idle-convert-i7300_idle_lock-to-raw-spinlock.patch featureset=rt
 + features/all/rt/mm-memcg-shorten-preempt-disabled-section-around-event-checks.patch featureset=rt
 + features/all/rt/tracing-account-for-preempt-off-in-preempt_schedule.patch featureset=rt
@@ -59,14 +67,8 @@
 + features/all/rt/fix-rt-int3-x86_32-3.2-rt.patch featureset=rt
 + features/all/rt/rcu-reduce-lock-section.patch featureset=rt
 + features/all/rt/locking-various-init-fixes.patch featureset=rt
-+ features/all/rt/seqlock-remove-unused-functions.patch featureset=rt
-+ features/all/rt/seqlock-use-seqcount.patch featureset=rt
 + features/all/rt/wait-provide-__wake_up_all_locked.patch featureset=rt
 + features/all/rt/pci-access-use-__wake_up_all_locked.patch featureset=rt
-+ features/all/rt/acpi-make-gbl-hardware-lock-raw.patch featureset=rt
-+ features/all/rt/acpi-make-ec-lock-raw-as-well.patch featureset=rt
-+ features/all/rt/seqlock-raw-seqlock.patch featureset=rt
-+ features/all/rt/timekeeping-covert-xtimelock.patch featureset=rt
 + features/all/rt/latency-hist.patch featureset=rt
 + features/all/rt/hwlatdetect.patch featureset=rt
 + features/all/rt/early-printk-consolidate.patch featureset=rt
@@ -248,8 +250,15 @@
 + features/all/rt/scsi-fcoe-rt-aware.patch featureset=rt
 + features/all/rt/x86-crypto-reduce-preempt-disabled-regions.patch featureset=rt
 + features/all/rt/dm-make-rt-aware.patch featureset=rt
-+ features/all/rt/wait-simple-version.patch featureset=rt
-+ features/all/rt/acpi-gpe-use-wait-simple.patch featureset=rt
 + features/all/rt/cpumask-disable-offstack-on-rt.patch featureset=rt
++ features/all/rt/seqlock-prevent-rt-starvation.patch featureset=rt
++ features/all/rt/fs-protect-opencoded-isize-seqcount.patch featureset=rt
++ features/all/rt/net-u64-stat-protect-seqcount.patch featureset=rt
++ features/all/rt/rfc-timer-fix-hotplug-for-rt.patch featureset=rt
++ features/all/rt/rfc-futex-rt-fix-possible-lockup-when-taking-pi_lock-in-proxy-handler.patch featureset=rt
++ features/all/rt/rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch featureset=rt
++ features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch featureset=rt
++ features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch featureset=rt
++ features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch featureset=rt
 + features/all/rt/kconfig-disable-a-few-options-rt.patch featureset=rt
 + features/all/rt/kconfig-preempt-rt-full.patch featureset=rt

Modified: dists/trunk/linux-2.6/debian/po/nl.po
==============================================================================
--- dists/trunk/linux-2.6/debian/po/nl.po	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/po/nl.po	Sun Mar  4 20:27:13 2012	(r18790)
@@ -7,10 +7,11 @@
 msgstr ""
 "Project-Id-Version: linux-2.6\n"
 "Report-Msgid-Bugs-To: linux-2.6 at packages.debian.org\n"
-"POT-Creation-Date: 2011-03-30 10:34+0200\n"
-"PO-Revision-Date: 2011-04-02 20:07+0100\n"
+"POT-Creation-Date: 2011-07-04 04:24+0100\n"
+"PO-Revision-Date: 2012-02-04 12:27+0100\n"
 "Last-Translator: willem kuyn <willemkuyn at gmail.com>\n"
 "Language-Team: Debian-Dutch <debian-l10n-dutch at lists.debian.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +20,7 @@
 #. Description
 #: ../templates/temp.image.plain/templates:2001
 msgid "Abort installation after depmod error?"
-msgstr "Installatie afbreken na depmod fout? "
+msgstr "Installatie afbreken na depmod fout?"
 
 #. Type: boolean
 #. Description
@@ -37,7 +38,7 @@
 #. Description
 #: ../templates/temp.image.plain/templates:2001
 msgid "You should abort the installation and fix the errors in depmod, or regenerate the initrd image with a known good modules.dep file. If you don't abort the installation, there is a danger that the system will fail to boot."
-msgstr "U zou de installatie moeten afbreken en de fouten in depmod herstellen, of het initrd bestand opnieuw moeten genereren met een correct modules.dep bestand. Als u de installatie niet afbreekt dan bestaat het gevaar dat het systeem niet zal starten."
+msgstr "U zou de installatie moeten afbreken en de fouten in depmod herstellen, of het initrd-bestand opnieuw moeten genereren met een correct modules.dep bestand. Als u de installatie niet afbreekt dan bestaat het gevaar dat het systeem niet zal starten."
 
 #. Type: boolean
 #. Description
@@ -49,7 +50,7 @@
 #. Description
 #: ../templates/temp.image.plain/templates:3001
 msgid "You are running a kernel (version ${running}) and attempting to remove the same version."
-msgstr "U gebruikt kernel (versie ${running}) en probeert de zelfde versie te verwijderen."
+msgstr "U gebruikt kernel (versie ${running}) en probeert dezelfde versie te verwijderen."
 
 #. Type: boolean
 #. Description
@@ -67,35 +68,29 @@
 #. Description
 #: ../templates/temp.image.plain/templates:4001
 msgid "Required firmware files may be missing"
-msgstr "De vereiste firmware bestanden kunnen ontbreken"
+msgstr "De vereiste firmware-bestanden kunnen ontbreken"
 
 #. Type: note
 #. Description
 #: ../templates/temp.image.plain/templates:4001
 msgid "This system is currently running Linux ${runningversion} and you are installing Linux ${version}.  In the new version some of the drivers used on this system may require additional firmware files:"
-msgstr "Het systeem draait op dit moment Linux ${runningversion} en u installeert Linux ${version}. In de nieuwe versie kunnen enkele stuurprogramma's van het systeem aparte firmware bestanden nodig hebben."
+msgstr "Het systeem draait op dit moment Linux ${runningversion} en u installeert Linux ${version}. In de nieuwe versie kunnen enkele stuurprogramma's van het systeem aparte firmware-bestanden nodig hebben."
 
 #. Type: note
 #. Description
 #: ../templates/temp.image.plain/templates:4001
 msgid "Most firmware files are not included in the system because they do not conform to the Debian Free Software Guidelines. You may need to reconfigure the package manager to include the contrib and non-free sections of the package archive before you can install these firmware files."
-msgstr "Veel firmware bestanden zijn niet in het systeem opgenomen omdat zij niet voldoen aan de Debian Free Software Guidelines. Mogelijk moet u de configuratie van de pakket manager aanpassen en de contrib en non-free secties van het pakket archief toevoegen voordat u deze firmware bestanden kunt installeren. "
+msgstr "Veel firmware-bestanden zijn niet in het systeem opgenomen omdat zij niet voldoen aan de Debian Richtlijnen voor Vrije Software (DFSG). Mogelijk moet u de configuratie van de pakketbeheerprogramma aanpassen en de contrib en non-free secties van het pakketarchief toevoegen voordat u deze firmware bestanden kunt installeren. "
 
 #. Type: error
 #. Description
 #: ../templates/temp.image.plain/templates:5001
-msgid "Boot loader configuration must be updated"
-msgstr "De bootloader configuratie moet worden aangepast."
+#| msgid "Boot loader configuration must be updated"
+msgid "Ramdisk configuration must be updated"
+msgstr "De ramdisk-configuratie moet worden aangepast."
 
 #. Type: error
 #. Description
 #: ../templates/temp.image.plain/templates:5001
-msgid "Kernel packages no longer update a default boot loader.  You should remove 'do_bootloader = yes' from /etc/kernel-img.conf."
-msgstr "Kernel pakketten passen de bootloader configuratie niet langer aan. U dient do_bootloader = yes' uit /etc/kernel-img.conf te verwijderen."
-
-#. Type: error
-#. Description
-#: ../templates/temp.image.plain/templates:5001
-msgid "If the boot loader needs to be updated whenever a new kernel is installed, the boot loader package should install a script in /etc/kernel/postinst.d.  Alternately, you can specify the command to update the boot loader by setting the 'postinst_hook' variable in /etc/kernel-img.conf."
-msgstr "Als de bootloader configuratie aangepast moet worden bij de installatie van een nieuwe kernel dan dient het bootloader pakket eeen script in /etc/kernel/postinst.d te installeren. Anders kunt u de opdracht om de bootloader configuratie aanpassen door het aanzetten van de 'postinst_hook' variabele in /etc/kernel-img.conf."
-
+msgid "Kernel packages will no longer run a specific ramdisk creator.  The ramdisk creator package must install a script in /etc/kernel/postinst.d, and you should remove the line beginning 'ramdisk =' from /etc/kernel-img.conf."
+msgstr "Kernel pakketten starten niet langer een bepaalde ramdisk generator. Het ramdisk generator pakket moet een script in /etc/kernel/postinst.d installeren en u dient de regel te verwijderen die begint met 'ramdisk =' uit /etc/kernel-img.conf."

Copied: dists/trunk/linux-2.6/debian/po/pl.po (from r18789, dists/sid/linux-2.6/debian/po/pl.po)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/po/pl.po	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/po/pl.po)
@@ -0,0 +1,153 @@
+# Translation of linux-2.6 debconf templates to Polish.
+# Copyright (C) 2011
+# This file is distributed under the same license as the linux-2.6 package.
+#
+# Michał Kułach <michal.kulach at gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: linux-2.6 at packages.debian.org\n"
+"POT-Creation-Date: 2011-07-04 04:24+0100\n"
+"PO-Revision-Date: 2012-02-05 18:38+0100\n"
+"Last-Translator: Michał Kułach <michal.kulach at gmail.com>\n"
+"Language-Team: Polish <debian-l10n-polish at lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid "Abort installation after depmod error?"
+msgstr "Przerwać instalację po błędzie depmod?"
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid ""
+"The 'depmod' command exited with the exit code ${exit_value} "
+"(${SIGNAL}${CORE})."
+msgstr ""
+"Polecenie \"depmod\" zakończyło się z kodem wyjścia ${exit_value} "
+"(${SIGNAL}${CORE})."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid ""
+"Since this image uses initrd, the ${modules_base}/=V/modules.dep file will "
+"not be deleted, even though it may be invalid."
+msgstr ""
+"Ponieważ ten obraz używa initrd, plik ${modules_base}/=V/modules.dep nie "
+"zostanie usunięty, nawet jeśli może być nieprawidłowy."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid ""
+"You should abort the installation and fix the errors in depmod, or "
+"regenerate the initrd image with a known good modules.dep file. If you don't "
+"abort the installation, there is a danger that the system will fail to boot."
+msgstr ""
+"Należy przerwać instalację i naprawić błędy depmod lub wygenerować obraz "
+"initrd ponownie z poprawnym, znanym plikiem modules.dep. Jeśli instalacja nie "
+"zostanie przerwana, istnieje niebezpieczeństwo, że system może się nie "
+"uruchomić."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid "Abort kernel removal?"
+msgstr "Przerwać usuwanie jądra?"
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid ""
+"You are running a kernel (version ${running}) and attempting to remove the "
+"same version."
+msgstr ""
+"Aktualnie używane jest jądro (wersja ${running}) i próbuje się usunąć tę samą "
+"wersję."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid ""
+"This can make the system unbootable as it will remove /boot/vmlinuz-"
+"${running} and all modules under the directory /lib/modules/${running}. This "
+"can only be fixed with a copy of the kernel image and the corresponding "
+"modules."
+msgstr ""
+"Skutkiem mogą być problemy z rozruchem systemu, ponieważ zostanie usunięty "
+"/boot/vmlinuz-${running} i wszystkie moduły z katalogu "
+"/lib/modules/${running}. Jedynym rozwiązaniem w takim wypadku jest "
+"skopiowanie obrazu jądra i towarzyszących mu modułów."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid ""
+"It is highly recommended to abort the kernel removal unless you are prepared "
+"to fix the system after removal."
+msgstr ""
+"Jest wysoce zalecane, aby przerwać usuwanie jądra, chyba że użytkownik jest "
+"przygotowany do naprawy systemu po usunięciu."
+
+#. Type: note
+#. Description
+#: ../templates/temp.image.plain/templates:4001
+msgid "Required firmware files may be missing"
+msgstr "Wymagane pliki firmware mogą być niedostępne"
+
+#. Type: note
+#. Description
+#: ../templates/temp.image.plain/templates:4001
+msgid ""
+"This system is currently running Linux ${runningversion} and you are "
+"installing Linux ${version}.  In the new version some of the drivers used on "
+"this system may require additional firmware files:"
+msgstr ""
+"System działa obecnie na jądrze Linux ${runningversion}, a instalowany jest "
+"Linux ${version}. W nowej wersji niektóre ze sterowników używanych przez "
+"system, mogą wymagać dodatkowych plików firmware:"
+
+#. Type: note
+#. Description
+#: ../templates/temp.image.plain/templates:4001
+msgid ""
+"Most firmware files are not included in the system because they do not "
+"conform to the Debian Free Software Guidelines. You may need to reconfigure "
+"the package manager to include the contrib and non-free sections of the "
+"package archive before you can install these firmware files."
+msgstr ""
+"Większość plików firmware nie jest dołączonych do systemu, ponieważ nie "
+"spełniają Wytycznych Debiana dotyczących Wolnego Oprogramowania. Może zajść "
+"potrzeba ponownej konfiguracji menedżera pakietów, aby dołączyć sekcje "
+"contrib i non-free archiwum pakietów, przed możliwością zainstalowania "
+"potrzebnych plików firmware."
+
+#. Type: error
+#. Description
+#: ../templates/temp.image.plain/templates:5001
+msgid "Ramdisk configuration must be updated"
+msgstr "Konfiguracja ramdisku musi zostać zaktualizowana"
+
+#. Type: error
+#. Description
+#: ../templates/temp.image.plain/templates:5001
+msgid ""
+"Kernel packages will no longer run a specific ramdisk creator.  The ramdisk "
+"creator package must install a script in /etc/kernel/postinst.d, and you "
+"should remove the line beginning 'ramdisk =' from /etc/kernel-img.conf."
+msgstr ""
+"Pakiety jądra nie uruchamiają dłużej specjalnego kreatora ramdisku. Pakiet "
+"kreatora ramdisku musi zainstalować skrypt w /etc/kernel/postinst.d, a "
+"użytkownik powinien usunąć wszystkie wiersze zaczynające się od \"ramdisk =\" "
+"z pliku /etc/kernel-img.conf."
+
+

Copied: dists/trunk/linux-2.6/debian/po/tr.po (from r18789, dists/sid/linux-2.6/debian/po/tr.po)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/po/tr.po	Sun Mar  4 20:27:13 2012	(r18790, copy of r18789, dists/sid/linux-2.6/debian/po/tr.po)
@@ -0,0 +1,96 @@
+# Turkish translation of linux-2.6 debconf template.
+# Copyright (C) 2012
+# This file is distributed under the same license as the linux-2.6 package.
+# Mert Dirik <mertdirik at gmail.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: linux-2.6 3.2.4-1\n"
+"Report-Msgid-Bugs-To: linux-2.6 at packages.debian.org\n"
+"POT-Creation-Date: 2011-07-04 04:24+0100\n"
+"PO-Revision-Date: 2012-02-12 22:36+0200\n"
+"Last-Translator: Mert Dirik <mertdirik at gmail.com>\n"
+"Language-Team: Debian L10n Turkish <debian-l10n-turkish at lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid "Abort installation after depmod error?"
+msgstr "depmod hatasından sonra kurulum iptal edilsin mi?"
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid "The 'depmod' command exited with the exit code ${exit_value} (${SIGNAL}${CORE})."
+msgstr "'depmod' komutu ${exit_value} (${SIGNAL}${CORE}) çıkış koduyla sonlandı."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid "Since this image uses initrd, the ${modules_base}/=V/modules.dep file will not be deleted, even though it may be invalid."
+msgstr "Bu görüntü initrd kullandığından ötürü ${modules_base}/=V/modules.dep dosyası, dosya geçersiz olsa da silinmeyecektir."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:2001
+msgid "You should abort the installation and fix the errors in depmod, or regenerate the initrd image with a known good modules.dep file. If you don't abort the installation, there is a danger that the system will fail to boot."
+msgstr "Ya kurulumu iptal edip depmod'daki hataları düzeltmeli ya da initrd görüntüsünü düzgün olduğu bilinen bir modules.dep dosyasıyla yeniden oluşturmalısınız. Kurulumu iptal etmediğiniz takdirde sisteminizin başlamama olasılığı vardır."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid "Abort kernel removal?"
+msgstr "Çekirdeği kaldırma işlemi iptal edilsin mi?"
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid "You are running a kernel (version ${running}) and attempting to remove the same version."
+msgstr "Kullandığınız çekirdekle (${running}) aynı sürümdeki çekirdeği kaldırmaya çalışıyorsunuz."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid "This can make the system unbootable as it will remove /boot/vmlinuz-${running} and all modules under the directory /lib/modules/${running}. This can only be fixed with a copy of the kernel image and the corresponding modules."
+msgstr "Bu eylem sisteminizi başlatılamaz hale getirebilir ( /boot/vmlinuz-${running} dosyasını ve  /lib/modules/${running} dizinindeki tüm modülleri kaldıracağından dolayı). Bu durum yalnızca bir çekirdek görüntüsü ve bu görüntüye uygun modüller yardımıyla düzeltilebilir."
+
+#. Type: boolean
+#. Description
+#: ../templates/temp.image.plain/templates:3001
+msgid "It is highly recommended to abort the kernel removal unless you are prepared to fix the system after removal."
+msgstr "Kaldırma işlemi sonrasında sistemi düzeltmeye hazır olmadığınız takdirde kaldırma işleminden vazgeçmeniz şiddetle tavsiye edilir."
+
+#. Type: note
+#. Description
+#: ../templates/temp.image.plain/templates:4001
+msgid "Required firmware files may be missing"
+msgstr "Gerekli aygıt yazılımları eksik"
+
+#. Type: note
+#. Description
+#: ../templates/temp.image.plain/templates:4001
+msgid "This system is currently running Linux ${runningversion} and you are installing Linux ${version}.  In the new version some of the drivers used on this system may require additional firmware files:"
+msgstr "Bu sistem şu anda Linux ${runningversion} kullanıyor ve siz Linux ${version} sürümünü kurmak üzeresiniz. Yeni sürümde bu sistemde kullanmakta olduğunuz bazı sürücüler ek aygıt yazılımları (firmware) gerektirebilir:"
+
+#. Type: note
+#. Description
+#: ../templates/temp.image.plain/templates:4001
+msgid "Most firmware files are not included in the system because they do not conform to the Debian Free Software Guidelines. You may need to reconfigure the package manager to include the contrib and non-free sections of the package archive before you can install these firmware files."
+msgstr "Çoğu aygıt yazılımı Debian Özgür Yazılım Yönergeleri'ne uymadığı için sisteme dahil edilmez. Bu aygıt yazılımlarını kurabilmek için öncelikle paket yöneticisini paket arşivinin contrib ve non-free kısımlarını kullanacak şekilde ayarlamanız gerekir."
+
+#. Type: error
+#. Description
+#: ../templates/temp.image.plain/templates:5001
+msgid "Ramdisk configuration must be updated"
+msgstr "Ramdisk yapılandırılmasının güncellenmesi gerekli"
+
+#. Type: error
+#. Description
+#: ../templates/temp.image.plain/templates:5001
+msgid "Kernel packages will no longer run a specific ramdisk creator.  The ramdisk creator package must install a script in /etc/kernel/postinst.d, and you should remove the line beginning 'ramdisk =' from /etc/kernel-img.conf."
+msgstr "Çekirdek paketleri bundan böyle özel ramdisk oluşturucularını kullanamaz. ramdisk oluşturucu paket /etc/kernel/postinst.d konumuna bir betik kurmalıdır. Sizin de /etc/kernel-img.conf dosyasında 'ramdisk =' ile başlayan satırı kaldırmanız gerekmektedir."
+

Modified: dists/trunk/linux-2.6/debian/rules.real
==============================================================================
--- dists/trunk/linux-2.6/debian/rules.real	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/rules.real	Sun Mar  4 20:27:13 2012	(r18790)
@@ -10,7 +10,7 @@
 DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_HOST_GNU_TYPE)
 DEB_HOST_MULTIARCH:= $(shell dpkg-architecture -a'$(ARCH)' -qDEB_HOST_MULTIARCH)
 DEB_BUILD_ARCH    := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_BUILD_ARCH)
-UPLOADER  := $(shell dpkg-parsechangelog | sed -ne 's,^Maintainer: .[^<]*<\([^>]*\)>,\1,p')
+MAINTAINER := $(shell sed -ne 's,^Maintainer: .[^<]*<\([^>]*\)>,\1,p' debian/control)
 DISTRIBUTION := $(shell dpkg-parsechangelog | sed -ne 's,^Distribution: ,,p')
 
 export PYTHONPATH = $(CURDIR)/debian/lib/python
@@ -26,7 +26,7 @@
 stamp = [ -d $(dir $@) ] || mkdir $(dir $@); touch $@
 
 setup_env := env -u ABINAME -u ABINAME_PART -u ARCH -u FEATURESET -u FLAVOUR -u VERSION -u LOCALVERSION
-setup_env += DISTRIBUTION_OFFICIAL_BUILD=1 DISTRIBUTION_UPLOADER=$(UPLOADER) DISTRIBUTION_VERSION="$(SOURCEVERSION)"
+setup_env += DISTRIBUTION_OFFICIAL_BUILD=1 DISTRIBUTION_MAINTAINER=$(MAINTAINER) DISTRIBUTION_VERSION="$(SOURCEVERSION)"
 
 MAKE_CLEAN = $(setup_env) $(MAKE)
 MAKE_SELF := $(MAKE) -f debian/rules.real $(MAKEOVERRIDES)
@@ -149,7 +149,6 @@
 	dh_compress
 	dh_fixperms
 	dh_installdeb
-	dh_shlibdeps
 	dh_gencontrol -- $(GENCONTROL_ARGS)
 	dh_md5sums
 	dh_builddeb -- -Zxz $(BUILDDEB_ARGS)

Modified: dists/trunk/linux-2.6/debian/templates/control.image.type-plain.in
==============================================================================
--- dists/trunk/linux-2.6/debian/templates/control.image.type-plain.in	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/templates/control.image.type-plain.in	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,8 +1,9 @@
 Package: linux-image- at abiname@@localversion@
 Provides: linux-image, linux-modules- at abiname@@localversion@
 Pre-Depends: debconf | debconf-2.0
-Depends: kmod | module-init-tools, linux-base (>= 3~), ${shlibs:Depends}, ${misc:Depends}
+Depends: kmod | module-init-tools, linux-base (>= 3~), ${misc:Depends}
 Recommends: firmware-linux-free (>= 3~)
 Suggests: linux-doc- at version@
+Breaks: at (<< 3.1.12-1+squeeze1)
 Description: Linux @upstreamversion@ for @class@
  The Linux kernel @upstreamversion@ and modules for use on @longclass at .

Modified: dists/trunk/linux-2.6/debian/templates/control.image.type-standalone.in
==============================================================================
--- dists/trunk/linux-2.6/debian/templates/control.image.type-standalone.in	Sun Mar  4 20:13:06 2012	(r18789)
+++ dists/trunk/linux-2.6/debian/templates/control.image.type-standalone.in	Sun Mar  4 20:27:13 2012	(r18790)
@@ -1,6 +1,6 @@
 Package: linux-image- at abiname@@localversion@
 Provides: linux-image
 Suggests: linux-doc- at version@
-Depends: ${shlibs:Depends}, ${misc:Depends}
+Depends: ${misc:Depends}
 Description: Linux @upstreamversion@ for @class@
  The Linux kernel @upstreamversion@ for use on @longclass at .



More information about the Kernel-svn-changes mailing list