From: "Denis V. Lunev" <den@sw.ru>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
marcus@better.se, containers@lists.osdl.org, devel@openvz.org,
linux-kernel@vger.kernel.org, "Denis V. Lunev" <den@openvz.org>
Subject: Re: [PATCH] proc: Do not invalidate dentries with submounts
Date: Thu, 06 Dec 2007 13:31:12 +0300 [thread overview]
Message-ID: <4757CF70.3020508@sw.ru> (raw)
In-Reply-To: <m1bq94t951.fsf@ebiederm.dsl.xmission.com>
you have changed the behavior of revalidation by shadows. I think it
will be better to restore it and keep new one for shadows (and below)
only, which has been done by my yesterday patch.
Regards,
Den
Eric W. Biederman wrote:
> If the dcache path to a mount point is ever broken it becomes
> impossible to unmount it, and we leak a vfsmount. Therefore it is not
> valid to invalidate dentries with mount points at or below them.
>
> This patch uses the have_submounts test as the other network
> filesystem revalidate routines do.
>
> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
> ---
> fs/proc/base.c | 9 +++++++++
> fs/proc/generic.c | 5 +++++
> 2 files changed, 14 insertions(+), 0 deletions(-)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index 0e71707..552d752 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -1216,6 +1216,9 @@ static int pid_revalidate(struct dentry *dentry, struct nameidata *nd)
> put_task_struct(task);
> return 1;
> }
> + /* Force validity if something is mounted under us */
> + if (inode && S_ISDIR(inode->i_mode) && have_submounts(dentry))
> + return 1;
> d_drop(dentry);
> return 0;
> }
> @@ -1393,6 +1396,9 @@ static int tid_fd_revalidate(struct dentry *dentry, struct nameidata *nd)
> }
> put_task_struct(task);
> }
> + /* Force validity if something is mounted under us */
> + if (inode && S_ISDIR(inode->i_mode) && have_submounts(dentry))
> + return 1;
> d_drop(dentry);
> return 0;
> }
> @@ -2056,6 +2062,9 @@ static int proc_base_revalidate(struct dentry *dentry, struct nameidata *nd)
> put_task_struct(task);
> return 1;
> }
> + /* Force validity if something is mounted under us */
> + if (inode && S_ISDIR(inode->i_mode) && have_submounts(dentry))
> + return 1;
> d_drop(dentry);
> return 0;
> }
> diff --git a/fs/proc/generic.c b/fs/proc/generic.c
> index 4abd568..233dcdc 100644
> --- a/fs/proc/generic.c
> +++ b/fs/proc/generic.c
> @@ -370,6 +370,11 @@ static int proc_delete_dentry(struct dentry * dentry)
>
> static int proc_revalidate_dentry(struct dentry *dentry, struct nameidata *nd)
> {
> + struct inode *inode = dentry->d_inode;
> +
> + /* Force validity if something is mounted under us */
> + if (inode && S_ISDIR(inode->i_mode) && have_submounts(dentry))
> + return 1;
> d_drop(dentry);
> return 0;
> }
next prev parent reply other threads:[~2007-12-06 10:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-05 14:35 [PATCH] lost content of /proc/sys/fs/binfmt_misc Denis V. Lunev
2007-12-06 10:17 ` Eric W. Biederman
2007-12-06 10:22 ` [PATCH] proc: Do not invalidate dentries with submounts Eric W. Biederman
2007-12-06 10:31 ` Denis V. Lunev [this message]
2007-12-06 16:05 ` Eric W. Biederman
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=4757CF70.3020508@sw.ru \
--to=den@sw.ru \
--cc=akpm@linux-foundation.org \
--cc=containers@lists.osdl.org \
--cc=den@openvz.org \
--cc=devel@openvz.org \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=marcus@better.se \
/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