Linus Torvalds
8e9d78edea
Re-introduce page mapping check in mark_buffer_dirty()
...
In commit a8e7d49aa7 ("Fix race in
create_empty_buffers() vs __set_page_dirty_buffers()"), I removed a test
for a NULL page mapping unintentionally when some of the code inside
__set_page_dirty() was moved to the callers.
That removal generally didn't matter, since a filesystem would serialize
truncation (which clears the page mapping) against writing (which marks
the buffer dirty), so locking at a higher level (either per-page or an
inode at a time) should mean that the buffer page would be stable. And
indeed, nothing bad seemed to happen.
Except it turns out that apparently reiserfs does something odd when
under load and writing out the journal, and we have a number of bugzilla
entries that look similar:
http://bugzilla.kernel.org/show_bug.cgi?id=13556
http://bugzilla.kernel.org/show_bug.cgi?id=13756
http://bugzilla.kernel.org/show_bug.cgi?id=13876
and it looks like reiserfs depended on that check (the common theme
seems to be "data=journal", and a journal writeback during a truncate).
I suspect reiserfs should have some additional locking, but in the
meantime this should get us back to the pre-2.6.29 behavior.
Pattern-pointed-out-by: Roland Kletzing <devzero@web.de>
Cc: stable@kernel.org (2.6.29 and 2.6.30)
Cc: Jeff Mahoney <jeffm@suse.com>
Cc: Nick Piggin <npiggin@suse.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-08-21 17:40:08 -07:00
..
9p
9p: Fix incorrect parameters to v9fs_file_readn.
2009-07-14 15:54:42 -05:00
adfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
affs
affs: add ->sync_fs
2009-06-11 21:36:14 -04:00
afs
AFS: Fix compilation warning
2009-07-12 12:24:07 -07:00
autofs
switch follow_down()
2009-06-11 21:36:01 -04:00
autofs4
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
befs
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
2009-06-17 08:46:57 -07:00
bfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
btrfs
btrfs: fix inode rbtree corruption
2009-08-21 10:09:44 +02:00
cachefiles
enforce ->sync_fs is only called for rw superblock
2009-06-11 21:36:06 -04:00
cifs
[CIFS] Update readme to reflect forceuid mount parms
2009-08-04 03:53:28 +00:00
coda
splice: implement default splice_read method
2009-05-11 14:13:10 +02:00
configfs
configfs: Rework configfs_depend_item() locking and make lockdep happy
2009-04-30 10:48:26 -07:00
cramfs
debugfs
debugfs: use specified mode to possibly mark files read/write only
2009-06-15 21:30:28 -07:00
devpts
devpts: remove module-related code
2009-06-24 08:15:24 -04:00
dlm
dlm: free socket in error exit path
2009-07-14 12:28:43 -05:00
ecryptfs
eCryptfs: parse_tag_3_packet check tag 3 packet encrypted key size
2009-07-28 14:26:06 -07:00
efs
get rid of BKL in fs/efs
2009-06-17 00:36:36 -04:00
exofs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
exportfs
ext2
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
ext3
ext3: Get rid of extenddisksize parameter of ext3_get_blocks_handle()
2009-07-15 21:30:46 +02:00
ext4
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
2009-07-13 16:39:25 -07:00
fat
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
freevxfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
fscache
FS-Cache: Fixup renamed filenames in comments in internal.h
2009-05-27 10:20:13 -07:00
fuse
Revert "fuse: Fix build error" as unnecessary
2009-07-11 11:22:34 -07:00
gfs2
GFS2: Fix permissions on "recover" file
2009-08-14 14:04:46 +01:00
hfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
hfsplus
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
hostfs
hostfs: set maximum filesize in superblock for proper LFS support
2009-06-30 18:56:03 -07:00
hpfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
hppfs
hugetlbfs
Merge branch 'master' into next
2009-05-22 18:40:59 +10:00
isofs
isofs: fix Joliet regression
2009-07-10 19:18:59 -07:00
jbd
jbd: fix race between write_metadata_buffer and get_write_access
2009-07-21 11:54:42 +02:00
jbd2
jbd2: fix race between write_metadata_buffer and get_write_access
2009-07-13 17:55:35 -04:00
jffs2
jffs2: Fix return value from jffs2_do_readpage_nolock()
2009-08-04 12:13:06 +01:00
jfs
jfs: Fix early release of acl in jfs_get_acl
2009-07-23 11:08:36 -05:00
lockd
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
minix
Making fs/minix/minix.h double including safe
2009-06-22 11:34:42 -07:00
ncpfs
NLS: update handling of Unicode
2009-06-15 21:44:43 -07:00
nfs
NFS: Fix an O_DIRECT Oops...
2009-08-12 08:21:39 -07:00
nfs_common
nfsd
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
nilfs2
nilfs2: fix oopses with doubly mounted snapshots
2009-08-19 02:10:13 +09:00
nls
NLS: update handling of Unicode
2009-06-15 21:44:43 -07:00
notify
inotify: start watch descriptor count at 1
2009-08-17 13:37:37 -07:00
ntfs
ntfs: use is_power_of_2() function for clarity.
2009-06-16 19:47:48 -07:00
ocfs2
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2
2009-08-13 11:17:40 -07:00
omfs
switch omfs to simple_fsync()
2009-06-11 21:36:13 -04:00
openpromfs
partitions
partitions: fix broken uevent_suppress conversion
2009-07-12 13:02:09 -07:00
proc
mm: revert "oom: move oom_adj value"
2009-08-18 16:31:13 -07:00
qnx4
fs/qnx4: sanitize includes
2009-06-11 21:36:12 -04:00
quota
quota: Silence lockdep on quota_on
2009-07-30 17:31:23 +02:00
ramfs
fs/ramfs/file-nommu.c needs include/linux/sched.h
2009-07-29 19:10:36 -07:00
reiserfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
romfs
ROMFS: romfs_dev_read() error ignored
2009-05-09 10:49:41 -04:00
smbfs
push BKL down into ->put_super
2009-06-11 21:36:07 -04:00
squashfs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
sysfs
sysfs: fix hardlink count on device_move
2009-07-28 13:45:21 -07:00
sysv
get rid of BKL in fs/sysv
2009-06-17 00:36:37 -04:00
ubifs
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
udf
udf: Fix loading of VAT inode when drive wrongly reports number of recorded blocks
2009-07-30 17:28:26 +02:00
ufs
ufs: sector_t cannot be negative
2009-06-18 13:03:46 -07:00
xfs
xfs: fix locking in xfs_iget_cache_hit
2009-08-17 01:23:48 -05:00
aio.c
eventfd: revised interface and cleanups
2009-06-30 18:55:58 -07:00
anon_inodes.c
fs: Provide empty .set_page_dirty() aop for anon inodes
2009-06-18 14:46:10 +02:00
attr.c
bad_inode.c
binfmt_aout.c
binfmt_elf.c
elf: fix one check-after-use
2009-07-01 11:14:28 -07:00
binfmt_elf_fdpic.c
elf_core_dump: use rcu_read_lock() to access ->real_parent
2009-06-18 13:03:52 -07:00
binfmt_em86.c
binfmt_flat.c
flat: fix uninitialized ptr with shared libs
2009-08-07 10:39:57 -07:00
binfmt_misc.c
binfmt_script.c
binfmt_som.c
bio-integrity.c
block: Create bip slabs with embedded integrity vectors
2009-07-01 10:56:25 +02:00
bio.c
block: fix sg SG_DXFER_TO_FROM_DEV regression
2009-07-10 20:31:53 +02:00
block_dev.c
PM / Hibernate: Replace bdget call with simple atomic_inc of i_count
2009-07-29 21:07:55 +02:00
buffer.c
Re-introduce page mapping check in mark_buffer_dirty()
2009-08-21 17:40:08 -07:00
char_dev.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
compat.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
compat_binfmt_elf.c
compat_ioctl.c
compat_ioctl: hook up compat handler for FIEMAP ioctl
2009-08-07 10:39:56 -07:00
dcache.c
dcache: extrace and use d_unlinked()
2009-06-11 21:36:06 -04:00
dcookies.c
direct-io.c
block: Do away with the notion of hardsect_size
2009-05-22 23:22:54 +02:00
drop_caches.c
mm: remove __invalidate_mapping_pages variant
2009-06-16 19:47:43 -07:00
eventfd.c
eventfd: revised interface and cleanups
2009-06-30 18:55:58 -07:00
eventpoll.c
epoll: fix nested calls support
2009-06-18 13:03:41 -07:00
exec.c
cred_guard_mutex: do not return -EINTR to user-space
2009-07-06 13:57:04 -07:00
fcntl.c
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
fifo.c
file.c
file_table.c
fs: move mark_files_ro into file_table.c
2009-06-11 21:36:02 -04:00
filesystems.c
fs-writeback.c
cleanup __writeback_single_inode
2009-06-24 08:15:26 -04:00
fs_struct.c
generic_acl.c
inode.c
vfs: add __destroy_inode
2009-08-07 14:38:29 -03:00
internal.h
Trim a bit of crap from fs.h
2009-06-11 21:36:07 -04:00
ioctl.c
fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls
2009-06-24 08:15:27 -04:00
ioprio.c
Kconfig
fs/Kconfig: move nilfs2 out
2009-07-14 12:34:17 +09:00
Kconfig.binfmt
libfs.c
vfs: make get_sb_pseudo set s_maxbytes to value that can be cast to signed
2009-08-18 16:31:12 -07:00
locks.c
Makefile
mbcache.c
mpage.c
namei.c
integrity: add ima_counts_put (updated)
2009-06-29 08:59:10 +10:00
namespace.c
vfs: mnt_want_write_file(): fix special file handling
2009-08-07 10:39:56 -07:00
nfsctl.c
no-block.c
open.c
fs: Add new pre-allocation ioctls to vfs for compatibility with legacy xfs ioctls
2009-06-24 08:15:27 -04:00
pipe.c
lockdep: Fix lockdep annotation for pipe_double_lock()
2009-07-22 21:14:14 +02:00
pnode.c
pnode.h
posix_acl.c
read_write.c
splice: implement default splice_read method
2009-05-11 14:13:10 +02:00
read_write.h
readdir.c
select.c
poll/select: initialize triggered field of struct poll_wqueues
2009-08-15 18:40:11 -07:00
seq_file.c
seq_file: add function to write binary data
2009-06-18 13:03:57 -07:00
signalfd.c
splice.c
splice: fix kmaps in default_file_splice_write()
2009-05-19 11:37:46 +02:00
stack.c
stat.c
super.c
... and the same for vfsmount id/mount group id
2009-06-24 08:15:26 -04:00
sync.c
sys_sync(): fix 16% performance regression in ffsb create_4k test
2009-07-06 13:57:03 -07:00
timerfd.c
utimes.c
xattr.c
fs: introduce mnt_clone_write
2009-06-11 21:36:02 -04:00
xattr_acl.c