On Tue, 2006-08-15 at 17:55 +0100, David Howells wrote:
> Trond Myklebust <[email protected]> wrote:
>
> > Could you try pulling afresh from the NFS git tree? I've fixed up a couple
> > of issues in which rpc_pipefs was corrupting the dcache,
>
> Which patches hold those fixes? I'm seeing:
>
> BUG: atomic counter underflow at:
> [<c01d5b05>] _atomic_dec_and_lock+0x1d/0x30
> [<c0169bd3>] dput+0x22/0x145
> [<c8a2f726>] rpc_destroy_client+0xd9/0xee [sunrpc]
> [<c8a2f89e>] rpc_shutdown_client+0xea/0xf1 [sunrpc]
> [<c8a2f89e>] rpc_shutdown_client+0xea/0xf1 [sunrpc]
> [<c886d842>] nfs_free_client+0x95/0xdd [nfs]
> [<c886db38>] nfs_free_server+0xa9/0xd9 [nfs]
> [<c8873fae>] nfs_kill_super+0xc/0x14 [nfs]
> [<c015c033>] deactivate_super+0x4a/0x5d
> [<c016df3e>] sys_umount+0x1d3/0x1f1
> [<c016ac98>] destroy_inode+0x36/0x45
> [<c0169bd3>] dput+0x22/0x145
> [<c0157889>] __fput+0x146/0x170
> [<c016cf48>] mntput_no_expire+0x11/0x59
> [<c016df73>] sys_oldumount+0x17/0x1a
> [<c0102b3f>] syscall_call+0x7/0xb
> =======================
>
> And I'm wondering if that's due to that problem.
>
> I've applied the patch to fix the resource counting that's at the head of your
> git tree.
See attached mail. Alex confirmed that it fixes the corruption problems
he is seeing.
Cheers,
Trond
--- Begin Message ---
On Mon, 2006-08-14 at 16:34 -0400, Alex Polvi wrote:
> On 8/14/06, Alex Polvi <[email protected]> wrote:
> > Here is another fix. It is quite silly, but clnt->cl_auth is set to
> > NULL in rpc_destroy_client(), then eventually referenced in
> > gss_release_pipe() via rpc_rmdir(). Simply removing the clnt->cl_auth
> > = NULL from clnt.c fixes the issue. I'm still trying to understand the
> > subsystem, but it seems like rpc_rmdir is being correctly called to
> > clean up because of the weirdness with umount -l and the nfs server
> > being turned on and off. Does that seem correct? Or is this still just
> > covering up some other part of the code being sloppy cleaning up?
>
> Also, I just want to make it clear that I do not think this is the
> proper fix. It is just pointing out that we intentionally set cl_auth
> to NULL, then reference it.
OK. I think I've finally managed to clean up the various interactions
with rpc_pipefs. I've uploaded a series of patches on the NFS client
website. See
http://client.linux-nfs.org/Linux-2.6.x/2.6.18-rc4/
The relevant patches are
linux-2.6.18-006-fix_rpc_unlink.dif:
From: Trond Myklebust <[email protected]>
SUNRPC: make rpc_unlink() take a dentry argument instead of a
path
Signe-off-by: Trond Myklebust <[email protected]>
linux-2.6.18-007-fix_rpc_rmdir.dif:
From: Trond Myklebust <[email protected]>
NFS: clean up rpc_rmdir
Make it take a dentry argument instead of a path
Signed-off-by: Trond Myklebust <[email protected]>
linux-2.6.18-008-fix_rpc_unlink_rmdir_2.dif:
From: Trond Myklebust <[email protected]>
SUNRPC: rpc_unlink() must check for unhashed dentries
A prior call to rpc_depopulate() by rpc_rmdir() on the parent
directory may have already called simple_unlink() on this entry.
Add the same check to rpc_rmdir(). Also remove a redundant call
to rpc_close_pipes() in rpc_rmdir.
Signed-off-by: Trond Myklebust <[email protected]>
linux-2.6.18-009-fix_rpc_unlink_rmdir_3.dif:
From: Trond Myklebust <[email protected]>
SUNRPC: Fix dentry refcounting issues with users of rpc_pipefs
rpc_unlink() and rpc_rmdir() will dput the dentry reference for
you.
Signed-off-by: Trond Myklebust <[email protected]>
----
In addition, there is one patch that is needed in order to fix up a
related issue in the function nfs_alloc_client(), which was introduced
by David Howells' NFS superblock sharing patches.
Cheers,
Trond
--- End Message ---
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]