Linux NFS development
 help / color / mirror / Atom feed
From: James Pearson <james-p@moving-picture.com>
To: Greg Banks <gnb@melbourne.sgi.com>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>,
	Linux NFS Mailing List <nfs@lists.sourceforge.net>
Subject: Re: [PATCH] SGI 882960: Busy inodes after unmount, oops
Date: Thu, 05 Feb 2004 12:40:35 +0000	[thread overview]
Message-ID: <402239C3.AD21DDAD@moving-picture.com> (raw)
In-Reply-To: 40209B6D.56ED461E@melbourne.sgi.com

I notice this patch doesn't apply cleanly with Trond's fix_unlink patch
- can the two patches live together?

Thanks

James Pearson

Greg Banks wrote:
> 
> G'day,
> 
> This patch fixes a bug where the forced killing of pending asynchronous
> unlink rpc_tasks during unmount leaks inode reference counts for the
> parent of the silly-renamed file and all its ancestor directories,
> resulting in the message
> 
> VFS: Busy inodes after unmount. Self-destruct in 5 seconds.  Have a nice day...
> 
> and a few seconds later an oops with a stack trace ending in
> prune_dcache -> nfs_dentry_iput -> iput.
> 
> This is probably also the bug discussed last September on the autofs
> mailing list.  The patch posted by Olaf Hering then has no effect
> at all, but it did put me on the right track (thanks Olaf).
> 
> The first part makes sure that dput() will unhash and kill dentries
> and their parents if called while the unmount is underway.
> 
> The second part moves the dput() call from the tk_exit callback of
> the async unlink rpc_task to the tk_release callback so that it
> will be called if the rpc_task is killed by rpc_killall_tasks()
> instead of completing normally.
> 
> ===========================================================================
> linux/linux/fs/nfs/dir.c
> ===========================================================================
> 
> --- /usr/tmp/TmpDir.27555-0/linux/linux/fs/nfs/dir.c_1.32       Wed Feb  4 17:57:23 2004
> +++ linux/linux/fs/nfs/dir.c    Wed Feb  4 17:52:20 2004
> @@ -551,6 +551,11 @@ static int nfs_dentry_delete(struct dent
>                 /* Unhash it, so that ->d_iput() would be called */
>                 return 1;
>         }
> +       if (!(dentry->d_sb->s_flags & MS_ACTIVE)) {
> +               /* Unhash it, so that ancestors of killed async unlink
> +                * files will be cleaned up during umount */
> +               return 1;
> +       }
>         return 0;
> 
>  }
> 
> ===========================================================================
> linux/linux/fs/nfs/unlink.c
> ===========================================================================
> 
> --- /usr/tmp/TmpDir.27555-0/linux/linux/fs/nfs/unlink.c_1.6     Wed Feb  4 17:57:23 2004
> +++ linux/linux/fs/nfs/unlink.c Wed Feb  4 17:56:57 2004
> @@ -51,6 +51,7 @@ static void
>  nfs_put_unlinkdata(struct nfs_unlinkdata *data)
>  {
>         if (--data->count == 0) {
> +               dput(data->dir);
>                 nfs_detach_unlinkdata(data);
>                 if (data->name.name != NULL)
>                         kfree(data->name.name);
> @@ -132,7 +133,6 @@ nfs_async_unlink_done(struct rpc_task *t
>         NFS_PROTO(dir_i)->unlink_done(dir, &task->tk_msg);
>         put_rpccred(data->cred);
>         data->cred = NULL;
> -       dput(dir);
>  }
> 
>  /**
> 
> Greg.
> --
> Greg Banks, R&D Software Engineer, SGI Australian Software Group.
> I don't speak for SGI.
> 
> -------------------------------------------------------
> The SF.Net email is sponsored by EclipseCon 2004
> Premiere Conference on Open Tools Development and Integration
> See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
> http://www.eclipsecon.org/osdn
> _______________________________________________
> NFS maillist  -  NFS@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/nfs


-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
NFS maillist  -  NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs

  parent reply	other threads:[~2004-02-05 12:41 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-04  7:12 [PATCH] SGI 882960: Busy inodes after unmount, oops Greg Banks
2004-02-04 10:42 ` Olaf Kirch
2004-02-04 22:59   ` Greg Banks
2004-02-04 12:09 ` Olaf Kirch
2004-02-04 22:41   ` Greg Banks
2004-02-05 16:15     ` Olaf Kirch
2004-02-05 22:23       ` Greg Banks
2004-02-06  5:50         ` Greg Banks
2004-02-13 16:26           ` canon
2004-02-04 14:24 ` raven
2004-02-04 22:56   ` Greg Banks
2004-02-05 12:40 ` James Pearson [this message]
2004-02-09  7:46   ` Greg Banks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=402239C3.AD21DDAD@moving-picture.com \
    --to=james-p@moving-picture.com \
    --cc=gnb@melbourne.sgi.com \
    --cc=nfs@lists.sourceforge.net \
    --cc=trond.myklebust@fys.uio.no \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox