NFS: Close page_mkwrite() races
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 12 May 2009 06:23:52 +0000 (16:23 +1000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 20 May 2009 05:20:10 +0000 (22:20 -0700)
commit 7fdf523067666b0eaff330f362401ee50ce187c4 upstream

Follow up to Nick Piggin's patches to ensure that nfs_vm_page_mkwrite
returns with the page lock held, and sets the VM_FAULT_LOCKED flag.

See http://bugzilla.kernel.org/show_bug.cgi?id=12913

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Nick Piggin <npiggin@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/nfs/file.c

index a7c9f7b..4a57a0f 100644 (file)
@@ -478,10 +478,10 @@ static int nfs_vm_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
 
        ret = nfs_updatepage(filp, page, 0, pagelen);
 out_unlock:
+       if (!ret)
+               return VM_FAULT_LOCKED;
        unlock_page(page);
-       if (ret)
-               ret = VM_FAULT_SIGBUS;
-       return ret;
+       return VM_FAULT_SIGBUS;
 }
 
 static struct vm_operations_struct nfs_file_vm_ops = {