projects
/
profile
/
common
/
kernel-common.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4662db4
)
afs: Fix oops in afs_unlink_writeback
author
Anton Blanchard
<anton@au1.ibm.com>
Fri, 25 Feb 2011 15:33:02 +0000
(15:33 +0000)
committer
Linus Torvalds
<torvalds@linux-foundation.org>
Fri, 25 Feb 2011 19:12:37 +0000
(11:12 -0800)
I'm seeing the following oops when testing afs:
Unable to handle kernel paging request for data at address 0x00000008
...
NIP [
c0000000003393b0
] .afs_unlink_writeback+0x38/0xc0
LR [
c00000000033987c
] .afs_put_writeback+0x98/0xec
Call Trace:
[
c00000000345f600
] [
c00000000033987c
] .afs_put_writeback+0x98/0xec
[
c00000000345f690
] [
c00000000033ae80
] .afs_write_begin+0x6a4/0x75c
[
c00000000345f790
] [
c00000000012b77c
] .generic_file_buffered_write+0x148/0x320
[
c00000000345f8d0
] [
c00000000012e1b8
] .__generic_file_aio_write+0x37c/0x3e4
[
c00000000345f9d0
] [
c00000000012e2a8
] .generic_file_aio_write+0x88/0xfc
[
c00000000345fa90
] [
c0000000003390a8
] .afs_file_write+0x10c/0x178
[
c00000000345fb40
] [
c000000000188788
] .do_sync_write+0xc4/0x128
[
c00000000345fcc0
] [
c000000000189658
] .vfs_write+0xe8/0x1d8
[
c00000000345fd70
] [
c000000000189884
] .SyS_write+0x68/0xb0
[
c00000000345fe30
] [
c000000000008564
] syscall_exit+0x0/0x40
afs_write_begin hits an error and calls afs_unlink_writeback. In there
we do list_del_init on an uninitialised list.
The patch below initialises ->link when creating the afs_writeback struct.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/afs/write.c
patch
|
blob
|
history
diff --git
a/fs/afs/write.c
b/fs/afs/write.c
index
15690bb
..
789b3af
100644
(file)
--- a/
fs/afs/write.c
+++ b/
fs/afs/write.c
@@
-140,6
+140,7
@@
int afs_write_begin(struct file *file, struct address_space *mapping,
candidate->first = candidate->last = index;
candidate->offset_first = from;
candidate->to_last = to;
+ INIT_LIST_HEAD(&candidate->link);
candidate->usage = 1;
candidate->state = AFS_WBACK_PENDING;
init_waitqueue_head(&candidate->waitq);