Linus Torvalds [Mon, 30 Nov 2009 21:56:21 +0000 (13:56 -0800)]
Merge branch 'release' of git://git./linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6:
acerhdf: return temperature in milidegree instead of degree
thinkpad-acpi: fix detection of old ThinkPads
thinkpad-acpi: fix sign of ERESTARTSYS return
ACPI: Add Thinkpad T400, T500 to OSI(Linux) white-list
ACPICA: Silence the warning about _BIF returning the buffer
ACPI: DMI init_set_sci_en_on_resume for HP-Compaq C700
Linus Torvalds [Mon, 30 Nov 2009 21:55:48 +0000 (13:55 -0800)]
Merge branch 'fixes' of git://git./linux/kernel/git/davej/cpufreq
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq:
[CPUFREQ] Enable ACPI PDC handshake for VIA/Centaur CPUs
Linus Torvalds [Mon, 30 Nov 2009 21:55:20 +0000 (13:55 -0800)]
Merge branch 'for-linus' of git://git./linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ALSA: AACI: fix recording bug
ALSA: AACI: fix AC97 multiple-open bug
ASoC: AIC23: Fixing infinite loop in resume path
ASoC: Fix suspend with active audio streams
Linus Torvalds [Mon, 30 Nov 2009 21:54:10 +0000 (13:54 -0800)]
Merge branch 'drm-linus' of git://git./linux/kernel/git/airlied/drm-2.6
* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
drm/fb: fix FBIOGET/PUT_VSCREENINFO pixel clock handling
drm: make sure page protections are updated after changing vm_flags
drm/radeon/kms: Report vga connector is connected according to ddc_probe
drm: mm always protect change to unused_nodes with unused_lock spinlock
drm/radeon/kms: Disable TV load detect on RS400,RC410,RS480
drm/radeon/kms: read back register before writing in IIO.
drm/radeon/kms: fix handling of d1/d2 vga
drm: work around EDIDs with bad htotal/vtotal values
drm/radeon/kms: resume AGP by calling init.
Linus Torvalds [Mon, 30 Nov 2009 21:53:53 +0000 (13:53 -0800)]
Merge branch 'fixes' of git://git./linux/kernel/git/djbw/async_tx
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx:
shdma: fix initialization error handling
ioat3: fix pq completion versus channel deallocation race
async_tx: build-time toggling of async_{syndrome,xor}_val dma support
dmaengine: include xor/pq validate in device_has_all_tx_types()
ioat2,3: report all uncorrectable errors
ioat3: specify valid address for disabled-Q or disabled-P
ioat2,3: disable asynchronous error notifications
ioat3: dca and raid operations are incompatible
ioat: silence "dca disabled" messages
Linus Torvalds [Mon, 30 Nov 2009 21:53:14 +0000 (13:53 -0800)]
Merge branch 'upstream' of git://ftp.linux-mips.org/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
Staging: octeon-ethernet: Assign proper MAC addresses.
Staging: Octeon: Use symbolic values for irq numbers.
MIPS: Octeon: Fix compile error in drivers/staging/octeon/ethernet-mdio.c
David Woodhouse [Mon, 30 Nov 2009 09:06:40 +0000 (09:06 +0000)]
jffs2: Fix memory corruption in jffs2_read_inode_range()
In 2.6.23 kernel, commit
a32ea1e1f925399e0d81ca3f7394a44a6dafa12c
("Fix read/truncate race") fixed a race in the generic code, and as a
side effect, now do_generic_file_read() can ask us to readpage() past
the i_size. This seems to be correctly handled by the block routines
(e.g. block_read_full_page() fills the page with zeroes in case if
somebody is trying to read past the last inode's block).
JFFS2 doesn't handle this; it assumes that it won't be asked to read
pages which don't exist -- and thus that there will be at least _one_
valid 'frag' on the page it's being asked to read. It will fill any
holes with the following memset:
memset(buf, 0, min(end, frag->ofs + frag->size) - offset);
When the 'closest smaller match' returned by jffs2_lookup_node_frag() is
actually on a previous page and ends before 'offset', that results in:
memset(buf, 0, <huge unsigned negative>);
Hopefully, in most cases the corruption is fatal, and quickly causing
random oopses, like this:
root@10.0.0.4:~/ltp-fs-
20090531# ./testcases/kernel/fs/ftest/ftest01
Unable to handle kernel paging request for data at address 0x00000008
Faulting instruction address: 0xc01cd980
Oops: Kernel access of bad area, sig: 11 [#1]
[...]
NIP [
c01cd980] rb_insert_color+0x38/0x184
LR [
c0043978] enqueue_hrtimer+0x88/0xc4
Call Trace:
[
c6c63b60] [
c004f9a8] tick_sched_timer+0xa0/0xe4 (unreliable)
[
c6c63b80] [
c0043978] enqueue_hrtimer+0x88/0xc4
[
c6c63b90] [
c0043a48] __run_hrtimer+0x94/0xbc
[
c6c63bb0] [
c0044628] hrtimer_interrupt+0x140/0x2b8
[
c6c63c10] [
c000f8e8] timer_interrupt+0x13c/0x254
[
c6c63c30] [
c001352c] ret_from_except+0x0/0x14
--- Exception: 901 at memset+0x38/0x5c
LR = jffs2_read_inode_range+0x144/0x17c
[
c6c63cf0] [
00000000] (null) (unreliable)
This patch fixes the issue, plus fixes all LTP tests on NAND/UBI with
JFFS2 filesystem that were failing since 2.6.23 (seems like the bug
above also broke the truncation).
Reported-By: Anton Vorontsov <avorontsov@ru.mvista.com>
Tested-By: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Geert Uytterhoeven [Fri, 20 Nov 2009 19:48:31 +0000 (20:48 +0100)]
fbdev: Migrate mailing lists to vger
The fbdev mailing lists at SourceForge have been migrated to a single
mailing list at kernel.org: linux-fbdev@vger.kernel.org.
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Linus Torvalds [Mon, 30 Nov 2009 21:45:22 +0000 (13:45 -0800)]
Merge branch 'for-linus' of git://git./linux/kernel/git/rostedt/linux-2.6-kconfig
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-kconfig:
kconfig: Fix make O=<dir> local{mod,yes}config
Linus Torvalds [Mon, 30 Nov 2009 21:43:30 +0000 (13:43 -0800)]
Merge branch 'upstream-linus' of git://git./linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
sata_fsl: Split hard and soft reset
Linus Torvalds [Mon, 30 Nov 2009 21:33:48 +0000 (13:33 -0800)]
Merge git://git./linux/kernel/git/dhowells/linux-2.6-fscache
* git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-fscache: (31 commits)
FS-Cache: Provide nop fscache_stat_d() if CONFIG_FSCACHE_STATS=n
SLOW_WORK: Fix GFS2 to #include <linux/module.h> before using THIS_MODULE
SLOW_WORK: Fix CIFS to pass THIS_MODULE to slow_work_register_user()
CacheFiles: Don't log lookup/create failing with ENOBUFS
CacheFiles: Catch an overly long wait for an old active object
CacheFiles: Better showing of debugging information in active object problems
CacheFiles: Mark parent directory locks as I_MUTEX_PARENT to keep lockdep happy
CacheFiles: Handle truncate unlocking the page we're reading
CacheFiles: Don't write a full page if there's only a partial page to cache
FS-Cache: Actually requeue an object when requested
FS-Cache: Start processing an object's operations on that object's death
FS-Cache: Make sure FSCACHE_COOKIE_LOOKING_UP cleared on lookup failure
FS-Cache: Add a retirement stat counter
FS-Cache: Handle pages pending storage that get evicted under OOM conditions
FS-Cache: Handle read request vs lookup, creation or other cache failure
FS-Cache: Don't delete pending pages from the page-store tracking tree
FS-Cache: Fix lock misorder in fscache_write_op()
FS-Cache: The object-available state can't rely on the cookie to be available
FS-Cache: Permit cache retrieval ops to be interrupted in the initial wait phase
FS-Cache: Use radix tree preload correctly in tracking of pages to be stored
...
Gertjan van Wingerde [Tue, 24 Nov 2009 05:34:03 +0000 (06:34 +0100)]
.gitignore: Add bzip2 compressed files
We can have bzip2 compressed images nowadays.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Helge Deller [Sat, 28 Nov 2009 20:33:11 +0000 (20:33 +0000)]
parisc: fix unwind with recent gcc versions
kernel unwinding is broken with gcc >= 4.x. Part of the problem is that
binutils seems very sensitive to where the unwind information is stored.
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Russell King [Sun, 29 Nov 2009 16:39:59 +0000 (16:39 +0000)]
ALSA: AACI: fix recording bug
pcm->r[1].slots is the double rate slot information, not the
capture information. For capture, 'pcm' will already be the
capture ac97 pcm structure.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Russell King [Sun, 29 Nov 2009 16:39:52 +0000 (16:39 +0000)]
ALSA: AACI: fix AC97 multiple-open bug
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai [Mon, 30 Nov 2009 13:50:37 +0000 (14:50 +0100)]
Merge branch 'fix/asoc' into fix/misc
Anuj Aggarwal [Fri, 27 Nov 2009 12:10:58 +0000 (17:40 +0530)]
ASoC: AIC23: Fixing infinite loop in resume path
This patch fixes two issues:
a) Infinite loop in resume function
b) Writes to non-existing registers in resume function
Cc: stable@kernel.org
Signed-off-by: Anuj Aggarwal <anuj.aggarwal@ti.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Len Brown [Wed, 25 Nov 2009 06:01:29 +0000 (01:01 -0500)]
Merge branch 'misc-2.6.32' into release
Peter Feuerer [Tue, 17 Nov 2009 22:07:21 +0000 (14:07 -0800)]
acerhdf: return temperature in milidegree instead of degree
Return temperature in milidegree instead of degree, as sysfs-api requires
the temperature in milidegree.
Signed-off-by: Peter Feuerer <peter@piie.net>
Tested-by: Borislav Petkov <petkovbb@gmail.com>
Cc: Andreas Mohr <andi@lisas.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Len Brown <len.brown@intel.com>
Len Brown [Wed, 25 Nov 2009 05:43:08 +0000 (00:43 -0500)]
Merge branch 'thinkpad-2.6.32' into release
Henrique de Moraes Holschuh [Tue, 17 Nov 2009 22:07:22 +0000 (14:07 -0800)]
thinkpad-acpi: fix detection of old ThinkPads
There is a problem in the quirk tables used by tpacpi_is_fw_known() and
tpacpi_check_outdated_fw(), which causes outdated BIOSes that are lacking
the EC firmware ID DMI field to never match.
This breaks module loading on, e.g. a T23 with outdated BIOS, and the
module will refuse to load unless the "force_load=1" parameter is given.
Fix the quirk tables so that they can also match the outdated BIOSes,
which in turn will both fix the module loading, and also warn the user
that he is using outdated firmware and should upgrade.
This fixes a serious regression, introduced by commit
e675abafcc0df38125e6e94a9ba91c92fe774f52, "thinkpad-acpi: be more strict
when detecting a ThinkPad".
http://bugzilla.kernel.org/show_bug.cgi?id=14597
Reported-by: Paul Kimoto <kimoto@lightlink.com>
Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Tested-by: Paul Kimoto <kimoto@lightlink.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Len Brown <len.brown@intel.com>
Roel Kluin [Fri, 20 Nov 2009 18:48:23 +0000 (19:48 +0100)]
thinkpad-acpi: fix sign of ERESTARTSYS return
The returned error should be negative
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: <stable@kernel.org>
Signed-off-by: Len Brown <len.brown@intel.com>
Len Brown [Wed, 25 Nov 2009 05:04:48 +0000 (00:04 -0500)]
Merge branch 'bugzilla-14379' into release
Jerone Young [Thu, 27 Aug 2009 05:04:44 +0000 (00:04 -0500)]
ACPI: Add Thinkpad T400, T500 to OSI(Linux) white-list
acpi_osi=Linux helps the mute button work properly by sending Linux
a mute key press.
http://bugzilla.kernel.org/show_bug.cgi?id=13934
Signed-off-by: Jerone Young <jerone.young@canonical.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Alexey Starikovskiy [Wed, 25 Nov 2009 02:34:35 +0000 (21:34 -0500)]
ACPICA: Silence the warning about _BIF returning the buffer
_BIF was returning buffer instead of a string since day 1 of ACPI.
Adding a warning for that is noble, but people don't like
when someone cries wolf in a production system.
Reference: http://bugzilla.kernel.org/show_bug.cgi?id=14379
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
Harald Welte [Tue, 24 Nov 2009 15:53:00 +0000 (16:53 +0100)]
[CPUFREQ] Enable ACPI PDC handshake for VIA/Centaur CPUs
In commit
0de51088e6a82bc8413d3ca9e28bbca2788b5b53, we introduced the
use of acpi-cpufreq on VIA/Centaur CPU's by removing a vendor check for
VENDOR_INTEL. However, as it turns out, at least the Nano CPU's also
need the PDC (processor driver capabilities) handshake in order to
activate the methods required for acpi-cpufreq.
Since arch_acpi_processor_init_pdc() contains another vendor check for
Intel, the PDC is not initialized on VIA CPU's. The resulting behavior
of a current mainline kernel on such systems is: acpi-cpufreq
loads and it indicates CPU frequency changes. However, the CPU stays at
a single frequency
This trivial patch ensures that init_intel_pdc() is called on Intel and
VIA/Centaur CPU's alike.
Signed-off-by: Harald Welte <HaraldWelte@viatech.com>
Signed-off-by: Dave Jones <davej@redhat.com>
Clemens Ladisch [Wed, 4 Nov 2009 08:42:52 +0000 (09:42 +0100)]
drm/fb: fix FBIOGET/PUT_VSCREENINFO pixel clock handling
When the framebuffer driver does not publish detailed timing information
for the current video mode, the correct value for the pixclock field is
zero, not -1.
Since pixclock is actually unsigned, the value -1 would be interpreted
as
4294967295 picoseconds (i.e., about 4 milliseconds) by
register_framebuffer() and userspace programs.
This patch allows X.org's fbdev driver to work.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Tested-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jeremy Fitzhardinge [Tue, 17 Nov 2009 22:08:54 +0000 (14:08 -0800)]
drm: make sure page protections are updated after changing vm_flags
Some architectures compute ->vm_page_prot depending on ->vm_flags, so we
need to update the protections after adjusting the flags.
AFAIK this only affects running X under Xen; without this patch you get
lots of coloured blobs on the screen, or maybe a complete lockup. Or
anything really.
But that still depends on lots of out-of-tree stuff, so I don't think
there are any consequences for anyone else. But it is wrong in principle.
Reported-by: Jan Beulich <JBeulich@novell.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jerome Glisse [Thu, 12 Nov 2009 13:13:53 +0000 (14:13 +0100)]
drm/radeon/kms: Report vga connector is connected according to ddc_probe
On broken EDID we were reporting vga connector to be disconnected
even if ddc probe did found a monitor. This patch report that the
connector is connected on such case. This allow drm to add a fail
safe mode (800x600 at the time of this patch) thus user can boot
and later add a mode which match its monitor capabilities.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jerome Glisse [Fri, 13 Nov 2009 19:56:58 +0000 (20:56 +0100)]
drm: mm always protect change to unused_nodes with unused_lock spinlock
unused_nodes modification needs to be protected by unused_lock spinlock.
Here is an example of an usage where there is no such protection without
this patch.
Process 1: 1-drm_mm_pre_get(this function modify unused_nodes list)
2-spin_lock(spinlock protecting mm struct)
3-drm_mm_put_block(this function might modify unused_nodes
list but doesn't protect modification with unused_lock)
4-spin_unlock(spinlock protecting mm struct)
Process2: 1-drm_mm_pre_get(this function modify unused_nodes list)
At this point Process1 & Process2 might both be doing modification to
unused_nodes list. This patch add unused_lock protection into
drm_mm_put_block to avoid such issue.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jerome Glisse [Fri, 13 Nov 2009 19:56:35 +0000 (20:56 +0100)]
drm/radeon/kms: Disable TV load detect on RS400,RC410,RS480
RS400,RC410,RS480 chipset seems to report a lot of false positive
with load detect on TV output. We haven't yet found a way to make
load detect reliable on those chipset, thus just disable it for TV
output. Would avoid user to experience phantom screen because X
believe there is a monitor connected to the TV output.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie [Thu, 12 Nov 2009 05:53:44 +0000 (15:53 +1000)]
drm/radeon/kms: read back register before writing in IIO.
This fixes RH bugzilla #527874.
On resume the atom posting wasn't working, however vbe posting was
going fine, after 2 weeks over irc, and 8 hrs with the hardware,
I tracked it down to the memory device table and it access the MC
registers via IIO, it appears the rv515 atom iio table might not
be fully functional, so adding a readback before doing a write
either provides enough delay to make things resume correctly.
Thanks to Peng Huang at Red Hat for coming to Brisbane.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie [Wed, 11 Nov 2009 23:37:39 +0000 (09:37 +1000)]
drm/radeon/kms: fix handling of d1/d2 vga
An rv515 laptop I got wouldn't startup with a montior plugged in,
found the proper bug hopefully with us not turning off D2VGA
here when we should.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jesse Barnes [Thu, 5 Nov 2009 18:12:54 +0000 (10:12 -0800)]
drm: work around EDIDs with bad htotal/vtotal values
We did this on the userspace side, but we need a similar fix for the
kernel.
Fixes LP #460664.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Dave Airlie [Thu, 5 Nov 2009 05:39:10 +0000 (15:39 +1000)]
drm/radeon/kms: resume AGP by calling init.
AGP resume was broken since we moved to the new init path,
because we never re-enabled AGP on these systems at resume time.
This patch just calls the AGP resume call which just does the reinit
at resume time like the old path did.
Since AGP is pretty much gpu independant I did it outside
the gpu specific code.
Signed-off-by: Dave Airlie <airlied@redhat.com>
David Daney [Mon, 12 Oct 2009 19:04:32 +0000 (12:04 -0700)]
Staging: octeon-ethernet: Assign proper MAC addresses.
Allocate MAC addresses using the same method as the bootloader. This
avoids changing the MAC between bootloader and kernel operation as
well as avoiding duplicates and use of addresses outside of the
assigned range.
Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
David Daney [Thu, 3 Sep 2009 23:10:47 +0000 (16:10 -0700)]
Staging: Octeon: Use symbolic values for irq numbers.
In addition to being magic numbers, the irq number passed to free_irq
is incorrect. We need to use the correct symbolic value instead.
Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
David Daney [Thu, 1 Oct 2009 23:47:39 +0000 (16:47 -0700)]
MIPS: Octeon: Fix compile error in drivers/staging/octeon/ethernet-mdio.c
Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Len Brown [Mon, 23 Nov 2009 16:44:12 +0000 (11:44 -0500)]
ACPI: DMI init_set_sci_en_on_resume for HP-Compaq C700
...else ACPI thermal controls fail after resume.
http://bugzilla.kernel.org/show_bug.cgi?id=13745
Signed-off-by: Len Brown <len.brown@intel.com>
Mark Brown [Mon, 23 Nov 2009 13:11:53 +0000 (13:11 +0000)]
ASoC: Fix suspend with active audio streams
When we get a stream suspend event force the power down since otherwise
the stream would remain marked as active. In future we'll probably want
to make this stream-specific and add an interface to make the power down
of other widgets optional in order to support leaving bypass paths
active while suspending the processor.
Cc: stable@kernel.org
Reported-by: Joonyoung Shim <jy0922.shim@samsung.com>
Tested-by: Joonyoung Shim <jy0922.shim@samsung.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Dan Williams [Sun, 22 Nov 2009 19:10:10 +0000 (12:10 -0700)]
shdma: fix initialization error handling
1/ Error handling code following a kzalloc should free the allocated data.
2/ Report an error when no platform data is detected
Both problems fixed by moving the platform data check before the allocation,
and allows a goto to be killed.
Reported-by: Julia Lawall <julia@diku.dk>
Acked-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
David Howells [Fri, 20 Nov 2009 21:50:44 +0000 (21:50 +0000)]
FS-Cache: Provide nop fscache_stat_d() if CONFIG_FSCACHE_STATS=n
Provide nop fscache_stat_d() macro if CONFIG_FSCACHE_STATS=n lest errors like
the following occur:
fs/fscache/cache.c: In function 'fscache_withdraw_cache':
fs/fscache/cache.c:386: error: implicit declaration of function 'fscache_stat_d'
fs/fscache/cache.c:386: error: 'fscache_n_cop_sync_cache' undeclared (first use in this function)
fs/fscache/cache.c:386: error: (Each undeclared identifier is reported only once
fs/fscache/cache.c:386: error: for each function it appears in.)
fs/fscache/cache.c:392: error: 'fscache_n_cop_dissociate_pages' undeclared (first use in this function)
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Fri, 20 Nov 2009 21:50:40 +0000 (21:50 +0000)]
SLOW_WORK: Fix GFS2 to #include <linux/module.h> before using THIS_MODULE
GFS2 has been altered to pass THIS_MODULE to slow_work_register_user(), but
hasn't been altered to #include <linux/module.h> to provide it, resulting in
the following error:
fs/gfs2/recovery.c:596: error: 'THIS_MODULE' undeclared here (not in a function)
Add the missing #include.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Fri, 20 Nov 2009 21:50:36 +0000 (21:50 +0000)]
SLOW_WORK: Fix CIFS to pass THIS_MODULE to slow_work_register_user()
As of the patch:
SLOW_WORK: Wait for outstanding work items belonging to a module to clear
Wait for outstanding slow work items belonging to a module to clear
when unregistering that module as a user of the facility. This
prevents the put_ref code of a work item from being taken away before
it returns.
slow_work_register_user() takes a module pointer as an argument. CIFS must now
pass THIS_MODULE as that argument, lest the following error be observed:
fs/cifs/cifsfs.c: In function 'init_cifs':
fs/cifs/cifsfs.c:1040: error: too few arguments to function 'slow_work_register_user'
Signed-off-by: David Howells <dhowells@redhat.com>
Steven Rostedt [Fri, 20 Nov 2009 14:21:12 +0000 (09:21 -0500)]
kconfig: Fix make O=<dir> local{mod,yes}config
When the output directory is something other than the kernel source,
the streamline_config script gets confused. This patch passes in the
source directory to the script so that it can find the proper files.
Reported-by: Peter Zijlstra <peterz@infradead.org>
Tested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Dan Williams [Fri, 20 Nov 2009 00:11:03 +0000 (17:11 -0700)]
ioat3: fix pq completion versus channel deallocation race
The completion of a pq operation is notified with a null descriptor
appended to the end of the chain. This descriptor needs to be visible
to dma clients otherwise the client is precluded from ensuring all
operations are quiesced before freeing channel resources, i.e. due to
descriptor polling it may get the completion notification ahead of the
interrupt delivered by the null descriptor.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Dan Williams [Fri, 20 Nov 2009 00:10:37 +0000 (17:10 -0700)]
async_tx: build-time toggling of async_{syndrome,xor}_val dma support
ioat3.2 does not support asynchronous error notifications which makes
the driver experience latencies when non-zero pq validate results are
expected. Provide a mechanism for turning off async_xor_val and
async_syndrome_val via Kconfig. This approach is generally useful for
any driver that specifies ASYNC_TX_DISABLE_CHANNEL_SWITCH and would like
to force the async_tx api to fall back to the synchronous path for
certain operations.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Dan Williams [Fri, 20 Nov 2009 00:10:25 +0000 (17:10 -0700)]
dmaengine: include xor/pq validate in device_has_all_tx_types()
A channel must include these capabilities to satisfy
ASYNC_TX_DISABLE_CHANNEL_SWITCH.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Dan Williams [Fri, 20 Nov 2009 00:10:07 +0000 (17:10 -0700)]
ioat2,3: report all uncorrectable errors
Modify is_ioat_bug() to catch all errors that are uncorrectable, or not
currently handled.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Linus Torvalds [Fri, 20 Nov 2009 04:29:34 +0000 (20:29 -0800)]
Merge branch 'i2c-pnx-fixes' of git://git.fluff.org/bjdooks/linux
* 'i2c-pnx-fixes' of git://git.fluff.org/bjdooks/linux:
i2c: i2c-pnx: Added missing mach/i2c.h and linux/io.h header file includes
i2c: i2c-pnx: Made buf type unsigned to prevent sign extension
i2c: i2c-pnx: Limit minimum jiffie timeout to 2
Linus Torvalds [Fri, 20 Nov 2009 04:29:05 +0000 (20:29 -0800)]
Merge branch 'upstream-linus' of git://git./linux/kernel/git/jlbec/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2:
ocfs2: Trivial cleanup of jbd compatibility layer removal
ocfs2: Refresh documentation
ocfs2: return f_fsid info in ocfs2_statfs()
ocfs2: duplicate inline data properly during reflink.
ocfs2: Move ocfs2_complete_reflink to the right place.
ocfs2: Return -EINVAL when a device is not ocfs2.
Kevin Wells [Wed, 11 Nov 2009 23:25:52 +0000 (00:25 +0100)]
i2c: i2c-pnx: Added missing mach/i2c.h and linux/io.h header file includes
Added missing mach/i2c.h and linux/io.h header file includes
Signed-off-by: Kevin Wells <kevin.wells@nxp.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Kevin Wells [Wed, 11 Nov 2009 23:23:00 +0000 (00:23 +0100)]
i2c: i2c-pnx: Made buf type unsigned to prevent sign extension
Made buf type unsigned to prevent sign extension
Signed-off-by: Kevin Wells <kevin.wells@nxp.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Kevin Wells [Wed, 11 Nov 2009 23:28:13 +0000 (00:28 +0100)]
i2c: i2c-pnx: Limit minimum jiffie timeout to 2
Limit minimum jiffie timeout to 2 to prevent early timeout on systems
with low tick rates
Signed-off-by: Kevin Wells <kevin.wells@nxp.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Dan Williams [Fri, 20 Nov 2009 00:08:45 +0000 (17:08 -0700)]
ioat3: specify valid address for disabled-Q or disabled-P
Although disabled, hardware still checks address validity, so duplicate
the known address.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Dan Williams [Fri, 20 Nov 2009 00:07:57 +0000 (17:07 -0700)]
ioat2,3: disable asynchronous error notifications
Error interrupts and error completions may cause channel hangs, so
poll the channel status register after a timeout.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Dan Williams [Fri, 20 Nov 2009 00:07:10 +0000 (17:07 -0700)]
ioat3: dca and raid operations are incompatible
RAID operations cause a system hang on platforms with DCA
(Direct-Cache-Access) enabled. So turn off RAID capabilities in this
case.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Jiang Yutang [Fri, 16 Oct 2009 16:44:36 +0000 (20:44 +0400)]
sata_fsl: Split hard and soft reset
Split sata_fsl_softreset() into hard and soft resets to make
error-handling more efficient & device and PMP detection more
reliable.
Also includes fix for PMP support, driver tested with Sil3726,
Sil4726 & Exar PMP controllers.
[AV: Also fixes resuming from deep sleep on MPC8315 CPUs]
Signed-off-by: Jiang Yutang <b14898@freescale.com>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Linus Torvalds [Thu, 19 Nov 2009 22:32:38 +0000 (14:32 -0800)]
Linux 2.6.32-rc8
Linus Torvalds [Thu, 19 Nov 2009 21:43:19 +0000 (13:43 -0800)]
Merge branch 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
* 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6:
SUNRPC: Address buffer overrun in rpc_uaddr2sockaddr()
NFSv4: Fix a cache validation bug which causes getcwd() to return ENOENT
Alan Cox [Thu, 19 Nov 2009 13:30:36 +0000 (13:30 +0000)]
vt: Fix use of "new" in a struct field
As this struct is exposed to user space and the API was added for this
release it's a bit of a pain for the C++ world and we still have time to
fix it. Rename the fields before we end up with that pain in an actual
release.
Signed-off-by: Alan Cox <alan@linux.intel.com>
Reported-by: Olivier Goffart
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
David Woodhouse [Thu, 19 Nov 2009 02:18:44 +0000 (02:18 +0000)]
Fix handling of the HP/Acer 'DMAR at zero' BIOS error for machines with <4GiB RAM.
Commit
86cf898e1d0fca245173980e3897580db38569a8 ("intel-iommu: Check for
'DMAR at zero' BIOS error earlier.") was supposed to work by pretending
not to detect an IOMMU if it was actually being reported by the BIOS at
physical address zero.
However, the intel_iommu_init() function is called unconditionally, as
are the corresponding functions for other IOMMU hardware.
So the patch only worked if you have RAM above the 4GiB boundary. It
caused swiotlb to be initialised when no IOMMU was detected during early
boot, and thus the later IOMMU init would refuse to run.
But if you have less RAM than that, swiotlb wouldn't get set up and the
IOMMU _would_ still end up being initialised, even though we never
claimed to detect it.
This patch also sets the dmar_disabled flag when the error is detected
during the initial detection phase -- so that the later call to
intel_iommu_init() will return without doing anything, regardless of
whether swiotlb is used or not.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
David Howells [Thu, 19 Nov 2009 18:12:08 +0000 (18:12 +0000)]
CacheFiles: Don't log lookup/create failing with ENOBUFS
Don't log the CacheFiles lookup/create object routined failing with ENOBUFS as
under high memory load or high cache load they can do this quite a lot. This
error simply means that the requested object cannot be created on disk due to
lack of space, or due to failure of the backing filesystem to find sufficient
resources.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:12:05 +0000 (18:12 +0000)]
CacheFiles: Catch an overly long wait for an old active object
Catch an overly long wait for an old, dying active object when we want to
replace it with a new one. The probability is that all the slow-work threads
are hogged, and the delete can't get a look in.
What we do instead is:
(1) if there's nothing in the slow work queue, we sleep until either the dying
object has finished dying or there is something in the slow work queue
behind which we can queue our object.
(2) if there is something in the slow work queue, we return ETIMEDOUT to
fscache_lookup_object(), which then puts us back on the slow work queue,
presumably behind the deletion that we're blocked by. We are then
deferred for a while until we work our way back through the queue -
without blocking a slow-work thread unnecessarily.
A backtrace similar to the following may appear in the log without this patch:
INFO: task kslowd004:5711 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kslowd004 D
0000000000000000 0 5711 2 0x00000080
ffff88000340bb80 0000000000000046 ffff88002550d000 0000000000000000
ffff88002550d000 0000000000000007 ffff88000340bfd8 ffff88002550d2a8
000000000000ddf0 00000000000118c0 00000000000118c0 ffff88002550d2a8
Call Trace:
[<
ffffffff81058e21>] ? trace_hardirqs_on+0xd/0xf
[<
ffffffffa011c4d8>] ? cachefiles_wait_bit+0x0/0xd [cachefiles]
[<
ffffffffa011c4e1>] cachefiles_wait_bit+0x9/0xd [cachefiles]
[<
ffffffff81353153>] __wait_on_bit+0x43/0x76
[<
ffffffff8111ae39>] ? ext3_xattr_get+0x1ec/0x270
[<
ffffffff813531ef>] out_of_line_wait_on_bit+0x69/0x74
[<
ffffffffa011c4d8>] ? cachefiles_wait_bit+0x0/0xd [cachefiles]
[<
ffffffff8104c125>] ? wake_bit_function+0x0/0x2e
[<
ffffffffa011bc79>] cachefiles_mark_object_active+0x203/0x23b [cachefiles]
[<
ffffffffa011c209>] cachefiles_walk_to_object+0x558/0x827 [cachefiles]
[<
ffffffffa011a429>] cachefiles_lookup_object+0xac/0x12a [cachefiles]
[<
ffffffffa00aa1e9>] fscache_lookup_object+0x1c7/0x214 [fscache]
[<
ffffffffa00aafc5>] fscache_object_state_machine+0xa5/0x52d [fscache]
[<
ffffffffa00ab4ac>] fscache_object_slow_work_execute+0x5f/0xa0 [fscache]
[<
ffffffff81082093>] slow_work_execute+0x18f/0x2d1
[<
ffffffff8108239a>] slow_work_thread+0x1c5/0x308
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff810821d5>] ? slow_work_thread+0x0/0x308
[<
ffffffff8104be91>] kthread+0x7a/0x82
[<
ffffffff8100beda>] child_rip+0xa/0x20
[<
ffffffff8100b87c>] ? restore_args+0x0/0x30
[<
ffffffff8104be17>] ? kthread+0x0/0x82
[<
ffffffff8100bed0>] ? child_rip+0x0/0x20
1 lock held by kslowd004/5711:
#0: (&sb->s_type->i_mutex_key#7/1){+.+.+.}, at: [<
ffffffffa011be64>] cachefiles_walk_to_object+0x1b3/0x827 [cachefiles]
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:12:02 +0000 (18:12 +0000)]
CacheFiles: Better showing of debugging information in active object problems
Show more debugging information if cachefiles_mark_object_active() is asked to
activate an active object.
This may happen, for instance, if the netfs tries to register an object with
the same key multiple times.
The code is changed to (a) get the appropriate object lock to protect the
cookie pointer whilst we dereference it, and (b) get and display the cookie key
if available.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:58 +0000 (18:11 +0000)]
CacheFiles: Mark parent directory locks as I_MUTEX_PARENT to keep lockdep happy
Mark parent directory locks as I_MUTEX_PARENT in the callers of
cachefiles_bury_object() so that lockdep doesn't complain when that invokes
vfs_unlink():
=============================================
[ INFO: possible recursive locking detected ]
2.6.32-rc6-cachefs #47
---------------------------------------------
kslowd002/3089 is trying to acquire lock:
(&sb->s_type->i_mutex_key#7){+.+.+.}, at: [<
ffffffff810bbf72>] vfs_unlink+0x8b/0x128
but task is already holding lock:
(&sb->s_type->i_mutex_key#7){+.+.+.}, at: [<
ffffffffa00e4e61>] cachefiles_walk_to_object+0x1b0/0x831 [cachefiles]
other info that might help us debug this:
1 lock held by kslowd002/3089:
#0: (&sb->s_type->i_mutex_key#7){+.+.+.}, at: [<
ffffffffa00e4e61>] cachefiles_walk_to_object+0x1b0/0x831 [cachefiles]
stack backtrace:
Pid: 3089, comm: kslowd002 Not tainted 2.6.32-rc6-cachefs #47
Call Trace:
[<
ffffffff8105ad7b>] __lock_acquire+0x1649/0x16e3
[<
ffffffff8118170e>] ? inode_has_perm+0x5f/0x61
[<
ffffffff8105ae6c>] lock_acquire+0x57/0x6d
[<
ffffffff810bbf72>] ? vfs_unlink+0x8b/0x128
[<
ffffffff81353ac3>] mutex_lock_nested+0x54/0x292
[<
ffffffff810bbf72>] ? vfs_unlink+0x8b/0x128
[<
ffffffff8118179e>] ? selinux_inode_permission+0x8e/0x90
[<
ffffffff8117e271>] ? security_inode_permission+0x1c/0x1e
[<
ffffffff810bb4fb>] ? inode_permission+0x99/0xa5
[<
ffffffff810bbf72>] vfs_unlink+0x8b/0x128
[<
ffffffff810adb19>] ? kfree+0xed/0xf9
[<
ffffffffa00e3f00>] cachefiles_bury_object+0xb6/0x420 [cachefiles]
[<
ffffffff81058e21>] ? trace_hardirqs_on+0xd/0xf
[<
ffffffffa00e7e24>] ? cachefiles_check_object_xattr+0x233/0x293 [cachefiles]
[<
ffffffffa00e51b0>] cachefiles_walk_to_object+0x4ff/0x831 [cachefiles]
[<
ffffffff81032238>] ? finish_task_switch+0x0/0xb2
[<
ffffffffa00e3429>] cachefiles_lookup_object+0xac/0x12a [cachefiles]
[<
ffffffffa00741e9>] fscache_lookup_object+0x1c7/0x214 [fscache]
[<
ffffffffa0074fc5>] fscache_object_state_machine+0xa5/0x52d [fscache]
[<
ffffffffa00754ac>] fscache_object_slow_work_execute+0x5f/0xa0 [fscache]
[<
ffffffff81082093>] slow_work_execute+0x18f/0x2d1
[<
ffffffff8108239a>] slow_work_thread+0x1c5/0x308
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff810821d5>] ? slow_work_thread+0x0/0x308
[<
ffffffff8104be91>] kthread+0x7a/0x82
[<
ffffffff8100beda>] child_rip+0xa/0x20
[<
ffffffff8100b87c>] ? restore_args+0x0/0x30
[<
ffffffff8104be17>] ? kthread+0x0/0x82
[<
ffffffff8100bed0>] ? child_rip+0x0/0x20
Signed-off-by: Daivd Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:55 +0000 (18:11 +0000)]
CacheFiles: Handle truncate unlocking the page we're reading
Handle truncate unlocking the page we're attempting to read from the backing
device before the read has completed.
This was causing reports like the following to occur:
Pid: 4765, comm: kslowd Not tainted 2.6.30.1 #1
Call Trace:
[<
ffffffffa0331d7a>] ? cachefiles_read_waiter+0xd9/0x147 [cachefiles]
[<
ffffffff804b74bd>] ? __wait_on_bit+0x60/0x6f
[<
ffffffff8022bbbb>] ? __wake_up_common+0x3f/0x71
[<
ffffffff8022cc32>] ? __wake_up+0x30/0x44
[<
ffffffff8024a41f>] ? __wake_up_bit+0x28/0x2d
[<
ffffffffa003a793>] ? ext3_truncate+0x4d7/0x8ed [ext3]
[<
ffffffff80281f90>] ? pagevec_lookup+0x17/0x1f
[<
ffffffff8028c2ff>] ? unmap_mapping_range+0x59/0x1ff
[<
ffffffff8022cc32>] ? __wake_up+0x30/0x44
[<
ffffffff8028e286>] ? vmtruncate+0xc2/0xe2
[<
ffffffff802b82cf>] ? inode_setattr+0x22/0x10a
[<
ffffffffa003baa5>] ? ext3_setattr+0x17b/0x1e6 [ext3]
[<
ffffffff802b853d>] ? notify_change+0x186/0x2c9
[<
ffffffffa032d9de>] ? cachefiles_attr_changed+0x133/0x1cd [cachefiles]
[<
ffffffffa032df7f>] ? cachefiles_lookup_object+0xcf/0x12a [cachefiles]
[<
ffffffffa0318165>] ? fscache_lookup_object+0x110/0x122 [fscache]
[<
ffffffffa03188c3>] ? fscache_object_slow_work_execute+0x590/0x6bc
[fscache]
[<
ffffffff80278f82>] ? slow_work_thread+0x285/0x43a
[<
ffffffff8024a446>] ? autoremove_wake_function+0x0/0x2e
[<
ffffffff80278cfd>] ? slow_work_thread+0x0/0x43a
[<
ffffffff8024a317>] ? kthread+0x54/0x81
[<
ffffffff8020c93a>] ? child_rip+0xa/0x20
[<
ffffffff8024a2c3>] ? kthread+0x0/0x81
[<
ffffffff8020c930>] ? child_rip+0x0/0x20
CacheFiles: I/O Error: Readpage failed on backing file
200000000000810
FS-Cache: Cache cachefiles stopped due to I/O error
Reported-by: Christian Kujau <lists@nerdbynature.de>
Reported-by: Takashi Iwai <tiwai@suse.de>
Reported-by: Duc Le Minh <duclm.vn@gmail.com>
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:52 +0000 (18:11 +0000)]
CacheFiles: Don't write a full page if there's only a partial page to cache
cachefiles_write_page() writes a full page to the backing file for the last
page of the netfs file, even if the netfs file's last page is only a partial
page.
This causes the EOF on the backing file to be extended beyond the EOF of the
netfs, and thus the backing file will be truncated by cachefiles_attr_changed()
called from cachefiles_lookup_object().
So we need to limit the write we make to the backing file on that last page
such that it doesn't push the EOF too far.
Also, if a backing file that has a partial page at the end is expanded, we
discard the partial page and refetch it on the basis that we then have a hole
in the file with invalid data, and should the power go out... A better way to
deal with this could be to record a note that the partial page contains invalid
data until the correct data is written into it.
This isn't a problem for netfs's that discard the whole backing file if the
file size changes (such as NFS).
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:48 +0000 (18:11 +0000)]
FS-Cache: Actually requeue an object when requested
FS-Cache objects have an FSCACHE_OBJECT_EV_REQUEUE event that can theoretically
be raised to ask the state machine to requeue the object for further processing
before the work function returns to the slow-work facility.
However, fscache_object_work_execute() was clearing that bit before checking
the event mask to see whether the object has any pending events that require it
to be requeued immediately.
Instead, the bit should be cleared after the check and enqueue.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:45 +0000 (18:11 +0000)]
FS-Cache: Start processing an object's operations on that object's death
Start processing an object's operations when that object moves into the DYING
state as the object cannot be destroyed until all its outstanding operations
have completed.
Furthermore, make sure that read and allocation operations handle being woken
up on a dead object. Such events are recorded in the Allocs.abt and
Retrvls.abt statistics as viewable through /proc/fs/fscache/stats.
The code for waiting for object activation for the read and allocation
operations is also extracted into its own function as it is much the same in
all cases, differing only in the stats incremented.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:41 +0000 (18:11 +0000)]
FS-Cache: Make sure FSCACHE_COOKIE_LOOKING_UP cleared on lookup failure
We must make sure that FSCACHE_COOKIE_LOOKING_UP is cleared on lookup failure
(if an object reaches the LC_DYING state), and we should clear it before
clearing FSCACHE_COOKIE_CREATING.
If this doesn't happen then fscache_wait_for_deferred_lookup() may hold
allocation and retrieval operations indefinitely until they're interrupted by
signals - which in turn pins the dying object until they go away.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:38 +0000 (18:11 +0000)]
FS-Cache: Add a retirement stat counter
Add a stat counter to count retirement events rather than ordinary release
events (the retire argument to fscache_relinquish_cookie()).
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:35 +0000 (18:11 +0000)]
FS-Cache: Handle pages pending storage that get evicted under OOM conditions
Handle netfs pages that the vmscan algorithm wants to evict from the pagecache
under OOM conditions, but that are waiting for write to the cache. Under these
conditions, vmscan calls the releasepage() function of the netfs, asking if a
page can be discarded.
The problem is typified by the following trace of a stuck process:
kslowd005 D
0000000000000000 0 4253 2 0x00000080
ffff88001b14f370 0000000000000046 ffff880020d0d000 0000000000000007
0000000000000006 0000000000000001 ffff88001b14ffd8 ffff880020d0d2a8
000000000000ddf0 00000000000118c0 00000000000118c0 ffff880020d0d2a8
Call Trace:
[<
ffffffffa00782d8>] __fscache_wait_on_page_write+0x8b/0xa7 [fscache]
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffffa0078240>] ? __fscache_check_page_write+0x63/0x70 [fscache]
[<
ffffffffa00b671d>] nfs_fscache_release_page+0x4e/0xc4 [nfs]
[<
ffffffffa00927f0>] nfs_release_page+0x3c/0x41 [nfs]
[<
ffffffff810885d3>] try_to_release_page+0x32/0x3b
[<
ffffffff81093203>] shrink_page_list+0x316/0x4ac
[<
ffffffff8109372b>] shrink_inactive_list+0x392/0x67c
[<
ffffffff813532fa>] ? __mutex_unlock_slowpath+0x100/0x10b
[<
ffffffff81058df0>] ? trace_hardirqs_on_caller+0x10c/0x130
[<
ffffffff8135330e>] ? mutex_unlock+0x9/0xb
[<
ffffffff81093aa2>] shrink_list+0x8d/0x8f
[<
ffffffff81093d1c>] shrink_zone+0x278/0x33c
[<
ffffffff81052d6c>] ? ktime_get_ts+0xad/0xba
[<
ffffffff81094b13>] try_to_free_pages+0x22e/0x392
[<
ffffffff81091e24>] ? isolate_pages_global+0x0/0x212
[<
ffffffff8108e743>] __alloc_pages_nodemask+0x3dc/0x5cf
[<
ffffffff81089529>] grab_cache_page_write_begin+0x65/0xaa
[<
ffffffff8110f8c0>] ext3_write_begin+0x78/0x1eb
[<
ffffffff81089ec5>] generic_file_buffered_write+0x109/0x28c
[<
ffffffff8103cb69>] ? current_fs_time+0x22/0x29
[<
ffffffff8108a509>] __generic_file_aio_write+0x350/0x385
[<
ffffffff8108a588>] ? generic_file_aio_write+0x4a/0xae
[<
ffffffff8108a59e>] generic_file_aio_write+0x60/0xae
[<
ffffffff810b2e82>] do_sync_write+0xe3/0x120
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff810b18e1>] ? __dentry_open+0x1a5/0x2b8
[<
ffffffff810b1a76>] ? dentry_open+0x82/0x89
[<
ffffffffa00e693c>] cachefiles_write_page+0x298/0x335 [cachefiles]
[<
ffffffffa0077147>] fscache_write_op+0x178/0x2c2 [fscache]
[<
ffffffffa0075656>] fscache_op_execute+0x7a/0xd1 [fscache]
[<
ffffffff81082093>] slow_work_execute+0x18f/0x2d1
[<
ffffffff8108239a>] slow_work_thread+0x1c5/0x308
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff810821d5>] ? slow_work_thread+0x0/0x308
[<
ffffffff8104be91>] kthread+0x7a/0x82
[<
ffffffff8100beda>] child_rip+0xa/0x20
[<
ffffffff8100b87c>] ? restore_args+0x0/0x30
[<
ffffffff8102ef83>] ? tg_shares_up+0x171/0x227
[<
ffffffff8104be17>] ? kthread+0x0/0x82
[<
ffffffff8100bed0>] ? child_rip+0x0/0x20
In the above backtrace, the following is happening:
(1) A page storage operation is being executed by a slow-work thread
(fscache_write_op()).
(2) FS-Cache farms the operation out to the cache to perform
(cachefiles_write_page()).
(3) CacheFiles is then calling Ext3 to perform the actual write, using Ext3's
standard write (do_sync_write()) under KERNEL_DS directly from the netfs
page.
(4) However, for Ext3 to perform the write, it must allocate some memory, in
particular, it must allocate at least one page cache page into which it
can copy the data from the netfs page.
(5) Under OOM conditions, the memory allocator can't immediately come up with
a page, so it uses vmscan to find something to discard
(try_to_free_pages()).
(6) vmscan finds a clean netfs page it might be able to discard (possibly the
one it's trying to write out).
(7) The netfs is called to throw the page away (nfs_release_page()) - but it's
called with __GFP_WAIT, so the netfs decides to wait for the store to
complete (__fscache_wait_on_page_write()).
(8) This blocks a slow-work processing thread - possibly against itself.
The system ends up stuck because it can't write out any netfs pages to the
cache without allocating more memory.
To avoid this, we make FS-Cache cancel some writes that aren't in the middle of
actually being performed. This means that some data won't make it into the
cache this time. To support this, a new FS-Cache function is added
fscache_maybe_release_page() that replaces what the netfs releasepage()
functions used to do with respect to the cache.
The decisions fscache_maybe_release_page() makes are counted and displayed
through /proc/fs/fscache/stats on a line labelled "VmScan". There are four
counters provided: "nos=N" - pages that weren't pending storage; "gon=N" -
pages that were pending storage when we first looked, but weren't by the time
we got the object lock; "bsy=N" - pages that we ignored as they were actively
being written when we looked; and "can=N" - pages that we cancelled the storage
of.
What I'd really like to do is alter the behaviour of the cancellation
heuristics, depending on how necessary it is to expel pages. If there are
plenty of other pages that aren't waiting to be written to the cache that
could be ejected first, then it would be nice to hold up on immediate
cancellation of cache writes - but I don't see a way of doing that.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:32 +0000 (18:11 +0000)]
FS-Cache: Handle read request vs lookup, creation or other cache failure
FS-Cache doesn't correctly handle the netfs requesting a read from the cache
on an object that failed or was withdrawn by the cache. A trace similar to
the following might be seen:
CacheFiles: Lookup failed error -105
[exe ] unexpected submission OP165afe [OBJ6cac OBJECT_LC_DYING]
[exe ] objstate=OBJECT_LC_DYING [OBJECT_LC_DYING]
[exe ] objflags=0
[exe ] objevent=9 [
fffffffffffffffb]
[exe ] ops=0 inp=0 exc=0
Pid: 6970, comm: exe Not tainted 2.6.32-rc6-cachefs #50
Call Trace:
[<
ffffffffa0076477>] fscache_submit_op+0x3ff/0x45a [fscache]
[<
ffffffffa0077997>] __fscache_read_or_alloc_pages+0x187/0x3c4 [fscache]
[<
ffffffffa00b6480>] ? nfs_readpage_from_fscache_complete+0x0/0x66 [nfs]
[<
ffffffffa00b6388>] __nfs_readpages_from_fscache+0x7e/0x176 [nfs]
[<
ffffffff8108e483>] ? __alloc_pages_nodemask+0x11c/0x5cf
[<
ffffffffa009d796>] nfs_readpages+0x114/0x1d7 [nfs]
[<
ffffffff81090314>] __do_page_cache_readahead+0x15f/0x1ec
[<
ffffffff81090228>] ? __do_page_cache_readahead+0x73/0x1ec
[<
ffffffff810903bd>] ra_submit+0x1c/0x20
[<
ffffffff810906bb>] ondemand_readahead+0x227/0x23a
[<
ffffffff81090762>] page_cache_sync_readahead+0x17/0x19
[<
ffffffff8108a99e>] generic_file_aio_read+0x236/0x5a0
[<
ffffffffa00937bd>] nfs_file_read+0xe4/0xf3 [nfs]
[<
ffffffff810b2fa2>] do_sync_read+0xe3/0x120
[<
ffffffff81354cc3>] ? _spin_unlock_irq+0x2b/0x31
[<
ffffffff8104c0f1>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff811848e5>] ? selinux_file_permission+0x5d/0x10f
[<
ffffffff81352bdb>] ? thread_return+0x3e/0x101
[<
ffffffff8117d7b0>] ? security_file_permission+0x11/0x13
[<
ffffffff810b3b06>] vfs_read+0xaa/0x16f
[<
ffffffff81058df0>] ? trace_hardirqs_on_caller+0x10c/0x130
[<
ffffffff810b3c84>] sys_read+0x45/0x6c
[<
ffffffff8100ae2b>] system_call_fastpath+0x16/0x1b
The object state might also be OBJECT_DYING or OBJECT_WITHDRAWING.
This should be handled by simply rejecting the new operation with ENOBUFS.
There's no need to log an error for it. Events of this type now appear in the
stats file under Ops:rej.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:29 +0000 (18:11 +0000)]
FS-Cache: Don't delete pending pages from the page-store tracking tree
Don't delete pending pages from the page-store tracking tree, but rather send
them for another write as they've presumably been updated.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:25 +0000 (18:11 +0000)]
FS-Cache: Fix lock misorder in fscache_write_op()
FS-Cache has two structs internally for keeping track of the internal state of
a cached file: the fscache_cookie struct, which represents the netfs's state,
and fscache_object struct, which represents the cache's state. Each has a
pointer that points to the other (when both are in existence), and each has a
spinlock for pointer maintenance.
Since netfs operations approach these structures from the cookie side, they get
the cookie lock first, then the object lock. Cache operations, on the other
hand, approach from the object side, and get the object lock first. It is not
then permitted for a cache operation to get the cookie lock whilst it is
holding the object lock lest deadlock occur; instead, it must do one of two
things:
(1) increment the cookie usage counter, drop the object lock and then get both
locks in order, or
(2) simply hold the object lock as certain parts of the cookie may not be
altered whilst the object lock is held.
It is also not permitted to follow either pointer without holding the lock at
the end you start with. To break the pointers between the cookie and the
object, both locks must be held.
fscache_write_op(), however, violates the locking rules: It attempts to get the
cookie lock without (a) checking that the cookie pointer is a valid pointer,
and (b) holding the object lock to protect the cookie pointer whilst it follows
it. This is so that it can access the pending page store tree without
interference from __fscache_write_page().
This is fixed by splitting the cookie lock, such that the page store tracking
tree is protected by its own lock, and checking that the cookie pointer is
non-NULL before we attempt to follow it whilst holding the object lock.
The new lock is subordinate to both the cookie lock and the object lock, and so
should be taken after those.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:22 +0000 (18:11 +0000)]
FS-Cache: The object-available state can't rely on the cookie to be available
The object-available state in the object processing state machine (as
processed by fscache_object_available()) can't rely on the cookie to be
available because the FSCACHE_COOKIE_CREATING bit may have been cleared by
fscache_obtained_object() prior to the object being put into the
FSCACHE_OBJECT_AVAILABLE state.
Clearing the FSCACHE_COOKIE_CREATING bit on a cookie permits
__fscache_relinquish_cookie() to proceed and detach the cookie from the
object.
To deal with this, we don't dereference object->cookie in
fscache_object_available() if the object has already been detached.
In addition, a couple of assertions are added into fscache_drop_object() to
make sure the object is unbound from the cookie before it gets there.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:19 +0000 (18:11 +0000)]
FS-Cache: Permit cache retrieval ops to be interrupted in the initial wait phase
Permit the operations to retrieve data from the cache or to allocate space in
the cache for future writes to be interrupted whilst they're waiting for
permission for the operation to proceed. Typically this wait occurs whilst the
cache object is being looked up on disk in the background.
If an interruption occurs, and the operation has not yet been given the
go-ahead to run, the operation is dequeued and cancelled, and control returns
to the read operation of the netfs routine with none of the requested pages
having been read or in any way marked as known by the cache.
This means that the initial wait is done interruptibly rather than
uninterruptibly.
In addition, extra stats values are made available to show the number of ops
cancelled and the number of cache space allocations interrupted.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:14 +0000 (18:11 +0000)]
FS-Cache: Use radix tree preload correctly in tracking of pages to be stored
__fscache_write_page() attempts to load the radix tree preallocation pool for
the CPU it is on before calling radix_tree_insert(), as the insertion must be
done inside a pair of spinlocks.
Use of the preallocation pool, however, is contingent on the radix tree being
initialised without __GFP_WAIT specified. __fscache_acquire_cookie() was
passing GFP_NOFS to INIT_RADIX_TREE() - but that includes __GFP_WAIT.
The solution is to AND out __GFP_WAIT.
Additionally, the banner comment to radix_tree_preload() is altered to make
note of this prerequisite. Possibly there should be a WARN_ON() too.
Without this fix, I have seen the following recursive deadlock caused by
radix_tree_insert() attempting to allocate memory inside the spinlocked
region, which resulted in FS-Cache being called back into to release memory -
which required the spinlock already held.
=============================================
[ INFO: possible recursive locking detected ]
2.6.32-rc6-cachefs #24
---------------------------------------------
nfsiod/7916 is trying to acquire lock:
(&cookie->lock){+.+.-.}, at: [<
ffffffffa0076872>] __fscache_uncache_page+0xdb/0x160 [fscache]
but task is already holding lock:
(&cookie->lock){+.+.-.}, at: [<
ffffffffa0076acc>] __fscache_write_page+0x15c/0x3f3 [fscache]
other info that might help us debug this:
5 locks held by nfsiod/7916:
#0: (nfsiod){+.+.+.}, at: [<
ffffffff81048290>] worker_thread+0x19a/0x2e2
#1: (&task->u.tk_work#2){+.+.+.}, at: [<
ffffffff81048290>] worker_thread+0x19a/0x2e2
#2: (&cookie->lock){+.+.-.}, at: [<
ffffffffa0076acc>] __fscache_write_page+0x15c/0x3f3 [fscache]
#3: (&object->lock#2){+.+.-.}, at: [<
ffffffffa0076b07>] __fscache_write_page+0x197/0x3f3 [fscache]
#4: (&cookie->stores_lock){+.+...}, at: [<
ffffffffa0076b0f>] __fscache_write_page+0x19f/0x3f3 [fscache]
stack backtrace:
Pid: 7916, comm: nfsiod Not tainted 2.6.32-rc6-cachefs #24
Call Trace:
[<
ffffffff8105ac7f>] __lock_acquire+0x1649/0x16e3
[<
ffffffff81059ded>] ? __lock_acquire+0x7b7/0x16e3
[<
ffffffff8100e27d>] ? dump_trace+0x248/0x257
[<
ffffffff8105ad70>] lock_acquire+0x57/0x6d
[<
ffffffffa0076872>] ? __fscache_uncache_page+0xdb/0x160 [fscache]
[<
ffffffff8135467c>] _spin_lock+0x2c/0x3b
[<
ffffffffa0076872>] ? __fscache_uncache_page+0xdb/0x160 [fscache]
[<
ffffffffa0076872>] __fscache_uncache_page+0xdb/0x160 [fscache]
[<
ffffffffa0077eb7>] ? __fscache_check_page_write+0x0/0x71 [fscache]
[<
ffffffffa00b4755>] nfs_fscache_release_page+0x86/0xc4 [nfs]
[<
ffffffffa00907f0>] nfs_release_page+0x3c/0x41 [nfs]
[<
ffffffff81087ffb>] try_to_release_page+0x32/0x3b
[<
ffffffff81092c2b>] shrink_page_list+0x316/0x4ac
[<
ffffffff81058a9b>] ? mark_held_locks+0x52/0x70
[<
ffffffff8135451b>] ? _spin_unlock_irq+0x2b/0x31
[<
ffffffff81093153>] shrink_inactive_list+0x392/0x67c
[<
ffffffff81058a9b>] ? mark_held_locks+0x52/0x70
[<
ffffffff810934ca>] shrink_list+0x8d/0x8f
[<
ffffffff81093744>] shrink_zone+0x278/0x33c
[<
ffffffff81052c70>] ? ktime_get_ts+0xad/0xba
[<
ffffffff8109453b>] try_to_free_pages+0x22e/0x392
[<
ffffffff8109184c>] ? isolate_pages_global+0x0/0x212
[<
ffffffff8108e16b>] __alloc_pages_nodemask+0x3dc/0x5cf
[<
ffffffff810ae24a>] cache_alloc_refill+0x34d/0x6c1
[<
ffffffff811bcf74>] ? radix_tree_node_alloc+0x52/0x5c
[<
ffffffff810ae929>] kmem_cache_alloc+0xb2/0x118
[<
ffffffff811bcf74>] radix_tree_node_alloc+0x52/0x5c
[<
ffffffff811bcfd5>] radix_tree_insert+0x57/0x19c
[<
ffffffffa0076b53>] __fscache_write_page+0x1e3/0x3f3 [fscache]
[<
ffffffffa00b4248>] __nfs_readpage_to_fscache+0x58/0x11e [nfs]
[<
ffffffffa009bb77>] nfs_readpage_release+0x34/0x9b [nfs]
[<
ffffffffa009c0d9>] nfs_readpage_release_full+0x32/0x4b [nfs]
[<
ffffffffa0006cff>] rpc_release_calldata+0x12/0x14 [sunrpc]
[<
ffffffffa0006e2d>] rpc_free_task+0x59/0x61 [sunrpc]
[<
ffffffffa0006f03>] rpc_async_release+0x10/0x12 [sunrpc]
[<
ffffffff810482e5>] worker_thread+0x1ef/0x2e2
[<
ffffffff81048290>] ? worker_thread+0x19a/0x2e2
[<
ffffffff81352433>] ? thread_return+0x3e/0x101
[<
ffffffffa0006ef3>] ? rpc_async_release+0x0/0x12 [sunrpc]
[<
ffffffff8104bff5>] ? autoremove_wake_function+0x0/0x34
[<
ffffffff81058d25>] ? trace_hardirqs_on+0xd/0xf
[<
ffffffff810480f6>] ? worker_thread+0x0/0x2e2
[<
ffffffff8104bd21>] kthread+0x7a/0x82
[<
ffffffff8100beda>] child_rip+0xa/0x20
[<
ffffffff8100b87c>] ? restore_args+0x0/0x30
[<
ffffffff8104c2b9>] ? add_wait_queue+0x15/0x44
[<
ffffffff8104bca7>] ? kthread+0x0/0x82
[<
ffffffff8100bed0>] ? child_rip+0x0/0x20
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:11 +0000 (18:11 +0000)]
FS-Cache: Clear netfs pointers in cookie after detaching object, not before
Clear the pointers from the fscache_cookie struct to netfs private data after
clearing the pointer to the cookie from the fscache_object struct and
releasing the object lock, rather than before.
This allows the netfs private data pointers to be relied on simply by holding
the object lock, rather than having to hold the cookie lock. This is makes
things simpler as the cookie lock has to be taken before the object lock, but
sometimes the object pointer is all that the code has.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:08 +0000 (18:11 +0000)]
FS-Cache: Add counters for entry/exit to/from cache operation functions
Count entries to and exits from cache operation table functions. Maintain
these as a single counter that's added to or removed from as appropriate.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:04 +0000 (18:11 +0000)]
FS-Cache: Allow the current state of all objects to be dumped
Allow the current state of all fscache objects to be dumped by doing:
cat /proc/fs/fscache/objects
By default, all objects and all fields will be shown. This can be restricted
by adding a suitable key to one of the caller's keyrings (such as the session
keyring):
keyctl add user fscache:objlist "<restrictions>" @s
The <restrictions> are:
K Show hexdump of object key (don't show if not given)
A Show hexdump of object aux data (don't show if not given)
And paired restrictions:
C Show objects that have a cookie
c Show objects that don't have a cookie
B Show objects that are busy
b Show objects that aren't busy
W Show objects that have pending writes
w Show objects that don't have pending writes
R Show objects that have outstanding reads
r Show objects that don't have outstanding reads
S Show objects that have slow work queued
s Show objects that don't have slow work queued
If neither side of a restriction pair is given, then both are implied. For
example:
keyctl add user fscache:objlist KB @s
shows objects that are busy, and lists their object keys, but does not dump
their auxiliary data. It also implies "CcWwRrSs", but as 'B' is given, 'b' is
not implied.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:11:01 +0000 (18:11 +0000)]
FS-Cache: Annotate slow-work runqueue proc lines for FS-Cache work items
Annotate slow-work runqueue proc lines for FS-Cache work items. Objects
include the object ID and the state. Operations include the object ID, the
operation ID and the operation type and state.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:10:57 +0000 (18:10 +0000)]
SLOW_WORK: Allow a requeueable work item to sleep till the thread is needed
Add a function to allow a requeueable work item to sleep till the thread
processing it is needed by the slow-work facility to perform other work.
Sometimes a work item can't progress immediately, but must wait for the
completion of another work item that's currently being processed by another
slow-work thread.
In some circumstances, the waiting item could instead - theoretically - put
itself back on the queue and yield its thread back to the slow-work facility,
thus waiting till it gets processing time again before attempting to progress.
This would allow other work items processing time on that thread.
However, this only works if there is something on the queue for it to queue
behind - otherwise it will just get a thread again immediately, and will end
up cycling between the queue and the thread, eating up valuable CPU time.
So, slow_work_sleep_till_thread_needed() is provided such that an item can put
itself on a wait queue that will wake it up when the event it is actually
interested in occurs, then call this function in lieu of calling schedule().
This function will then sleep until either the item's event occurs or another
work item appears on the queue. If another work item is queued, but the
item's event hasn't occurred, then the work item should requeue itself and
yield the thread back to the slow-work facility by returning.
This can be used by CacheFiles for an object that is being created on one
thread to wait for an object being deleted on another thread where there is
nothing on the queue for the creation to go and wait behind. As soon as an
item appears on the queue that could be given thread time instead, CacheFiles
can stick the creating object back on the queue and return to the slow-work
facility - assuming the object deletion didn't also complete.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:10:53 +0000 (18:10 +0000)]
SLOW_WORK: Allow the owner of a work item to determine if it is queued or not
Add a function (slow_work_is_queued()) to permit the owner of a work item to
determine if the item is queued or not.
The work item is counted as being queued if it is actually on the queue, not
just if it is pending. If it is executing and pending, then it is not on the
queue, but will rather be put back on the queue when execution finishes.
This permits a caller to quickly work out if it may be able to put another,
dependent work item on the queue behind it, or whether it will have to wait
till that is finished.
This can be used by CacheFiles to work out whether the creation a new object
can be immediately deferred when it has to wait for an old object to be
deleted, or whether a wait must take place. If a wait is necessary, then the
slow-work thread can otherwise get blocked, preventing the deletion from
taking place.
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:10:51 +0000 (18:10 +0000)]
SLOW_WORK: Allow the work items to be viewed through a /proc file
Allow the executing and queued work items to be viewed through a /proc file
for debugging purposes. The contents look something like the following:
THR PID ITEM ADDR FL MARK DESC
=== ===== ================ == ===== ==========
0 3005
ffff880023f52348 a 952ms FSC: OBJ17d3: LOOK
1 3006
ffff880024e33668 2 160ms FSC: OBJ17e5 OP60d3b: Write1/Store fl=2
2 3165
ffff8800296dd180 a 424ms FSC: OBJ17e4: LOOK
3 4089
ffff8800262c8d78 a 212ms FSC: OBJ17ea: CRTN
4 4090
ffff88002792bed8 2 388ms FSC: OBJ17e8 OP60d36: Write1/Store fl=2
5 4092
ffff88002a0ef308 2 388ms FSC: OBJ17e7 OP60d2e: Write1/Store fl=2
6 4094
ffff88002abaf4b8 2 132ms FSC: OBJ17e2 OP60d4e: Write1/Store fl=2
7 4095
ffff88002bb188e0 a 388ms FSC: OBJ17e9: CRTN
vsq -
ffff880023d99668 1 308ms FSC: OBJ17e0 OP60f91: Write1/EnQ fl=2
vsq -
ffff8800295d1740 1 212ms FSC: OBJ16be OP4d4b6: Write1/EnQ fl=2
vsq -
ffff880025ba3308 1 160ms FSC: OBJ179a OP58dec: Write1/EnQ fl=2
vsq -
ffff880024ec83e0 1 160ms FSC: OBJ17ae OP599f2: Write1/EnQ fl=2
vsq -
ffff880026618e00 1 160ms FSC: OBJ17e6 OP60d33: Write1/EnQ fl=2
vsq -
ffff880025a2a4b8 1 132ms FSC: OBJ16a2 OP4d583: Write1/EnQ fl=2
vsq -
ffff880023cbe6d8 9 212ms FSC: OBJ17eb: LOOK
vsq -
ffff880024d37590 9 212ms FSC: OBJ17ec: LOOK
vsq -
ffff880027746cb0 9 212ms FSC: OBJ17ed: LOOK
vsq -
ffff880024d37ae8 9 212ms FSC: OBJ17ee: LOOK
vsq -
ffff880024d37cb0 9 212ms FSC: OBJ17ef: LOOK
vsq -
ffff880025036550 9 212ms FSC: OBJ17f0: LOOK
vsq -
ffff8800250368e0 9 212ms FSC: OBJ17f1: LOOK
vsq -
ffff880025036aa8 9 212ms FSC: OBJ17f2: LOOK
In the 'THR' column, executing items show the thread they're occupying and
queued threads indicate which queue they're on. 'PID' shows the process ID of
a slow-work thread that's executing something. 'FL' shows the work item flags.
'MARK' indicates how long since an item was queued or began executing. Lastly,
the 'DESC' column permits the owner of an item to give some information.
Signed-off-by: David Howells <dhowells@redhat.com>
Jens Axboe [Thu, 19 Nov 2009 18:10:47 +0000 (18:10 +0000)]
SLOW_WORK: Add delayed_slow_work support
This adds support for starting slow work with a delay, similar
to the functionality we have for workqueues.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Jens Axboe [Thu, 19 Nov 2009 18:10:43 +0000 (18:10 +0000)]
SLOW_WORK: Add support for cancellation of slow work
Add support for cancellation of queued slow work and delayed slow work items.
The cancellation functions will wait for items that are pending or undergoing
execution to be discarded by the slow work facility.
Attempting to enqueue work that is in the process of being cancelled will
result in ECANCELED.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Jens Axboe [Thu, 19 Nov 2009 18:10:39 +0000 (18:10 +0000)]
SLOW_WORK: Make slow_work_ops ->get_ref/->put_ref optional
Make the ability for the slow-work facility to take references on a work item
optional as not everyone requires this.
Even the internal slow-work stubs them out, so those can be got rid of too.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: David Howells <dhowells@redhat.com>
David Howells [Thu, 19 Nov 2009 18:10:23 +0000 (18:10 +0000)]
SLOW_WORK: Wait for outstanding work items belonging to a module to clear
Wait for outstanding slow work items belonging to a module to clear when
unregistering that module as a user of the facility. This prevents the put_ref
code of a work item from being taken away before it returns.
Signed-off-by: David Howells <dhowells@redhat.com>
Linus Torvalds [Thu, 19 Nov 2009 02:49:49 +0000 (18:49 -0800)]
Merge branch 'fixes' of git://git./linux/kernel/git/davej/cpufreq
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq:
[CPUFREQ] Fix stale cpufreq_cpu_governor pointer
[CPUFREQ] Resolve time unit thinko in ondemand/conservative govs
[CPUFREQ] speedstep-ich: fix error caused by
394122ab144dae4b276d74644a2f11c44a60ac5c
[CPUFREQ] Fix use after free on governor restore
[CPUFREQ] acpi-cpufreq: blacklist Intel 0f68: Fix HT detection and put in notification message
[CPUFREQ] powernow-k8: Fix test in get_transition_latency()
[CPUFREQ] longhaul: select Longhaul version 2 for capable CPUs
Linus Torvalds [Wed, 18 Nov 2009 21:31:52 +0000 (22:31 +0100)]
strcmp: fix overflow and possibly signedness error
Doing the strcmp return value as
signed char __res = *cs - *ct;
is wrong for two reasons. The subtraction can overflow because __res
doesn't use a type big enough. Moreover the compared bytes should be
interpreted as unsigned char as specified by POSIX.
The same problem is fixed in strncmp.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: Michael Buesch <mb@bu3sch.de>
Cc: Andreas Schwab <schwab@linux-m68k.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Linus Torvalds [Thu, 19 Nov 2009 01:08:16 +0000 (17:08 -0800)]
Merge branch 'agp-fixes' of git://git./linux/kernel/git/airlied/agp-2.6
* 'agp-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/agp-2.6:
agp/intel-agp: Set dma_mask for capable chipsets before agp_add_bridge()
Linus Torvalds [Thu, 19 Nov 2009 00:58:34 +0000 (16:58 -0800)]
Merge branch 'for-linus' of git://git./linux/kernel/git/jmorris/security-testing-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6:
ima: replace GFP_KERNEL with GFP_NOFS
David Woodhouse [Wed, 18 Nov 2009 10:22:46 +0000 (10:22 +0000)]
agp/intel-agp: Set dma_mask for capable chipsets before agp_add_bridge()
We should set this before calling agp_add_bridge() so that it's done
before we map the scratch page too.
This should probably fix the regression reported as k.o. bug #14627.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Linus Torvalds [Wed, 18 Nov 2009 23:00:21 +0000 (15:00 -0800)]
Merge branch 'omap-fixes-for-linus' of git://git./linux/kernel/git/tmlind/linux-omap-2.6
* 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6:
OMAP: cs should be positive in gpmc_cs_free()
omap: fix unlikely(x) < y
omap3: clock: Fixed dpll3_m2x2 rate calculation
omap3: clock: Fix the DPLL freqsel computations
omap: Fix keymap for zoom2 according to matrix keypad framwork
Linus Torvalds [Wed, 18 Nov 2009 22:59:49 +0000 (14:59 -0800)]
Merge branch 'for-linus' of git://git./linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ASoC: tlv320aic23 fix rate selection
ASoC: OMAP3 Pandora: update for TWL4030 codec changes
ASoC: Modifying the license string GPLv2 for OMAP3 EVM
ALSA: hda - Fix quirk for VAIO type G
ALSA: usb - Quirk to disable master volume control in PCM2702
Linus Torvalds [Wed, 18 Nov 2009 22:54:45 +0000 (14:54 -0800)]
Merge git://git./linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (42 commits)
cxgb3: fix premature page unmap
ibm_newemac: Fix EMACx_TRTR[TRT] bit shifts
vlan: Fix register_vlan_dev() error path
gro: Fix illegal merging of trailer trash
sungem: Fix Serdes detection.
net: fix mdio section mismatch warning
ppp: fix BUG on non-linear SKB (multilink receive)
ixgbe: Fixing EEH handler to handle more than one error
net: Fix the rollback test in dev_change_name()
Revert "isdn: isdn_ppp: Use SKB list facilities instead of home-grown implementation."
TI Davinci EMAC : Fix Console Hang when bringing the interface down
smsc911x: Fix Console Hang when bringing the interface down.
mISDN: fix error return in HFCmulti_init()
forcedeth: mac address fix
r6040: fix version printing
Bluetooth: Fix regression with L2CAP configuration in Basic Mode
Bluetooth: Select Basic Mode as default for SOCK_SEQPACKET
Bluetooth: Set general bonding security for ACL by default
r8169: Fix receive buffer length when MTU is between 1515 and 1536
can: add the missing netlink get_xstats_size callback
...
Mimi Zohar [Wed, 18 Nov 2009 21:16:06 +0000 (16:16 -0500)]
ima: replace GFP_KERNEL with GFP_NOFS
While running fsstress tests on the NFSv4 mounted ext3 and ext4
filesystem, the following call trace was generated on the nfs
server machine.
Replace GFP_KERNEL with GFP_NOFS in ima_iint_insert() to avoid a
potential deadlock.
=================================
[ INFO: inconsistent lock state ]
2.6.31-31.el6.x86_64 #1
---------------------------------
inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-W} usage.
kswapd2/75 [HC0[0]:SC0[0]:HE1:SE1] takes:
(jbd2_handle){+.+.?.}, at: [<
ffffffff811edd5e>] jbd2_journal_start+0xfe/0x13f
{RECLAIM_FS-ON-W} state was registered at:
[<
ffffffff81091e40>] mark_held_locks+0x65/0x99
[<
ffffffff81091f31>] lockdep_trace_alloc+0xbd/0xf5
[<
ffffffff81126fdd>] kmem_cache_alloc+0x40/0x185
[<
ffffffff812344d7>] ima_iint_insert+0x3d/0xf1
[<
ffffffff812345b0>] ima_inode_alloc+0x25/0x44
[<
ffffffff811484ac>] inode_init_always+0xec/0x271
[<
ffffffff81148682>] alloc_inode+0x51/0xa1
[<
ffffffff81148700>] new_inode+0x2e/0x94
[<
ffffffff811b2f08>] ext4_new_inode+0xb8/0xdc9
[<
ffffffff811be611>] ext4_create+0xcf/0x175
[<
ffffffff8113e2cd>] vfs_create+0x82/0xb8
[<
ffffffff8113f337>] do_filp_open+0x32c/0x9ee
[<
ffffffff811309b9>] do_sys_open+0x6c/0x12c
[<
ffffffff81130adc>] sys_open+0x2e/0x44
[<
ffffffff81011e42>] system_call_fastpath+0x16/0x1b
[<
ffffffffffffffff>] 0xffffffffffffffff
irq event stamp: 90371
hardirqs last enabled at (90371): [<
ffffffff8112708d>]
kmem_cache_alloc+0xf0/0x185
hardirqs last disabled at (90370): [<
ffffffff81127026>]
kmem_cache_alloc+0x89/0x185
softirqs last enabled at (89492): [<
ffffffff81068ecf>]
__do_softirq+0x1bf/0x1eb
softirqs last disabled at (89477): [<
ffffffff8101312c>] call_softirq+0x1c/0x30
other info that might help us debug this:
2 locks held by kswapd2/75:
#0: (shrinker_rwsem){++++..}, at: [<
ffffffff810f98ba>] shrink_slab+0x44/0x177
#1: (&type->s_umount_key#25){++++..}, at: [<
ffffffff811450ba>]
Reported-by: Muni P. Beerakam <mbeeraka@in.ibm.com>
Reported-by: Amit K. Arora <amitarora@in.ibm.com>
Cc: stable@kernel.org
Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Signed-off-by: James Morris <jmorris@namei.org>
Roel Kluin [Tue, 17 Nov 2009 22:39:06 +0000 (14:39 -0800)]
OMAP: cs should be positive in gpmc_cs_free()
The index `cs' is signed, test whether it is negative before we release
gpmc_cs_mem[cs].
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>