From: Jan Blunck <jblunck@suse.de>
To: Balbir Singh <balbir@in.ibm.com>
Cc: akpm@osdl.org, viro@zeniv.linux.org.uk, olh@suse.de,
neilb@suse.de, dev@openvz.org, bsingharora@gmail.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Fix shrink_dcache_parent() against shrink_dcache_memory() race (updated patch)
Date: Thu, 9 Mar 2006 12:00:25 +0100 [thread overview]
Message-ID: <20060309110025.GE4243@hasse.suse.de> (raw)
In-Reply-To: <20060309063330.GA23256@in.ibm.com>
On Thu, Mar 09, Balbir Singh wrote:
> > +/*
> > + * If we slept on waiting for other prunes to finish, there maybe are
> > + * some dentries the d_lru list that we have "overlooked" the last
> > + * time we called select_parent(). Therefor lets restart in this case.
> > + */
> > void shrink_dcache_parent(struct dentry * parent)
> > {
> > int found;
> > + struct super_block *sb = parent->d_sb;
> >
> > + again:
> > while ((found = select_parent(parent)) != 0)
> > prune_dcache(found);
> > +
> > + /* If we are called from generic_shutdown_super() during
> > + * umount of a filesystem, we want to check for other prunes */
> > + if (!sb->s_root && wait_on_prunes(sb))
> > + goto again;
> > }
>
> cosmetic - could we do this with a do { } while() loop instead of a goto?
>
> I think though that after select_parent(), wait_on_prunes() can sleep just
> once, so we do not need a goto. Just calling wait_on_prunes() should
> fix the race. For all the dentries missed in the race, wait_on_parent()
> will ensure that they are dput() by prune_one_dentry() before wait_on_parent()
> returns.
>
> But, I do not have anything against the goto, so this patch should be just
> fine.
>
No. Think about a dentry which parent isn't unhashed. This parent will end up
on the lru-list after the wait_on_prunes(). Therefore we have to do the
select_parent()/prune_dcache() again to get rid of all dentries.
And I missed the "goto vs. do...while()" against my colleagues here, too ;)
I'll send a followup.
> > if (root) {
> > sb->s_root = NULL;
> > - shrink_dcache_parent(root);
> > shrink_dcache_anon(&sb->s_anon);
> > + shrink_dcache_parent(root);
> > dput(root);
>
> This change might conflict with the NFS patches in -mm.
>
Hmm, right. Andrew, if you want a rediff against -mm just tell me. I'm
actually diff'ing against lates linux-2.6.git.
Regards,
Jan
--
Jan Blunck jblunck@suse.de
SuSE LINUX AG - A Novell company
Maxfeldstr. 5 +49-911-74053-608
D-90409 Nürnberg http://www.suse.de
next prev parent reply other threads:[~2006-03-09 11:00 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-08 14:51 [PATCH] Fix shrink_dcache_parent() against shrink_dcache_memory() race (updated patch) Jan Blunck
2006-03-09 6:33 ` Balbir Singh
2006-03-09 11:00 ` Jan Blunck [this message]
2006-03-09 11:21 ` Andrew Morton
2006-03-09 11:58 ` Jan Blunck
2006-03-09 12:53 ` Kirill Korotaev
2006-03-09 14:08 ` Jan Blunck
2006-03-09 14:36 ` Kirill Korotaev
2006-03-09 11:36 ` Balbir Singh
2006-03-09 14:42 ` Kirill Korotaev
2006-03-09 16:09 ` Jan Blunck
2006-03-09 16:18 ` Kirill Korotaev
2006-03-09 16:39 ` Jan Blunck
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=20060309110025.GE4243@hasse.suse.de \
--to=jblunck@suse.de \
--cc=akpm@osdl.org \
--cc=balbir@in.ibm.com \
--cc=bsingharora@gmail.com \
--cc=dev@openvz.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@suse.de \
--cc=olh@suse.de \
--cc=viro@zeniv.linux.org.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.