On Sat, 2009-04-04 at 12:14 -0400, J. Bruce Fields wrote: > My regular connecthon tests are reporting bus errors on the "write/read > 30 MB file" on recent upstream kernels. I'm travelling and haven't had > a chance to do anything beyond kick off a dumb git-bisect, which pointed > the blame at the following commit. Any ideas? > > --b. > > > commit c2ec175c39f62949438354f603f4aa170846aabb > Author: Nick Piggin <npiggin@xxxxxxx> > Date: Tue Mar 31 15:23:21 2009 -0700 > > mm: page_mkwrite change prototype to match fault > > Change the page_mkwrite prototype to take a struct vm_fault, and return > VM_FAULT_xxx flags. There should be no functional change. > > This makes it possible to return much more detailed error information to > the VM (and also can provide more information eg. virtual_address to the > driver, which might be important in some special cases). > > This is required for a subsequent fix. And will also make it easier to > merge page_mkwrite() with fault() in future. > > Signed-off-by: Nick Piggin <npiggin@xxxxxxx> > Cc: Chris Mason <chris.mason@xxxxxxxxxx> > Cc: Trond Myklebust <trond.myklebust@xxxxxxxxxx> > Cc: Miklos Szeredi <miklos@xxxxxxxxxx> > Cc: Steven Whitehouse <swhiteho@xxxxxxxxxx> > Cc: Mark Fasheh <mfasheh@xxxxxxxx> > Cc: Joel Becker <joel.becker@xxxxxxxxxx> > Cc: Artem Bityutskiy <dedekind@xxxxxxxxxxxxx> > Cc: Felix Blyakher <felixb@xxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> <snip> > diff --git a/fs/nfs/file.c b/fs/nfs/file.c > index 90f292b..cec7939 100644 > --- a/fs/nfs/file.c > +++ b/fs/nfs/file.c > @@ -451,8 +451,9 @@ const struct address_space_operations nfs_file_aops = { > .launder_page = nfs_launder_page, > }; > > -static int nfs_vm_page_mkwrite(struct vm_area_struct *vma, struct page *page) > +static int nfs_vm_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) > { > + struct page *page = vmf->page; > struct file *filp = vma->vm_file; > struct dentry *dentry = filp->f_path.dentry; > unsigned pagelen; > @@ -483,6 +484,8 @@ static int nfs_vm_page_mkwrite(struct vm_area_struct *vma, struct page *page) > ret = pagelen; ^^^^^^^^^^^^^^^^^^ This would explain it. I assume that we're actually supposed to return 0 in case of success. > out_unlock: > unlock_page(page); > + if (ret) > + ret = VM_FAULT_SIGBUS; > return ret; > } > -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html