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

Commit 61551f1e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder
Browse files

xfs: call xfs_buf_delwri_queue directly



Unify the ways we add buffers to the delwri queue by always calling
xfs_buf_delwri_queue directly.  The xfs_bdwrite functions is removed and
opencoded in its callers, and the two places setting XBF_DELWRI while a
buffer is locked and expecting xfs_buf_unlock to pick it up are converted
to call xfs_buf_delwri_queue directly, too.  Also replace the
XFS_BUF_UNDELAYWRITE macro with direct calls to xfs_buf_delwri_dequeue
to make the explicit queuing/dequeuing more obvious.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent 5a8ee6ba
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2189,7 +2189,7 @@ xfs_attr_rmtval_remove(xfs_da_args_t *args)
		bp = xfs_incore(mp->m_ddev_targp, dblkno, blkcnt, XBF_TRYLOCK);
		if (bp) {
			XFS_BUF_STALE(bp);
			XFS_BUF_UNDELAYWRITE(bp);
			xfs_buf_delwri_dequeue(bp);
			xfs_buf_relse(bp);
			bp = NULL;
		}
+3 −18
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@

static kmem_zone_t *xfs_buf_zone;
STATIC int xfsbufd(void *);
STATIC void xfs_buf_delwri_queue(xfs_buf_t *);

static struct workqueue_struct *xfslogd_workqueue;
struct workqueue_struct *xfsdatad_workqueue;
@@ -937,9 +936,6 @@ void
xfs_buf_unlock(
	struct xfs_buf		*bp)
{
	if ((bp->b_flags & (XBF_DELWRI|_XBF_DELWRI_Q)) == XBF_DELWRI)
		xfs_buf_delwri_queue(bp);

	XB_CLEAR_OWNER(bp);
	up(&bp->b_sema);

@@ -1036,17 +1032,6 @@ xfs_bwrite(
	return error;
}

void
xfs_bdwrite(
	void			*mp,
	struct xfs_buf		*bp)
{
	trace_xfs_buf_bdwrite(bp, _RET_IP_);

	xfs_buf_delwri_queue(bp);
	xfs_buf_relse(bp);
}

/*
 * Called when we want to stop a buffer from getting written or read.
 * We attach the EIO error, muck with its flags, and call xfs_buf_ioend
@@ -1069,7 +1054,7 @@ xfs_bioerror(
	 * We're calling xfs_buf_ioend, so delete XBF_DONE flag.
	 */
	XFS_BUF_UNREAD(bp);
	XFS_BUF_UNDELAYWRITE(bp);
	xfs_buf_delwri_dequeue(bp);
	XFS_BUF_UNDONE(bp);
	XFS_BUF_STALE(bp);

@@ -1098,7 +1083,7 @@ xfs_bioerror_relse(
	 * change that interface.
	 */
	XFS_BUF_UNREAD(bp);
	XFS_BUF_UNDELAYWRITE(bp);
	xfs_buf_delwri_dequeue(bp);
	XFS_BUF_DONE(bp);
	XFS_BUF_STALE(bp);
	bp->b_iodone = NULL;
@@ -1555,7 +1540,7 @@ xfs_alloc_buftarg(
/*
 *	Delayed write buffer handling
 */
STATIC void
void
xfs_buf_delwri_queue(
	xfs_buf_t		*bp)
{
+3 −5
Original line number Diff line number Diff line
@@ -198,7 +198,6 @@ extern void xfs_buf_unlock(xfs_buf_t *);

/* Buffer Read and Write Routines */
extern int xfs_bwrite(struct xfs_mount *mp, struct xfs_buf *bp);
extern void xfs_bdwrite(void *mp, xfs_buf_t *bp);

extern void xfsbdstrat(struct xfs_mount *, struct xfs_buf *);
extern int xfs_bdstrat_cb(struct xfs_buf *);
@@ -221,8 +220,9 @@ static inline int xfs_buf_geterror(xfs_buf_t *bp)
extern xfs_caddr_t xfs_buf_offset(xfs_buf_t *, size_t);

/* Delayed Write Buffer Routines */
extern void xfs_buf_delwri_dequeue(xfs_buf_t *);
extern void xfs_buf_delwri_promote(xfs_buf_t *);
extern void xfs_buf_delwri_queue(struct xfs_buf *);
extern void xfs_buf_delwri_dequeue(struct xfs_buf *);
extern void xfs_buf_delwri_promote(struct xfs_buf *);

/* Buffer Daemon Setup Routines */
extern int xfs_buf_init(void);
@@ -251,8 +251,6 @@ void xfs_buf_stale(struct xfs_buf *bp);
					XFS_BUF_DONE(bp);	\
				} while (0)

#define XFS_BUF_DELAYWRITE(bp)		((bp)->b_flags |= XBF_DELWRI)
#define XFS_BUF_UNDELAYWRITE(bp)	xfs_buf_delwri_dequeue(bp)
#define XFS_BUF_ISDELAYWRITE(bp)	((bp)->b_flags & XBF_DELWRI)

#define XFS_BUF_DONE(bp)	((bp)->b_flags |= XBF_DONE)
+2 −2
Original line number Diff line number Diff line
@@ -992,7 +992,7 @@ xfs_buf_iodone_callbacks(
		xfs_buf_ioerror(bp, 0); /* errno of 0 unsets the flag */

		if (!XFS_BUF_ISSTALE(bp)) {
			XFS_BUF_DELAYWRITE(bp);
			xfs_buf_delwri_queue(bp);
			XFS_BUF_DONE(bp);
		}
		ASSERT(bp->b_iodone != NULL);
@@ -1007,7 +1007,7 @@ xfs_buf_iodone_callbacks(
	 */
	XFS_BUF_STALE(bp);
	XFS_BUF_DONE(bp);
	XFS_BUF_UNDELAYWRITE(bp);
	xfs_buf_delwri_dequeue(bp);

	trace_xfs_buf_error_relse(bp, _RET_IP_);

+4 −2
Original line number Diff line number Diff line
@@ -1243,8 +1243,10 @@ xfs_qm_dqflush(

	if (flags & SYNC_WAIT)
		error = xfs_bwrite(mp, bp);
	else
		xfs_bdwrite(mp, bp);
	else {
		xfs_buf_delwri_queue(bp);
		xfs_buf_relse(bp);
	}

	trace_xfs_dqflush_done(dqp);

Loading