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>