xfs: add size update tracepoint to IO completion
[pandora-kernel.git] / fs / xfs / xfs_buf_item.c
index 716ef09..8849291 100644 (file)
@@ -90,13 +90,11 @@ xfs_buf_item_flush_log_debug(
        uint            first,
        uint            last)
 {
-       xfs_buf_log_item_t      *bip;
+       xfs_buf_log_item_t      *bip = bp->b_fspriv;
        uint                    nbytes;
 
-       bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*);
-       if ((bip == NULL) || (bip->bli_item.li_type != XFS_LI_BUF)) {
+       if (bip == NULL || (bip->bli_item.li_type != XFS_LI_BUF))
                return;
-       }
 
        ASSERT(bip->bli_logged != NULL);
        nbytes = last - first + 1;
@@ -408,7 +406,7 @@ xfs_buf_item_unpin(
        int             stale = bip->bli_flags & XFS_BLI_STALE;
        int             freed;
 
-       ASSERT(XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *) == bip);
+       ASSERT(bp->b_fspriv == bip);
        ASSERT(atomic_read(&bip->bli_refcount) > 0);
 
        trace_xfs_buf_item_unpin(bip);
@@ -454,13 +452,13 @@ xfs_buf_item_unpin(
                 */
                if (bip->bli_flags & XFS_BLI_STALE_INODE) {
                        xfs_buf_do_callbacks(bp);
-                       XFS_BUF_SET_FSPRIVATE(bp, NULL);
-                       XFS_BUF_CLR_IODONE_FUNC(bp);
+                       bp->b_fspriv = NULL;
+                       bp->b_iodone = NULL;
                } else {
                        spin_lock(&ailp->xa_lock);
                        xfs_trans_ail_delete(ailp, (xfs_log_item_t *)bip);
                        xfs_buf_item_relse(bp);
-                       ASSERT(XFS_BUF_FSPRIVATE(bp, void *) == NULL);
+                       ASSERT(bp->b_fspriv == NULL);
                }
                xfs_buf_relse(bp);
        }
@@ -684,7 +682,7 @@ xfs_buf_item_init(
        xfs_buf_t       *bp,
        xfs_mount_t     *mp)
 {
-       xfs_log_item_t          *lip;
+       xfs_log_item_t          *lip = bp->b_fspriv;
        xfs_buf_log_item_t      *bip;
        int                     chunks;
        int                     map_size;
@@ -696,12 +694,8 @@ xfs_buf_item_init(
         * nothing to do here so return.
         */
        ASSERT(bp->b_target->bt_mount == mp);
-       if (XFS_BUF_FSPRIVATE(bp, void *) != NULL) {
-               lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *);
-               if (lip->li_type == XFS_LI_BUF) {
-                       return;
-               }
-       }
+       if (lip != NULL && lip->li_type == XFS_LI_BUF)
+               return;
 
        /*
         * chunks is the number of XFS_BLF_CHUNK size pieces
@@ -740,11 +734,9 @@ xfs_buf_item_init(
         * Put the buf item into the list of items attached to the
         * buffer at the front.
         */
-       if (XFS_BUF_FSPRIVATE(bp, void *) != NULL) {
-               bip->bli_item.li_bio_list =
-                               XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *);
-       }
-       XFS_BUF_SET_FSPRIVATE(bp, bip);
+       if (bp->b_fspriv)
+               bip->bli_item.li_bio_list = bp->b_fspriv;
+       bp->b_fspriv = bip;
 }
 
 
@@ -876,12 +868,11 @@ xfs_buf_item_relse(
 
        trace_xfs_buf_item_relse(bp, _RET_IP_);
 
-       bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*);
-       XFS_BUF_SET_FSPRIVATE(bp, bip->bli_item.li_bio_list);
-       if ((XFS_BUF_FSPRIVATE(bp, void *) == NULL) &&
-           (XFS_BUF_IODONE_FUNC(bp) != NULL)) {
-               XFS_BUF_CLR_IODONE_FUNC(bp);
-       }
+       bip = bp->b_fspriv;
+       bp->b_fspriv = bip->bli_item.li_bio_list;
+       if (bp->b_fspriv == NULL)
+               bp->b_iodone = NULL;
+
        xfs_buf_rele(bp);
        xfs_buf_item_free(bip);
 }
@@ -908,17 +899,17 @@ xfs_buf_attach_iodone(
        ASSERT(xfs_buf_islocked(bp));
 
        lip->li_cb = cb;
-       if (XFS_BUF_FSPRIVATE(bp, void *) != NULL) {
-               head_lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *);
+       head_lip = bp->b_fspriv;
+       if (head_lip) {
                lip->li_bio_list = head_lip->li_bio_list;
                head_lip->li_bio_list = lip;
        } else {
-               XFS_BUF_SET_FSPRIVATE(bp, lip);
+               bp->b_fspriv = lip;
        }
 
-       ASSERT((XFS_BUF_IODONE_FUNC(bp) == xfs_buf_iodone_callbacks) ||
-              (XFS_BUF_IODONE_FUNC(bp) == NULL));
-       XFS_BUF_SET_IODONE_FUNC(bp, xfs_buf_iodone_callbacks);
+       ASSERT(bp->b_iodone == NULL ||
+              bp->b_iodone == xfs_buf_iodone_callbacks);
+       bp->b_iodone = xfs_buf_iodone_callbacks;
 }
 
 /*
@@ -939,8 +930,8 @@ xfs_buf_do_callbacks(
 {
        struct xfs_log_item     *lip;
 
-       while ((lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *)) != NULL) {
-               XFS_BUF_SET_FSPRIVATE(bp, lip->li_bio_list);
+       while ((lip = bp->b_fspriv) != NULL) {
+               bp->b_fspriv = lip->li_bio_list;
                ASSERT(lip->li_cb != NULL);
                /*
                 * Clear the next pointer so we don't have any
@@ -1007,7 +998,7 @@ xfs_buf_iodone_callbacks(
                        XFS_BUF_DONE(bp);
                        XFS_BUF_SET_START(bp);
                }
-               ASSERT(XFS_BUF_IODONE_FUNC(bp));
+               ASSERT(bp->b_iodone != NULL);
                trace_xfs_buf_item_iodone_async(bp, _RET_IP_);
                xfs_buf_relse(bp);
                return;
@@ -1026,8 +1017,8 @@ xfs_buf_iodone_callbacks(
 
 do_callbacks:
        xfs_buf_do_callbacks(bp);
-       XFS_BUF_SET_FSPRIVATE(bp, NULL);
-       XFS_BUF_CLR_IODONE_FUNC(bp);
+       bp->b_fspriv = NULL;
+       bp->b_iodone = NULL;
        xfs_buf_ioend(bp, 0);
 }