On Tue, May 22, 2012 at 1:46 PM, Myklebust, Trond <Trond.Myklebust@xxxxxxxxxx> wrote: > On Tue, 2012-05-22 at 16:30 +0000, Adamson, Andy wrote: >> On May 22, 2012, at 12:24 PM, Myklebust, Trond wrote: >> >> > On Tue, 2012-05-22 at 08:09 -0400, andros@xxxxxxxxxx wrote: >> >> From: Andy Adamson <andros@xxxxxxxxxx> >> >> >> >> Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> >> >> --- >> >> fs/nfs/write.c | 2 ++ >> >> 1 files changed, 2 insertions(+), 0 deletions(-) >> >> >> >> diff --git a/fs/nfs/write.c b/fs/nfs/write.c >> >> index e6fe3d6..c7295de 100644 >> >> --- a/fs/nfs/write.c >> >> +++ b/fs/nfs/write.c >> >> @@ -1555,6 +1555,8 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data) >> >> /* We have a mismatch. Write the page again */ >> >> dprintk(" mismatch\n"); >> >> nfs_mark_request_dirty(req); >> >> + nfs_unlock_request(req); >> >> + continue; >> >> next: >> >> nfs_unlock_and_release_request(req); >> >> } >> > >> > What is this patch trying to fix? As far as I can see it will lead to a >> > reference leak. >> >> The release of the page drops the refcount to zero. Since it is a mismatch, we want to continue to use the page, so nfs_page_find_request_locked is called we get the WARNING in kref_get, and an Oops in various places in pnfs_update_layout. >> >> Here is the output of added printk's. >> >> -->Andy >> >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988921] NFS: commit (0:35/2 4096@184320) >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988923] mismatch req ffff880042dbb800 >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988927] nfs_release_request WB req ffff880042dbb800 wb_kref 1 >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988932] put_lseg: lseg ffff880042d95380 ref 4 valid 0 >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988945] nfs_page_find_request_locked req ffff88003e033800 >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988949] nfs_page_find_request_locked WB req ffff88003e033800 wb_kref 0 >> May 21 18:25:33 fedora-64-2 kernel: [ 152.988953] ------------[ cut here ]------------ >> May 21 18:25:33 fedora-64-2 kernel: [ 152.989082] WARNING: at include/linux/kref.h:41 kref_get+0x20/0x2c [nfs]() > > Are these commit-to-ds requests? Yes -->Andy > As far as I can see, there is a bug in > transfer_commit_list() in that it locks the requests, but does not > reference them. > > Fred? > > -- > 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