public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Arkadiusz Miskiewicz <arekm@maven.pl>
To: xfs@oss.sgi.com
Cc: aelder@sgi.com
Subject: Re: [PATCH 5/6] xfs: register the inode cache shrinker before quotachecks
Date: Wed, 23 Mar 2011 22:24:03 +0100	[thread overview]
Message-ID: <201103232224.03501.arekm@maven.pl> (raw)
In-Reply-To: <1300860870-15471-6-git-send-email-david@fromorbit.com>

On Wednesday 23 of March 2011, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>

Thanks a lot for this patch. I was able to mount my two ~800GB filesystems 
with quota enabled without out of memory/machine reboot suprises (which were 
happening without this patch every time I tried mount with quota).

So

Tested-by: Arkadiusz Miśkiewicz <arekm@maven.pl>

and hope to see it in 2.6.39 . Test was done on patched 2.6.37.

> 
> During mount, we can do a quotacheck that involves a bulkstat pass
> on all inodes. If there are more inodes in the filesystem than can
> be held in memory, we require the inode cache shrinker to run to
> ensure that we don't run out of memory.
> 
> Unfortunately, the inode cache shrinker is not registered until we
> get to the end of the superblock setup process, which is after a
> quotacheck is run if it is needed. Hence we need to register the
> inode cache shrinker earlier in the mount process so that we don't
> OOM during mount. This requires that we also initialise the syncd
> work before we register the shrinker, so we nee dto juggle that
> around as well.
> 
> While there, make sure that we have set up the block sizes in the
> VFS superblock correctly before the quotacheck is run so that any
> inodes that are cached as a result of the quotacheck have their
> block size fields set up correctly.
> 
> Cc: stable@kernel.org
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
>  fs/xfs/linux-2.6/xfs_super.c |   34 ++++++++++++++++++++++++----------
>  1 files changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
> index 8a70b2a..1ba5c45 100644
> --- a/fs/xfs/linux-2.6/xfs_super.c
> +++ b/fs/xfs/linux-2.6/xfs_super.c
> @@ -1539,10 +1539,14 @@ xfs_fs_fill_super(
>  	if (error)
>  		goto out_free_sb;
> 
> -	error = xfs_mountfs(mp);
> -	if (error)
> -		goto out_filestream_unmount;
> -
> +	/*
> +	 * we must configure the block size in the superblock before we run the
> +	 * full mount process as the mount process can lookup and cache inodes.
> +	 * For the same reason we must also initialise the syncd and register
> +	 * the inode cache shrinker so that inodes can be reclaimed during
> +	 * operations like a quotacheck that iterate all inodes in the
> +	 * filesystem.
> +	 */
>  	sb->s_magic = XFS_SB_MAGIC;
>  	sb->s_blocksize = mp->m_sb.sb_blocksize;
>  	sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1;
> @@ -1550,6 +1554,16 @@ xfs_fs_fill_super(
>  	sb->s_time_gran = 1;
>  	set_posix_acl_flag(sb);
> 
> +	error = xfs_syncd_init(mp);
> +	if (error)
> +		goto out_filestream_unmount;
> +
> +	xfs_inode_shrinker_register(mp);
> +
> +	error = xfs_mountfs(mp);
> +	if (error)
> +		goto out_syncd_stop;
> +
>  	root = igrab(VFS_I(mp->m_rootip));
>  	if (!root) {
>  		error = ENOENT;
> @@ -1565,14 +1579,11 @@ xfs_fs_fill_super(
>  		goto fail_vnrele;
>  	}
> 
> -	error = xfs_syncd_init(mp);
> -	if (error)
> -		goto fail_vnrele;
> -
> -	xfs_inode_shrinker_register(mp);
> -
>  	return 0;
> 
> + out_syncd_stop:
> +	xfs_inode_shrinker_unregister(mp);
> +	xfs_syncd_stop(mp);
>   out_filestream_unmount:
>  	xfs_filestream_unmount(mp);
>   out_free_sb:
> @@ -1596,6 +1607,9 @@ xfs_fs_fill_super(
>  	}
> 
>   fail_unmount:
> +	xfs_inode_shrinker_unregister(mp);
> +	xfs_syncd_stop(mp);
> +
>  	/*
>  	 * Blow away any referenced inode in the filestreams cache.
>  	 * This can and will cause log traffic as inodes go inactive


-- 
Arkadiusz Miśkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2011-03-23 21:21 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-23  6:14 xfs: outstanding patches for 2.6.39 Dave Chinner
2011-03-23  6:14 ` [PATCH 1/6] xfs: preallocation transactions do not need to be synchronous Dave Chinner
2011-03-24 17:18   ` brian.foster
2011-03-24 22:53     ` [PATCH V2] " Dave Chinner
2011-03-25 21:00   ` [PATCH 1/6] " Alex Elder
2011-03-25 22:02     ` Dave Chinner
2011-03-23  6:14 ` [PATCH 2/6] vmap: flush vmap aliases when mapping fails Dave Chinner
2011-03-25 21:00   ` Alex Elder
2011-03-23  6:14 ` [PATCH 3/6] xfs: introduce inode cluster buffer trylocks for xfs_iflush Dave Chinner
2011-03-25 21:00   ` Alex Elder
2011-03-23  6:14 ` [PATCH 4/6] xfs: xfs_trans_read_buf() should return an error on failure Dave Chinner
2011-03-23 11:53   ` Christoph Hellwig
2011-03-25 21:01   ` Alex Elder
2011-03-23  6:14 ` [PATCH 5/6] xfs: register the inode cache shrinker before quotachecks Dave Chinner
2011-03-23 21:24   ` Arkadiusz Miskiewicz [this message]
2011-03-25 12:56     ` Michael Weissenbacher
2011-03-25 23:08       ` Dave Chinner
2011-03-25 21:01   ` Alex Elder
2011-03-23  6:14 ` [PATCH 6/6] xfs: stop using the page cache to back the buffer cache Dave Chinner
2011-03-25 21:02   ` Alex Elder
2011-03-25 22:04     ` Dave Chinner
2011-03-23  7:01 ` xfs: outstanding patches for 2.6.39 Andi Kleen
2011-03-23 11:38   ` Dave Chinner
2011-03-23 16:05     ` Andi Kleen
2011-03-23 22:48       ` Dave Chinner
2011-03-23 11:18 ` Christoph Hellwig
2011-03-23 11:38   ` Dave Chinner

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=201103232224.03501.arekm@maven.pl \
    --to=arekm@maven.pl \
    --cc=aelder@sgi.com \
    --cc=xfs@oss.sgi.com \
    /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