]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
xfs: call xfs_buf_delwri_queue directly
authorChristoph Hellwig <hch@infradead.org>
Tue, 23 Aug 2011 08:28:06 +0000 (08:28 +0000)
committerAlex Elder <aelder@sgi.com>
Wed, 12 Oct 2011 02:14:59 +0000 (21:14 -0500)
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: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
12 files changed:
fs/xfs/xfs_attr.c
fs/xfs/xfs_buf.c
fs/xfs/xfs_buf.h
fs/xfs/xfs_buf_item.c
fs/xfs/xfs_dquot.c
fs/xfs/xfs_inode.c
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_mount.c
fs/xfs/xfs_qm.c
fs/xfs/xfs_rw.c
fs/xfs/xfs_trace.h
fs/xfs/xfs_trans_buf.c

index 160bcdc34a6e91d6ce77394089123b2a86abc3dc..b097fd5a2b3f3dacaf231a51c39e7462958040ba 100644 (file)
@@ -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;
                }
index 86c0945053c983ab89066e9179339c3c1873c4cf..309eca75fad48a7b1c7cf8f3ca96b8dda3ae9e22 100644 (file)
@@ -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 @@ error:
 /*
  *     Delayed write buffer handling
  */
-STATIC void
+void
 xfs_buf_delwri_queue(
        xfs_buf_t               *bp)
 {
index 620972b8094d7129a6fc6fcf6fc813686edd13bf..f1a8933becb6543ab823f5b8e29852eb6a057d13 100644 (file)
@@ -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)
index cac2ecfa674684762cce50d5acd323f79b8b4d5a..3243083d869344ce8b2fb269a3d491b35a6a1282 100644 (file)
@@ -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_);
 
index db62959bed132d66c9d26ab2128335c5d4b9c318..0f78dd46415c061aaab03ec96f0fabd6fa1049c5 100644 (file)
@@ -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);
 
index 0239a7c7c886a2c83a74352ee0504082cb328e26..f8fe1c66d42044f975c47a04ddad38adeda8bfe7 100644 (file)
@@ -2598,8 +2598,10 @@ xfs_iflush(
 
        if (flags & SYNC_WAIT)
                error = xfs_bwrite(mp, bp);
-       else
-               xfs_bdwrite(mp, bp);
+       else {
+               xfs_buf_delwri_queue(bp);
+               xfs_buf_relse(bp);
+       }
        return error;
 
 corrupt_out:
index a199dbcee7d8c274b14a648c1252986234b04f9e..22946949bf5e74cad6b88a65df5dc323c250fc02 100644 (file)
@@ -2176,7 +2176,8 @@ xlog_recover_buffer_pass2(
        } else {
                ASSERT(bp->b_target->bt_mount == mp);
                bp->b_iodone = xlog_recover_iodone;
-               xfs_bdwrite(mp, bp);
+               xfs_buf_delwri_queue(bp);
+               xfs_buf_relse(bp);
        }
 
        return (error);
@@ -2439,7 +2440,8 @@ xlog_recover_inode_pass2(
 write_inode_buffer:
        ASSERT(bp->b_target->bt_mount == mp);
        bp->b_iodone = xlog_recover_iodone;
-       xfs_bdwrite(mp, bp);
+       xfs_buf_delwri_queue(bp);
+       xfs_buf_relse(bp);
 error:
        if (need_free)
                kmem_free(in_f);
@@ -2561,7 +2563,8 @@ xlog_recover_dquot_pass2(
        ASSERT(dq_f->qlf_size == 2);
        ASSERT(bp->b_target->bt_mount == mp);
        bp->b_iodone = xlog_recover_iodone;
-       xfs_bdwrite(mp, bp);
+       xfs_buf_delwri_queue(bp);
+       xfs_buf_relse(bp);
 
        return (0);
 }
index 0081657ad985ee27417ba4b73c142cb3d43e78b7..a957e437bee1f4355dade7b94061f5ba1121f0ab 100644 (file)
@@ -1612,7 +1612,7 @@ xfs_unmountfs_writesb(xfs_mount_t *mp)
 
                XFS_BUF_UNDONE(sbp);
                XFS_BUF_UNREAD(sbp);
-               XFS_BUF_UNDELAYWRITE(sbp);
+               xfs_buf_delwri_dequeue(sbp);
                XFS_BUF_WRITE(sbp);
                XFS_BUF_UNASYNC(sbp);
                ASSERT(sbp->b_target == mp->m_ddev_targp);
index 9a0aa76facdf46079e52c0577a10f73d0f47d68a..f51bef885e6d3c5b1761c205f5ddccd81eb01616 100644 (file)
@@ -1296,7 +1296,8 @@ xfs_qm_dqiter_bufs(
                        break;
 
                xfs_qm_reset_dqcounts(mp, bp, firstid, type);
-               xfs_bdwrite(mp, bp);
+               xfs_buf_delwri_queue(bp);
+               xfs_buf_relse(bp);
                /*
                 * goto the next block.
                 */
index c96a8a05ac038ef153f008936e8b9f153c693d1e..99823c3b9acaa023fe75c1a2528f11a60a1cc525 100644 (file)
@@ -149,7 +149,7 @@ xfs_read_buf(
                }
                if (bp) {
                        XFS_BUF_UNDONE(bp);
-                       XFS_BUF_UNDELAYWRITE(bp);
+                       xfs_buf_delwri_dequeue(bp);
                        XFS_BUF_STALE(bp);
                        /*
                         * brelse clears B_ERROR and b_error
index 690fc7a7bd7283f78f24a35dc4e4d7ad10d0a65f..bb5e660e0fabe64cd5884b9cccf26dfc74a03cf7 100644 (file)
@@ -320,7 +320,6 @@ DEFINE_BUF_EVENT(xfs_buf_rele);
 DEFINE_BUF_EVENT(xfs_buf_iodone);
 DEFINE_BUF_EVENT(xfs_buf_iorequest);
 DEFINE_BUF_EVENT(xfs_buf_bawrite);
-DEFINE_BUF_EVENT(xfs_buf_bdwrite);
 DEFINE_BUF_EVENT(xfs_buf_lock);
 DEFINE_BUF_EVENT(xfs_buf_lock_done);
 DEFINE_BUF_EVENT(xfs_buf_trylock);
index 137e2b9e2948ae29c41eb07867c5ea813f19bdea..5e5196a269dd030f6be570bf713d470a5174e363 100644 (file)
@@ -643,13 +643,14 @@ xfs_trans_log_buf(xfs_trans_t     *tp,
         * inside the b_bdstrat callback so that this won't get written to
         * disk.
         */
-       XFS_BUF_DELAYWRITE(bp);
        XFS_BUF_DONE(bp);
 
        ASSERT(atomic_read(&bip->bli_refcount) > 0);
        bp->b_iodone = xfs_buf_iodone_callbacks;
        bip->bli_item.li_cb = xfs_buf_iodone;
 
+       xfs_buf_delwri_queue(bp);
+
        trace_xfs_trans_log_buf(bip);
 
        /*
@@ -738,7 +739,7 @@ xfs_trans_binval(
         * We set the stale bit in the buffer as well since we're getting
         * rid of it.
         */
-       XFS_BUF_UNDELAYWRITE(bp);
+       xfs_buf_delwri_dequeue(bp);
        XFS_BUF_STALE(bp);
        bip->bli_flags |= XFS_BLI_STALE;
        bip->bli_flags &= ~(XFS_BLI_INODE_BUF | XFS_BLI_LOGGED | XFS_BLI_DIRTY);