]> git.karo-electronics.de Git - karo-tx-linux.git/commit
NFS: Fix an O_DIRECT Oops...
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 12 Aug 2009 13:12:30 +0000 (09:12 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 16 Aug 2009 21:19:18 +0000 (14:19 -0700)
commit658038beda04b079aa3e22395f224692b214d9b9
tree2c9c169e2dda521ac56d27fd8707507756df21e0
parent46dbb6a2b732f337f11a981eb0d994582405c03e
NFS: Fix an O_DIRECT Oops...

commit 1ae88b2e446261c038f2c0c3150ffae142b227a2 upstream.

We can't call nfs_readdata_release()/nfs_writedata_release() without
first initialising and referencing args.context. Doing so inside
nfs_direct_read_schedule_segment()/nfs_direct_write_schedule_segment()
causes an Oops.

We should rather be calling nfs_readdata_free()/nfs_writedata_free() in
those cases.

Looking at the O_DIRECT code, the "struct nfs_direct_req" is already
referencing the nfs_open_context for us. Since the readdata and writedata
structures carry a reference to that, we can simplify things by getting rid
of the extra nfs_open_context references, so that we can replace all
instances of nfs_readdata_release()/nfs_writedata_release().

Reported-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Tested-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/nfs/direct.c
fs/nfs/read.c
fs/nfs/write.c
include/linux/nfs_fs.h