d808f617ad
All buffers logged into the AIL are marked as delayed write. When the AIL needs to push the buffer out, it issues an async write of the buffer. This means that IO patterns are dependent on the order of buffers in the AIL. Instead of flushing the buffer, promote the buffer in the delayed write list so that the next time the xfsbufd is run the buffer will be flushed by the xfsbufd. Return the state to the xfsaild that the buffer was promoted so that the xfsaild knows that it needs to cause the xfsbufd to run to flush the buffers that were promoted. Using the xfsbufd for issuing the IO allows us to dispatch all buffer IO from the one queue. This means that we can make much more enlightened decisions on what order to flush buffers to disk as we don't have multiple places issuing IO. Optimisations to xfsbufd will be in a future patch. Version 2 - kill XFS_ITEM_FLUSHING as it is now unused. Signed-off-by: Dave Chinner <david@fromorbit.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
49 lines
1.7 KiB
C
49 lines
1.7 KiB
C
/*
|
|
* Copyright (c) 2000-2003 Silicon Graphics, Inc.
|
|
* All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it would be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
#ifndef __XFS_DQUOT_ITEM_H__
|
|
#define __XFS_DQUOT_ITEM_H__
|
|
|
|
struct xfs_dquot;
|
|
struct xfs_trans;
|
|
struct xfs_mount;
|
|
struct xfs_qoff_logitem;
|
|
|
|
typedef struct xfs_dq_logitem {
|
|
xfs_log_item_t qli_item; /* common portion */
|
|
struct xfs_dquot *qli_dquot; /* dquot ptr */
|
|
xfs_lsn_t qli_flush_lsn; /* lsn at last flush */
|
|
xfs_dq_logformat_t qli_format; /* logged structure */
|
|
} xfs_dq_logitem_t;
|
|
|
|
typedef struct xfs_qoff_logitem {
|
|
xfs_log_item_t qql_item; /* common portion */
|
|
struct xfs_qoff_logitem *qql_start_lip; /* qoff-start logitem, if any */
|
|
xfs_qoff_logformat_t qql_format; /* logged structure */
|
|
} xfs_qoff_logitem_t;
|
|
|
|
|
|
extern void xfs_qm_dquot_logitem_init(struct xfs_dquot *);
|
|
extern xfs_qoff_logitem_t *xfs_qm_qoff_logitem_init(struct xfs_mount *,
|
|
struct xfs_qoff_logitem *, uint);
|
|
extern xfs_qoff_logitem_t *xfs_trans_get_qoff_item(struct xfs_trans *,
|
|
struct xfs_qoff_logitem *, uint);
|
|
extern void xfs_trans_log_quotaoff_item(struct xfs_trans *,
|
|
struct xfs_qoff_logitem *);
|
|
|
|
#endif /* __XFS_DQUOT_ITEM_H__ */
|