From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org,
torvalds@linux-foundation.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>,
Chuck Ebbert <cebbert@redhat.com>,
Domenico Andreoli <cavokz@gmail.com>,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
maximlevitsky@gmail.com, peterz@infradead.org, jeffm@suse.com,
wfg@mail.ustc.edu.cn, chris.mason@oracle.com
Subject: [patch 11/29] reiserfs: dont drop PG_dirty when releasing sub-page-sized dirty file
Date: Tue, 20 Nov 2007 10:23:34 -0800 [thread overview]
Message-ID: <20071120182334.GL28611@kroah.com> (raw)
In-Reply-To: <20071120182248.GA28611@kroah.com>
[-- Attachment #1: reiserfs-don-t-drop-pg_dirty-when-releasing-sub-page-sized-dirty-file.patch --]
[-- Type: text/plain, Size: 3712 bytes --]
2.6.23-stable review patch. If anyone has any objections, please let us
know.
------------------
From: Fengguang Wu <wfg@mail.ustc.edu.cn>
patch c06a018fa5362fa9ed0768bd747c0fab26bc8849 in mainline.
This is not a new problem in 2.6.23-git17. 2.6.22/2.6.23 is buggy in the
same way.
Reiserfs could accumulate dirty sub-page-size files until umount time.
They cannot be synced to disk by pdflush routines or explicit `sync'
commands. Only `umount' can do the trick.
The direct cause is: the dirty page's PG_dirty is wrongly _cleared_.
Call trace:
[<ffffffff8027e920>] cancel_dirty_page+0xd0/0xf0
[<ffffffff8816d470>] :reiserfs:reiserfs_cut_from_item+0x660/0x710
[<ffffffff8816d791>] :reiserfs:reiserfs_do_truncate+0x271/0x530
[<ffffffff8815872d>] :reiserfs:reiserfs_truncate_file+0xfd/0x3b0
[<ffffffff8815d3d0>] :reiserfs:reiserfs_file_release+0x1e0/0x340
[<ffffffff802a187c>] __fput+0xcc/0x1b0
[<ffffffff802a1ba6>] fput+0x16/0x20
[<ffffffff8029e676>] filp_close+0x56/0x90
[<ffffffff8029fe0d>] sys_close+0xad/0x110
[<ffffffff8020c41e>] system_call+0x7e/0x83
Fix the bug by removing the cancel_dirty_page() call. Tests show that
it causes no bad behaviors on various write sizes.
=== for the patient ===
Here are more detailed demonstrations of the problem.
1) the page has both PG_dirty(D)/PAGECACHE_TAG_DIRTY(d) after being written to;
and then only PAGECACHE_TAG_DIRTY(d) remains after the file is closed.
------------------------------ screen 0 ------------------------------
[T0] root /home/wfg# cat > /test/tiny
[T1] hi
[T2] root /home/wfg#
------------------------------ screen 1 ------------------------------
[T1] root /home/wfg# echo /test/tiny > /proc/filecache
[T1] root /home/wfg# cat /proc/filecache
# file /test/tiny
# flags R:referenced A:active M:mmap U:uptodate D:dirty W:writeback O:owner B:buffer d:dirty w:writeback
# idx len state refcnt
0 1 ___UD__Bd_ 2
[T2] root /home/wfg# cat /proc/filecache
# file /test/tiny
# flags R:referenced A:active M:mmap U:uptodate D:dirty W:writeback O:owner B:buffer d:dirty w:writeback
# idx len state refcnt
0 1 ___U___Bd_ 2
2) note the non-zero 'cancelled_write_bytes' after /tmp/hi is copied.
------------------------------ screen 0 ------------------------------
[T0] root /home/wfg# echo hi > /tmp/hi
[T1] root /home/wfg# cp /tmp/hi /dev/stdin /test
[T2] hi
[T3] root /home/wfg#
------------------------------ screen 1 ------------------------------
[T1] root /proc/4397# cd /proc/`pidof cp`
[T1] root /proc/4713# cat io
rchar: 8396
wchar: 3
syscr: 20
syscw: 1
read_bytes: 0
write_bytes: 20480
cancelled_write_bytes: 4096
[T2] root /proc/4713# cat io
rchar: 8399
wchar: 6
syscr: 21
syscw: 2
read_bytes: 0
write_bytes: 24576
cancelled_write_bytes: 4096
//Question: the 'write_bytes' is a bit more than expected ;-)
Tested-by: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
Reviewed-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/reiserfs/stree.c | 3 ---
1 file changed, 3 deletions(-)
--- a/fs/reiserfs/stree.c
+++ b/fs/reiserfs/stree.c
@@ -1458,9 +1458,6 @@ static void unmap_buffers(struct page *p
}
bh = next;
} while (bh != head);
- if (PAGE_SIZE == bh->b_size) {
- cancel_dirty_page(page, PAGE_CACHE_SIZE);
- }
}
}
}
--
next prev parent reply other threads:[~2007-11-20 18:29 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20071120181733.702234406@mini.kroah.org>
2007-11-20 18:22 ` [patch 00/29] 2.6.23-stable review Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 01/29] i2c-pasemi: Fix NACK detection Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 02/29] i2c/eeprom: Recognize VGN as a valid Sony Vaio name prefix Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 03/29] i2c/eeprom: Hide Sony Vaio serial numbers Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 04/29] drivers/video/ps3fb: fix memset size error Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 05/29] oProfile: oops when profile_pc() returns ~0LU Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 06/29] raid5: fix unending write sequence Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 07/29] knfsd: fix spurious EINVAL errors on first access of new filesystem Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 08/29] nfsd4: recheck for secure ports in fh_verify Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 09/29] dmaengine: fix broken device refcounting Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 10/29] x86: disable preemption in delay_tsc() Greg Kroah-Hartman
2007-11-20 18:23 ` Greg Kroah-Hartman [this message]
2007-11-20 18:23 ` [patch 13/29] libata: sata_sis: use correct S/G table size Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 12/29] sata_sis: fix SCR read breakage Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 14/29] ACPI: VIDEO: Adjust current level to closest available one Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 15/29] Fix divide-by-zero in the 2.6.23 scheduler code Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 16/29] geode: Fix not inplace encryption Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 17/29] libcrc32c: keep intermediate crc state in cpu order Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 18/29] i386: avoid temporarily inconsistent pte-s Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 19/29] x86: fix off-by-one in find_next_zero_string Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 20/29] x86: mark read_crX() asm code as volatile Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 21/29] x86: NX bit handling in change_page_attr() Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 22/29] x86: return correct error code from child_rip in x86_64 entry.S Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 23/29] ntp: fix typo that makes sync_cmos_clock erratic Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 24/29] x86: fix freeze in x86_64 RTC update code in time_64.c Greg Kroah-Hartman
2007-11-20 18:24 ` [patch 25/29] softlockup watchdog fixes and cleanups Greg Kroah-Hartman
2007-11-20 18:25 ` [patch 26/29] softlockup: use cpu_clock() instead of sched_clock() Greg Kroah-Hartman
2007-11-20 18:25 ` [patch 27/29] USB: unusual_devs modification for Nikon D200 Greg Kroah-Hartman
2007-11-20 18:25 ` [patch 28/29] USB: Nikon D40X unusual_devs entry Greg Kroah-Hartman
2007-11-20 18:25 ` [patch 29/29] ipw2200: batch non-user-requested scan result notifications Greg Kroah-Hartman
2007-11-20 18:29 ` [patch 00/29] 2.6.23-stable review Greg Kroah-Hartman
2007-11-20 18:23 ` [patch 12/29] sata_sis: fix SCR read breakage Greg Kroah-Hartman
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=20071120182334.GL28611@kroah.com \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cavokz@gmail.com \
--cc=cebbert@redhat.com \
--cc=chris.mason@oracle.com \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=jeffm@suse.com \
--cc=jmforbes@linuxtx.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maximlevitsky@gmail.com \
--cc=mkrufky@linuxtv.org \
--cc=peterz@infradead.org \
--cc=rdunlap@xenotime.net \
--cc=reviews@ml.cw.f00f.org \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=wfg@mail.ustc.edu.cn \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox