[PATCH] NFS: large non-page-aligned direct I/O clobbers memory
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 8 Sep 2006 16:48:54 +0000 (09:48 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 8 Sep 2006 17:22:51 +0000 (10:22 -0700)
commite9f7bee1df223dcf83743b46cb06c08d95497ec0
tree67beae4733ef0286645112a52623c81c8f8a19a9
parent016eb4a0ed06a3677d67a584da901f0e9a63c666
[PATCH] NFS: large non-page-aligned direct I/O clobbers memory

The logic in nfs_direct_read_schedule and nfs_direct_write_schedule can
allow data->npages to be one larger than rpages.  This causes a page
pointer to be written beyond the end of the pagevec in nfs_read_data (or
nfs_write_data).

Fix this by making nfs_(read|write)_alloc() calculate the size of the
pagevec array, and initialise data->npages.

Also get rid of the redundant argument to nfs_commit_alloc().

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/nfs/direct.c
fs/nfs/read.c
fs/nfs/write.c
include/linux/nfs_fs.h
include/linux/nfs_xdr.h