Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee34807a authored by Nathan Scott's avatar Nathan Scott
Browse files

[XFS] Provide a mechiansm for flushing delalloc before quota reporting.



SGI-PV: 942815
SGI-Modid: xfs-linux:xfs-kern:23829a

Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent c310ab6c
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -117,6 +117,8 @@ fs_flush_pages(


	if (VN_CACHED(vp)) {
	if (VN_CACHED(vp)) {
		filemap_fdatawrite(ip->i_mapping);
		filemap_fdatawrite(ip->i_mapping);
		if (flags & XFS_B_ASYNC)
			return 0;
		filemap_fdatawait(ip->i_mapping);
		filemap_fdatawait(ip->i_mapping);
	}
	}


+13 −0
Original line number Original line Diff line number Diff line
@@ -766,6 +766,18 @@ linvfs_show_options(
	return error;
	return error;
}
}


STATIC int
linvfs_quotasync(
	struct super_block	*sb,
	int			type)
{
	struct vfs		*vfsp = LINVFS_GET_VFS(sb);
	int			error;

	VFS_QUOTACTL(vfsp, Q_XQUOTASYNC, 0, (caddr_t)NULL, error);
	return -error;
}

STATIC int
STATIC int
linvfs_getxstate(
linvfs_getxstate(
	struct super_block	*sb,
	struct super_block	*sb,
@@ -934,6 +946,7 @@ STATIC struct super_operations linvfs_sops = {
};
};


STATIC struct quotactl_ops linvfs_qops = {
STATIC struct quotactl_ops linvfs_qops = {
	.quota_sync		= linvfs_quotasync,
	.get_xstate		= linvfs_getxstate,
	.get_xstate		= linvfs_getxstate,
	.set_xstate		= linvfs_setxstate,
	.set_xstate		= linvfs_setxstate,
	.get_xquota		= linvfs_getxquota,
	.get_xquota		= linvfs_getxquota,
+5 −2
Original line number Original line Diff line number Diff line
/*
/*
 * Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
 * Copyright (c) 2000-2005 Silicon Graphics, Inc.  All Rights Reserved.
 *
 *
 * This program is free software; you can redistribute it and/or modify it
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * under the terms of version 2 of the GNU General Public License as
@@ -109,7 +109,7 @@ xfs_qm_quotactl(
	vfsp = bhvtovfs(bdp);
	vfsp = bhvtovfs(bdp);
	mp = XFS_VFSTOM(vfsp);
	mp = XFS_VFSTOM(vfsp);


	ASSERT(addr != NULL);
	ASSERT(addr != NULL || cmd == Q_XQUOTASYNC);


	/*
	/*
	 * The following commands are valid even when quotaoff.
	 * The following commands are valid even when quotaoff.
@@ -147,6 +147,9 @@ xfs_qm_quotactl(
			return XFS_ERROR(EROFS);
			return XFS_ERROR(EROFS);
		break;
		break;


	case Q_XQUOTASYNC:
		return (xfs_sync_inodes(mp, SYNC_DELWRI, 0, NULL));

	default:
	default:
		break;
		break;
	}
	}
+1 −0
Original line number Original line Diff line number Diff line
@@ -556,6 +556,7 @@ extern int xfs_readsb(xfs_mount_t *mp);
extern void	xfs_freesb(xfs_mount_t *);
extern void	xfs_freesb(xfs_mount_t *);
extern void	xfs_do_force_shutdown(bhv_desc_t *, int, char *, int);
extern void	xfs_do_force_shutdown(bhv_desc_t *, int, char *, int);
extern int	xfs_syncsub(xfs_mount_t *, int, int, int *);
extern int	xfs_syncsub(xfs_mount_t *, int, int, int *);
extern int	xfs_sync_inodes(xfs_mount_t *, int, int, int *);
extern xfs_agnumber_t	xfs_initialize_perag(xfs_mount_t *, xfs_agnumber_t);
extern xfs_agnumber_t	xfs_initialize_perag(xfs_mount_t *, xfs_agnumber_t);
extern void	xfs_xlatesb(void *, struct xfs_sb *, int, __int64_t);
extern void	xfs_xlatesb(void *, struct xfs_sb *, int, __int64_t);


+2 −2
Original line number Original line Diff line number Diff line
@@ -903,7 +903,7 @@ xfs_sync(
 * only available by calling this routine.
 * only available by calling this routine.
 *
 *
 */
 */
STATIC int
int
xfs_sync_inodes(
xfs_sync_inodes(
	xfs_mount_t	*mp,
	xfs_mount_t	*mp,
	int		flags,
	int		flags,
@@ -987,7 +987,7 @@ xfs_sync_inodes(
	ipointer = (xfs_iptr_t *)kmem_zalloc(sizeof(xfs_iptr_t), KM_SLEEP);
	ipointer = (xfs_iptr_t *)kmem_zalloc(sizeof(xfs_iptr_t), KM_SLEEP);


	fflag = XFS_B_ASYNC;		/* default is don't wait */
	fflag = XFS_B_ASYNC;		/* default is don't wait */
	if (flags & SYNC_BDFLUSH)
	if (flags & (SYNC_BDFLUSH | SYNC_DELWRI))
		fflag = XFS_B_DELWRI;
		fflag = XFS_B_DELWRI;
	if (flags & SYNC_WAIT)
	if (flags & SYNC_WAIT)
		fflag = 0;		/* synchronous overrides all */
		fflag = 0;		/* synchronous overrides all */