android_kernel_samsung_msm8976/fs
Andrew Morton c64610ba58 [PATCH] block_read_full_page() get_block() error handling fix
If block_read_full_page() detects an error when running get_block() it will
run SetPageError(), then it will zero out the block in pagecache and will mark
the buffer_head uptodate.

So at the end of readahead we end up with a non-uptodate pagecache page which
is marked PageError.  But it has uptodate buffers.

The pagefault code will run ClearPageError, will launch readpage a second time
and block_read_full_page() will notice the uptodate buffers and will mark the
page uptodate as well.  We end up with an uptodate, !PageError page full of
zeros and the error is lost.

(It seems a little odd that filemap_nopage() runs ClearPageError().  I guess
all of this adds up to meaning that for each attempted access to the page, the
pagefault handler will retry the I/O.  Which is good and bad.  If the app is
ignoring SIGBUS for some reason we could get a lot of back-to-back I/O
errors.)

Fix it by not marking the pagecache buffer_head as uptodate if the attempt to
map that buffer to a disk block failed.

Credit-to: Qu Fuping <fs@ercist.iscas.ac.cn>

  For reporting the bug and identifying its source.

Signed-off-by: Qu Fuping <fs@ercist.iscas.ac.cn>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-17 07:59:20 -07:00
..
adfs
affs
afs [PATCH] Exterminate PAGE_BUG 2005-05-01 08:59:01 -07:00
autofs
autofs4 [PATCH] autofs4: tree race fix 2005-05-01 08:59:17 -07:00
befs
bfs
cifs [PATCH] remove BK documentation 2005-05-05 16:36:42 -07:00
coda
cramfs
debugfs
devfs
devpts
efs
exportfs
ext2
ext3 [PATCH] revert ext3-writepages-support-for-writeback-mode 2005-05-05 16:36:44 -07:00
fat
freevxfs
hfs [PATCH] hfs, hfsplus: don't leak s_fs_info and fix an oops 2005-05-01 08:59:16 -07:00
hfsplus [PATCH] hfs, hfsplus: don't leak s_fs_info and fix an oops 2005-05-01 08:59:16 -07:00
hostfs [PATCH] uml: hostfs failed mount handling 2005-05-05 16:36:37 -07:00
hpfs
hppfs
hugetlbfs
isofs [PATCH] isofs includes sanitized 2005-04-25 18:32:12 -07:00
jbd
jffs
jffs2 [PATCH] make some things static 2005-05-05 16:36:47 -07:00
jfs JFS: Endian errors 2005-05-04 09:11:49 -05:00
lockd
minix
msdos
ncpfs
nfs [PATCH] make some things static 2005-05-05 16:36:47 -07:00
nfsd [PATCH] nfsd4: fix struct file leak 2005-04-16 15:26:38 -07:00
nls [PATCH] make some things static 2005-05-05 16:36:47 -07:00
ntfs
openpromfs
partitions [PATCH] revert msdos partitioning fix 2005-05-06 22:09:27 -07:00
proc [PATCH] fix impossible VmallocChunk 2005-05-17 07:59:10 -07:00
qnx4
ramfs
reiserfs [PATCH] reiserfs: use NULL instead of 0 2005-05-05 16:36:48 -07:00
romfs
smbfs
sysfs [PATCH] DocBook: fix some descriptions 2005-05-01 08:59:26 -07:00
sysv
udf [PATCH] fs/udf/udftime.c: fix off by one error 2005-05-05 16:36:51 -07:00
ufs
umsdos
vfat
xfs [XFS] Cleanup use of loff_t vs xfs_off_t in the core code. 2005-05-05 13:33:40 -07:00
aio.c [PATCH] aio: optimize io_submit_one() 2005-05-01 08:59:16 -07:00
attr.c
bad_inode.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
binfmt_aout.c
binfmt_elf.c [PATCH] fix Linux kernel ELF core dump privilege elevation 2005-05-16 21:07:05 -07:00
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
binfmt_som.c
bio.c [PATCH] DocBook: fix some descriptions 2005-05-01 08:59:26 -07:00
block_dev.c [PATCH] remove do_sync parameter from __invalidate_device 2005-05-05 16:36:44 -07:00
buffer.c [PATCH] block_read_full_page() get_block() error handling fix 2005-05-17 07:59:20 -07:00
char_dev.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
compat.c [PATCH] NFS4: Don't use __user with compat_uptr_t 2005-04-27 15:39:03 -07:00
compat_ioctl.c
dcache.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
dcookies.c
direct-io.c
dnotify.c
dquot.c
eventpoll.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
exec.c [PATCH] comments on locking of task->comm 2005-05-05 16:36:48 -07:00
fcntl.c [PATCH] convert that currently tests _NSIG directly to use valid_signal() 2005-05-01 08:59:14 -07:00
fifo.c
file.c
file_table.c
filesystems.c
fs-writeback.c [PATCH] DocBook: fix some descriptions 2005-05-01 08:59:26 -07:00
inode.c [PATCH] remove do_sync parameter from __invalidate_device 2005-05-05 16:36:44 -07:00
ioctl.c
Kconfig
Kconfig.binfmt
libfs.c
locks.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
Makefile
mbcache.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
mpage.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
namei.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
namespace.c
nfsctl.c
open.c
pipe.c
posix_acl.c
quota.c
quota_v1.c
quota_v2.c
read_write.c
readdir.c
select.c [PATCH] make some things static 2005-05-05 16:36:47 -07:00
seq_file.c [PATCH] DocBook: fix some descriptions 2005-05-01 08:59:26 -07:00
stat.c
super.c
xattr.c
xattr_acl.c