All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Blunck <jblunck@suse.de>
To: Neil Brown <neilb@suse.de>
Cc: linux-kernel@vger.kernel.org, Andrew Morton <akpm@osdl.org>,
	Olaf Hering <olh@suse.de>, Kirill Korotaev <dev@openvz.org>,
	Al Viro <viro@ftp.linux.org.uk>
Subject: Re: [PATCH] Busy inodes after unmount, be more verbose in generic_shutdown_super
Date: Thu, 2 Mar 2006 11:48:18 +0100	[thread overview]
Message-ID: <20060302104818.GE31712@hasse.suse.de> (raw)
In-Reply-To: <17414.38749.886125.282255@cse.unsw.edu.au>

On Thu, Mar 02, Neil Brown wrote:

>   This requires:
>   - Breaking dentry_iput into 2 pieces, one that happens while the
>     dcache locks are held, and one that happens unlocked.
>   - Also, dput needs a variant which can be called with the spinlocks
>     held.
>   - This also requires a suitable comment in the code.
> 
>     It is possible that the dentry_iput call in dput might need to be
>     split into the locked/unlocked portions as well.  That would
>     require collecting a list of inodes and dentries to be freed once
>     the lock is dropped, which would be ugly.
>     An alternative might be to skip the tail recursion when
>     dput_locked was called as I *think* it is just an optimisation.
> 
> 
>  The following patch addressed the first three points.
> 
> Comments?  Please :-?
> 

This looks very much like a fixed version of my patch from
http://lkml.org/lkml/2006/1/20/303. Therfore, in general I'm fine with it ;)

Comments below !

> +void dput_locked(struct dentry *dentry)
> +{
> +	if (!dentry)
> +		return;
> +	if (!atomic_dec_and_test(&dentry->d_count)) {
> + 		spin_unlock(&dentry->d_lock);
> + 		spin_unlock(&dcache_lock);
> +		return;
> +	}
> +	__dput_locked(dentry);
> +}
> +

A comment like in dentry_iput() would be fine here:
 * Called with dcache_lock and per dentry lock held, drops both.

>  static inline void prune_one_dentry(struct dentry * dentry)
>  {
>  	struct dentry * parent;
> +	struct inode * ino;
>  
>  	__d_drop(dentry);
>  	list_del(&dentry->d_u.d_child);
>  	dentry_stat.nr_dentry--;	/* For d_free, below */
> -	dentry_iput(dentry);
> +	ino = dentry_iput_locked(dentry);
>  	parent = dentry->d_parent;
> -	d_free(dentry);
>  	if (parent != dentry)
> -		dput(parent);
> +		dput_locked(parent);
> +	else {
> +		spin_unlock(&dentry->d_lock);
> +		spin_unlock(&dcache_lock);
> +	}
> +	dentry_iput_unlocked(dentry, ino);
> +	d_free(dentry);
> +
>  	spin_lock(&dcache_lock);
>  }
>  

You missed getting the parent dentry's lock before calling dput_locked().

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

  reply	other threads:[~2006-03-02 10:48 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-02  6:57 [PATCH] Busy inodes after unmount, be more verbose in generic_shutdown_super Neil Brown
2006-03-02 10:48 ` Jan Blunck [this message]
2006-03-03 11:42 ` Jan Blunck
2006-03-06  6:09 ` Neil Brown
2006-03-06  7:32   ` Balbir Singh
2006-03-07  1:58     ` Neil Brown
2006-03-07  2:49       ` Balbir Singh
2006-03-07  6:22         ` Kirill Korotaev
2006-03-07  6:16       ` Kirill Korotaev
2006-03-07  7:03         ` Balbir Singh
2006-03-07  7:21           ` Kirill Korotaev
2006-03-07 11:05             ` Balbir Singh
2006-03-08  0:29         ` Neil Brown
2006-03-08  2:17           ` Balbir Singh
2006-03-08  2:39             ` Neil Brown
2006-03-08  3:05               ` Balbir Singh
2006-03-08 11:01                 ` Jan Blunck
2006-03-06 11:56   ` Jan Blunck
2006-03-07  2:15     ` Neil Brown
2006-03-06 11:56   ` Kirill Korotaev
2006-03-07  2:01     ` Neil Brown
2006-03-07  6:20       ` Kirill Korotaev
2006-03-07 23:20         ` Neil Brown
2006-03-09 12:03           ` Kirill Korotaev
  -- strict thread matches above, loose matches on Subject: below --
2006-01-16 22:34 Olaf Hering
2006-01-16 23:23 ` Kirill Korotaev
2006-01-16 23:29   ` Olaf Hering
2006-01-17  2:05     ` Andrew Morton
2006-01-17  7:03       ` Kirill Korotaev
2006-01-18 22:49   ` Jan Blunck
2006-01-18 23:10     ` Andrew Morton
2006-01-19 10:08       ` Kirill Korotaev
2006-01-19  9:52     ` Kirill Korotaev
2006-01-19 10:04       ` Jan Blunck
2006-01-19 10:26         ` Kirill Korotaev
2006-01-20 19:06           ` Jan Blunck
2006-01-23  8:14             ` Kirill Korotaev
2006-01-30 11:54               ` Jan Blunck
2006-01-30 14:05                 ` Kirill Korotaev
2006-01-30 14:21                   ` Jan Blunck
2006-01-30 14:34                     ` Kirill Korotaev

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=20060302104818.GE31712@hasse.suse.de \
    --to=jblunck@suse.de \
    --cc=akpm@osdl.org \
    --cc=dev@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=olh@suse.de \
    --cc=viro@ftp.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.