[PATCH 9/7] xfs: remove SYNC_BDFLUSH
Sujit Karataparambil
sjt.kar at gmail.com
Fri May 29 08:19:39 CDT 2009
Hi,
Newbie question?
Kindly tell me where this code is called from do you have pagedeamon
on vfs or is it some thing else?
Sorry for bothering you.
On Thu, May 28, 2009 at 5:49 PM, Christoph Hellwig <hch at infradead.org> wrote:
> SYNC_BDFLUSH is a leftover from IRIX and rather misnamed for todays
> code. Make xfs_sync_fsdata and xfs_dq_sync use the SYNC_TRYLOCK flag
> for not blocking on logs just as the inode sync code already does.
>
> For xfs_sync_fsdata it's a trivial 1:1 replacement, but for xfs_qm_sync
> I use the opportunity to decouple the non-blocking lock case from the
> different flushing modes, similar to the inode sync code.
>
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
>
> Index: xfs/fs/xfs/linux-2.6/xfs_sync.c
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-05-27 13:02:57.426938830 +0200
> +++ xfs/fs/xfs/linux-2.6/xfs_sync.c 2009-05-27 13:07:53.227939055 +0200
> @@ -350,7 +350,7 @@ xfs_sync_fsdata(
> * If this is xfssyncd() then only sync the superblock if we can
> * lock it without sleeping and it is not pinned.
> */
> - if (flags & SYNC_BDFLUSH) {
> + if (flags & SYNC_TRYLOCK) {
> ASSERT(!(flags & SYNC_WAIT));
>
> bp = xfs_getsb(mp, XFS_BUF_TRYLOCK);
> @@ -415,7 +415,7 @@ xfs_quiesce_data(
>
> /* push non-blocking */
> xfs_sync_data(mp, 0);
> - xfs_qm_sync(mp, SYNC_BDFLUSH);
> + xfs_qm_sync(mp, SYNC_TRYLOCK);
> xfs_filestream_flush(mp);
>
> /* push and block */
> @@ -565,8 +565,8 @@ xfs_sync_worker(
> xfs_log_force(mp, (xfs_lsn_t)0, XFS_LOG_FORCE);
> xfs_reclaim_inodes(mp, XFS_IFLUSH_DELWRI_ELSE_ASYNC);
> /* dgc: errors ignored here */
> - error = xfs_qm_sync(mp, SYNC_BDFLUSH);
> - error = xfs_sync_fsdata(mp, SYNC_BDFLUSH);
> + error = xfs_qm_sync(mp, SYNC_TRYLOCK);
> + error = xfs_sync_fsdata(mp, SYNC_TRYLOCK);
> if (xfs_log_need_covered(mp))
> error = xfs_commit_dummy_trans(mp, XFS_LOG_FORCE);
> }
> Index: xfs/fs/xfs/quota/xfs_qm.c
> ===================================================================
> --- xfs.orig/fs/xfs/quota/xfs_qm.c 2009-05-27 13:04:00.607842293 +0200
> +++ xfs/fs/xfs/quota/xfs_qm.c 2009-05-27 13:10:21.688940102 +0200
> @@ -905,11 +905,6 @@ xfs_qm_dqdetach(
> }
> }
>
> -/*
> - * This is called to sync quotas. We can be told to use non-blocking
> - * semantics by either the SYNC_BDFLUSH flag or the absence of the
> - * SYNC_WAIT flag.
> - */
> int
> xfs_qm_sync(
> xfs_mount_t *mp,
> @@ -918,17 +913,13 @@ xfs_qm_sync(
> int recl, restarts;
> xfs_dquot_t *dqp;
> uint flush_flags;
> - boolean_t nowait;
> int error;
>
> if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp))
> return 0;
>
> + flush_flags = (flags & SYNC_WAIT) ? XFS_QMOPT_SYNC : XFS_QMOPT_DELWRI;
> restarts = 0;
> - /*
> - * We won't block unless we are asked to.
> - */
> - nowait = (boolean_t)(flags & SYNC_BDFLUSH || (flags & SYNC_WAIT) == 0);
>
> again:
> xfs_qm_mplist_lock(mp);
> @@ -948,18 +939,10 @@ xfs_qm_sync(
> * don't 'seem' to be dirty. ie. don't acquire dqlock.
> * This is very similar to what xfs_sync does with inodes.
> */
> - if (flags & SYNC_BDFLUSH) {
> - if (! XFS_DQ_IS_DIRTY(dqp))
> + if (flags & SYNC_TRYLOCK) {
> + if (!XFS_DQ_IS_DIRTY(dqp))
> continue;
> - }
> -
> - if (nowait) {
> - /*
> - * Try to acquire the dquot lock. We are NOT out of
> - * lock order, but we just don't want to wait for this
> - * lock, unless somebody wanted us to.
> - */
> - if (! xfs_qm_dqlock_nowait(dqp))
> + if (!xfs_qm_dqlock_nowait(dqp))
> continue;
> } else {
> xfs_dqlock(dqp);
> @@ -976,7 +959,7 @@ xfs_qm_sync(
> /* XXX a sentinel would be better */
> recl = XFS_QI_MPLRECLAIMS(mp);
> if (!xfs_dqflock_nowait(dqp)) {
> - if (nowait) {
> + if (flags & SYNC_TRYLOCK) {
> xfs_dqunlock(dqp);
> continue;
> }
> @@ -994,7 +977,6 @@ xfs_qm_sync(
> * Let go of the mplist lock. We don't want to hold it
> * across a disk write
> */
> - flush_flags = (nowait) ? XFS_QMOPT_DELWRI : XFS_QMOPT_SYNC;
> xfs_qm_mplist_unlock(mp);
> xfs_dqtrace_entry(dqp, "XQM_SYNC: DQFLUSH");
> error = xfs_qm_dqflush(dqp, flush_flags);
> Index: xfs/fs/xfs/linux-2.6/xfs_sync.h
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.h 2009-05-27 13:07:58.997814418 +0200
> +++ xfs/fs/xfs/linux-2.6/xfs_sync.h 2009-05-27 13:08:19.922972203 +0200
> @@ -29,9 +29,8 @@ typedef struct xfs_sync_work {
> struct completion *w_completion;
> } xfs_sync_work_t;
>
> -#define SYNC_WAIT 0x0004 /* wait for i/o to complete */
> -#define SYNC_BDFLUSH 0x0008 /* BDFLUSH is calling -- don't block */
> -#define SYNC_TRYLOCK 0x0020 /* only try to lock inodes */
> +#define SYNC_WAIT 0x0001 /* wait for i/o to complete */
> +#define SYNC_TRYLOCK 0x0002 /* only try to lock inodes */
>
> int xfs_syncd_init(struct xfs_mount *mp);
> void xfs_syncd_stop(struct xfs_mount *mp);
>
> _______________________________________________
> xfs mailing list
> xfs at oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
>
--
-- Sujit K M
More information about the xfs
mailing list