From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org, torvalds@osdl.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
"Theodore Ts'o" <tytso@mit.edu>,
Randy Dunlap <rdunlap@xenotime.net>,
Dave Jones <davej@redhat.com>,
Chuck Wolber <chuckw@quantumlinux.com>,
Chris Wedgwood <reviews@ml.cw.f00f.org>,
Michael Krufky <mkrufky@linuxtv.org>,
akpm@osdl.org, alan@lxorguk.ukuu.org.uk, nickpiggin@yahoo.com.au,
Chuck Lever <cel@citi.umich.edu>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Greg Kroah-Hartman <gregkh@suse.de>
Subject: [patch 61/67] invalidate_inode_pages2(): ignore page refcounts
Date: Wed, 11 Oct 2006 14:08:56 -0700 [thread overview]
Message-ID: <20061011210856.GJ16627@kroah.com> (raw)
In-Reply-To: <20061011210310.GA16627@kroah.com>
[-- Attachment #1: invalidate_inode_pages2-ignore-page-refcounts.patch --]
[-- Type: text/plain, Size: 2706 bytes --]
-stable review patch. If anyone has any objections, please let us know.
------------------
From: Andrew Morton <akpm@osdl.org>
The recent fix to invalidate_inode_pages() (git commit 016eb4a) managed to
unfix invalidate_inode_pages2().
The problem is that various bits of code in the kernel can take transient refs
on pages: the page scanner will do this when inspecting a batch of pages, and
the lru_cache_add() batching pagevecs also hold a ref.
Net result is transient failures in invalidate_inode_pages2(). This affects
NFS directory invalidation (observed) and presumably also block-backed
direct-io (not yet reported).
Fix it by reverting invalidate_inode_pages2() back to the old version which
ignores the page refcounts.
We may come up with something more clever later, but for now we need a 2.6.18
fix for NFS.
Cc: Chuck Lever <cel@citi.umich.edu>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
mm/truncate.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
--- linux-2.6.18.orig/mm/truncate.c
+++ linux-2.6.18/mm/truncate.c
@@ -270,9 +270,39 @@ unsigned long invalidate_inode_pages(str
{
return invalidate_mapping_pages(mapping, 0, ~0UL);
}
-
EXPORT_SYMBOL(invalidate_inode_pages);
+/*
+ * This is like invalidate_complete_page(), except it ignores the page's
+ * refcount. We do this because invalidate_inode_pages2() needs stronger
+ * invalidation guarantees, and cannot afford to leave pages behind because
+ * shrink_list() has a temp ref on them, or because they're transiently sitting
+ * in the lru_cache_add() pagevecs.
+ */
+static int
+invalidate_complete_page2(struct address_space *mapping, struct page *page)
+{
+ if (page->mapping != mapping)
+ return 0;
+
+ if (PagePrivate(page) && !try_to_release_page(page, 0))
+ return 0;
+
+ write_lock_irq(&mapping->tree_lock);
+ if (PageDirty(page))
+ goto failed;
+
+ BUG_ON(PagePrivate(page));
+ __remove_from_page_cache(page);
+ write_unlock_irq(&mapping->tree_lock);
+ ClearPageUptodate(page);
+ page_cache_release(page); /* pagecache ref */
+ return 1;
+failed:
+ write_unlock_irq(&mapping->tree_lock);
+ return 0;
+}
+
/**
* invalidate_inode_pages2_range - remove range of pages from an address_space
* @mapping: the address_space
@@ -339,7 +369,7 @@ int invalidate_inode_pages2_range(struct
}
}
was_dirty = test_clear_page_dirty(page);
- if (!invalidate_complete_page(mapping, page)) {
+ if (!invalidate_complete_page2(mapping, page)) {
if (was_dirty)
set_page_dirty(page);
ret = -EIO;
--
next prev parent reply other threads:[~2006-10-11 21:12 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20061011204756.642936754@quad.kroah.org>
2006-10-11 21:03 ` [patch 00/67] 2.6.18-stable review Greg KH
2006-10-11 21:03 ` [patch 01/67] NET_SCHED: Fix fallout from dev->qdisc RCU change Greg KH
2006-10-11 21:03 ` [patch 02/67] uml: allow using again x86/x86_64 crypto code Greg KH
2006-10-11 21:03 ` [patch 03/67] uml: use DEFCONFIG_LIST to avoid reading hosts config Greg KH
2006-10-11 21:03 ` [patch 04/67] UML: Fix UML build failure Greg KH
2006-10-11 21:03 ` [patch 05/67] Video: Fix msp343xG handling regression Greg KH
2006-10-11 21:03 ` [patch 06/67] Video: cx24123: fix PLL divisor setup Greg KH
2006-10-11 21:15 ` Michael Krufky
2006-10-11 21:29 ` Greg KH
2006-10-11 21:36 ` Michael Krufky
2006-10-11 23:01 ` [stable] " Greg KH
2006-10-11 23:58 ` Michael Krufky
2006-10-13 18:48 ` Greg KH
2006-10-11 21:03 ` [patch 07/67] Video: pvrusb2: Solve mutex deadlock Greg KH
2006-10-11 21:04 ` [patch 09/67] Video: pvrusb2: Suppress compiler warning Greg KH
2006-10-11 21:04 ` [patch 10/67] Video: pvrusb2: Limit hor res for 24xxx devices Greg KH
2006-10-11 21:04 ` [patch 11/67] zd1211rw: ZD1211B ASIC/FWT, not jointly decoder Greg KH
2006-10-12 13:41 ` John W. Linville
2006-10-11 21:04 ` [patch 12/67] S390: user readable uninitialised kernel memory (CVE-2006-5174) Greg KH
2006-10-11 21:04 ` [patch 13/67] IB/mthca: Fix lid used for sending traps Greg KH
2006-10-11 21:04 ` [patch 14/67] USB: Allow compile in g_ether, fix typo Greg KH
2006-10-11 21:04 ` [patch 15/67] ALSA: Fix initiailization of user-space controls Greg KH
2006-10-11 21:04 ` [patch 16/67] jbd: fix commit of ordered data buffers Greg KH
2006-10-12 11:55 ` Jan Kara
2006-10-12 17:16 ` Greg KH
2006-10-11 21:04 ` [patch 17/67] Fix longstanding load balancing bug in the scheduler Greg KH
2006-10-12 7:30 ` Arjan van de Ven
2006-10-11 21:04 ` [patch 18/67] zone_reclaim: dynamic slab reclaim Greg KH
2006-10-12 7:31 ` Arjan van de Ven
2006-10-12 10:04 ` Christoph Lameter
2006-10-11 21:04 ` [patch 19/67] mv643xx_eth: fix obvious typo, which caused build breakage Greg KH
2006-10-11 21:05 ` [patch 20/67] netdrvr: lp486e: fix typo Greg KH
2006-10-11 21:05 ` [patch 21/67] sky2: tx pause bug fix Greg KH
2006-10-11 21:05 ` [patch 22/67] sky2 network driver device ids Greg KH
2006-10-11 21:05 ` [patch 23/67] One line per header in Kbuild files to reduce conflicts Greg KH
2006-10-11 21:05 ` [patch 24/67] Fix ARM make headers_check Greg KH
2006-10-11 21:05 ` [patch 25/67] Fix make headers_check on sh Greg KH
2006-10-11 21:05 ` [patch 26/67] Fix make headers_check on sh64 Greg KH
2006-10-11 21:05 ` [patch 27/67] Fix make headers_check on m32r Greg KH
2006-10-11 21:05 ` [patch 28/67] Fix exported headers for SPARC, SPARC64 Greg KH
2006-10-11 21:05 ` [patch 29/67] Fix m68knommu exported headers Greg KH
2006-10-11 21:05 ` [patch 30/67] Fix H8300 " Greg KH
2006-10-11 21:06 ` [patch 31/67] Remove ARM26 header export Greg KH
2006-10-11 21:06 ` [patch 32/67] Remove UML " Greg KH
2006-10-11 21:06 ` [patch 33/67] Dont advertise (or allow) headers_{install,check} where inappropriate Greg KH
2006-10-11 21:06 ` [patch 34/67] Fix v850 exported headers Greg KH
2006-10-11 21:06 ` [patch 35/67] Clean up exported headers on CRIS Greg KH
2006-10-11 21:06 ` [patch 36/67] Remove offsetof() from user-visible <linux/stddef.h> Greg KH
2006-10-11 21:06 ` [patch 37/67] powerpc: fix building gdb against asm/ptrace.h Greg KH
2006-10-11 21:06 ` [patch 38/67] sysfs: remove duplicated dput in sysfs_update_file Greg KH
2006-10-11 21:06 ` [patch 39/67] powerpc: Fix ohare IDE irq workaround on old powermacs Greg KH
2006-10-11 21:07 ` [patch 40/67] i386 bootioremap / kexec fix Greg KH
2006-10-11 21:07 ` [patch 41/67] rtc: lockdep fix/workaround Greg KH
2006-10-11 21:07 ` [patch 42/67] do not free non slab allocated per_cpu_pageset Greg KH
2006-10-11 21:07 ` [patch 43/67] backlight: fix oops in __mutex_lock_slowpath during head /sys/class/graphics/fb0/bits_per_pixel /sys/class/graphics/fb0/blank /sys/class/graphics/fb0/console /sys/class/graphics/fb0/cursor /sys/class/graphics/fb0/dev /sys/class/graphics/fb0/device /sys/class/graphics/fb0/mode /sys/class/graphics/fb0/modes /sys/class/graphics/fb0/name /sys/class/graphics/fb0/pan /sys/class/graphics/fb0/rotate /sys/class/graphics/fb0/state /sys/class/graphics/fb0/stride /sys/class/graphics/fb0/subsystem /sys/class/graphics/fb0/uevent /sys/class/graphics/fb0/virtual_size Greg KH
2006-10-11 21:07 ` [patch 44/67] cpu to node relationship fixup: acpi_map_cpu2node Greg KH
2006-10-11 21:07 ` [patch 45/67] cpu to node relationship fixup: map cpu to node Greg KH
2006-10-11 21:07 ` [patch 46/67] i386: fix flat mode numa on a real numa system Greg KH
2006-10-11 21:07 ` [patch 47/67] load_module: no BUG if module_subsys uninitialized Greg KH
2006-10-11 21:07 ` [patch 48/67] Fix VIDIOC_ENUMSTD bug Greg KH
2006-10-11 21:46 ` Jonathan Corbet
2006-10-11 21:49 ` Michael Krufky
2006-10-11 22:10 ` Mauro Carvalho Chehab
2006-10-11 23:04 ` [stable] " Greg KH
2006-10-11 21:07 ` [patch 49/67] SPARC64: Fix serious bug in sched_clock() on sparc64 Greg KH
2006-10-11 21:07 ` [patch 50/67] CPUFREQ: Fix some more CPU hotplug locking Greg KH
2006-10-11 21:08 ` [patch 51/67] IPV6: bh_lock_sock_nested on tcp_v6_rcv Greg KH
2006-10-11 21:08 ` [patch 52/67] SPARC64: Fix sparc64 ramdisk handling Greg KH
2006-10-11 21:08 ` [patch 53/67] sata_mv: fix oops Greg KH
2006-10-11 21:08 ` [patch 54/67] PKT_SCHED: cls_basic: Use unsigned int when generating handle Greg KH
2006-10-11 21:08 ` [patch 55/67] IPV6: Disable SG for GSO unless we have checksum Greg KH
2006-10-11 21:08 ` [patch 56/67] MD: Fix problem where hot-added drives are not resynced Greg KH
2006-10-11 21:08 ` [patch 57/67] TCP: Fix and simplify microsecond rtt sampling Greg KH
2006-10-11 21:08 ` [patch 58/67] mm: bug in set_page_dirty_buffers Greg KH
2006-10-11 21:08 ` Greg KH
2006-10-11 21:08 ` [patch 59/67] fbdev: correct buffer size limit in fbmem_read_proc() Greg KH
2006-10-11 21:08 ` [patch 60/67] rtc driver rtc-pcf8563 century bit inversed Greg KH
2006-10-11 21:08 ` Greg KH [this message]
2006-10-11 21:09 ` [patch 62/67] scx200_hrt: fix precedence bug manifesting as 27x clock in 1 MHz mode Greg KH
2006-10-11 21:09 ` [patch 63/67] ide-generic: jmicron fix Greg KH
2006-10-11 21:09 ` [patch 64/67] x86-64: Calgary IOMMU: Fix off by one when calculating register space location Greg KH
2006-10-11 21:09 ` [patch 66/67] NETFILTER: NAT: fix NOTRACK checksum handling Greg KH
2006-10-11 21:09 ` [patch 67/67] block layer: elv_iosched_show should get elv_list_lock Greg KH
2006-10-11 21:36 ` [patch 00/67] 2.6.18-stable review Dave Jones
2006-10-11 21:59 ` Greg KH
2006-10-11 22:17 ` Dave Jones
2006-10-11 22:19 ` Dave Jones
2006-10-11 22:59 ` [stable] " Greg KH
2006-10-12 0:42 ` Theodore Tso
2006-10-12 16:35 ` [stable] " Greg KH
2006-10-12 16:51 ` Dave Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061011210856.GJ16627@kroah.com \
--to=gregkh@suse.de \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@osdl.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cel@citi.umich.edu \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=jmforbes@linuxtx.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mkrufky@linuxtv.org \
--cc=nickpiggin@yahoo.com.au \
--cc=rdunlap@xenotime.net \
--cc=reviews@ml.cw.f00f.org \
--cc=stable@kernel.org \
--cc=torvalds@osdl.org \
--cc=tytso@mit.edu \
--cc=zwane@arm.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.