From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Carlos Maiolino <cmaiolino@redhat.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 2/3] Split buffer's b_fspriv field
Date: Wed, 24 Jan 2018 13:49:32 -0800 [thread overview]
Message-ID: <20180124214932.GC9068@magnolia> (raw)
In-Reply-To: <20180124084736.17411-3-cmaiolino@redhat.com>
On Wed, Jan 24, 2018 at 09:47:35AM +0100, Carlos Maiolino wrote:
> By splitting the b_fspriv field into two different fields (b_log_item
> and b_li_list). It's possible to get rid of an old ABI workaround, by
> using the new b_log_item field to store xfs_buf_log_item separated from
> the log items attached to the buffer, which will be linked in the new
> b_li_list field.
>
> This way, there is no more need to reorder the log items list to place
> the buf_log_item at the beginning of the list, simplifying a bit the
> logic to handle buffer IO.
>
> This also opens the possibility to change buffer's log items list into a
> proper list_head.
>
> b_log_item field is still defined as a void *, because it is still used
> by the log buffers to store xlog_in_core structures, and there is no
> need to add an extra field on xfs_buf just for xlog_in_core.
>
> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
> ---
> fs/xfs/libxfs/xfs_alloc.c | 8 ++--
> fs/xfs/libxfs/xfs_attr_leaf.c | 2 +-
> fs/xfs/libxfs/xfs_btree.c | 4 +-
> fs/xfs/libxfs/xfs_da_btree.c | 2 +-
> fs/xfs/libxfs/xfs_dir2_block.c | 2 +-
> fs/xfs/libxfs/xfs_dir2_data.c | 2 +-
> fs/xfs/libxfs/xfs_dir2_leaf.c | 2 +-
> fs/xfs/libxfs/xfs_dir2_node.c | 2 +-
> fs/xfs/libxfs/xfs_ialloc.c | 4 +-
> fs/xfs/libxfs/xfs_sb.c | 2 +-
> fs/xfs/libxfs/xfs_symlink_remote.c | 2 +-
> fs/xfs/xfs_buf.h | 3 +-
> fs/xfs/xfs_buf_item.c | 89 +++++++++++++++++++++++---------------
> fs/xfs/xfs_inode.c | 4 +-
> fs/xfs/xfs_inode_item.c | 4 +-
> fs/xfs/xfs_log.c | 8 ++--
> fs/xfs/xfs_log_recover.c | 6 +--
> fs/xfs/xfs_trans_buf.c | 48 ++++++++++----------
> 18 files changed, 108 insertions(+), 86 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> index 6883a7668de6..c02781a4c091 100644
> --- a/fs/xfs/libxfs/xfs_alloc.c
> +++ b/fs/xfs/libxfs/xfs_alloc.c
> @@ -590,8 +590,8 @@ static void
> xfs_agfl_write_verify(
> struct xfs_buf *bp)
> {
> - struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_mount *mp = bp->b_target->bt_mount;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> xfs_failaddr_t fa;
>
> /* no verification of non-crc AGFLs */
> @@ -2487,8 +2487,8 @@ static void
> xfs_agf_write_verify(
> struct xfs_buf *bp)
> {
> - struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_mount *mp = bp->b_target->bt_mount;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> xfs_failaddr_t fa;
>
> fa = xfs_agf_verify(bp);
> diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
> index efe5f8acbd45..2135b8e67dcc 100644
> --- a/fs/xfs/libxfs/xfs_attr_leaf.c
> +++ b/fs/xfs/libxfs/xfs_attr_leaf.c
> @@ -309,7 +309,7 @@ xfs_attr3_leaf_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> struct xfs_attr3_leaf_hdr *hdr3 = bp->b_addr;
> xfs_failaddr_t fa;
>
> diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
> index 567cff5ed511..79ee4a1951d1 100644
> --- a/fs/xfs/libxfs/xfs_btree.c
> +++ b/fs/xfs/libxfs/xfs_btree.c
> @@ -273,7 +273,7 @@ xfs_btree_lblock_calc_crc(
> struct xfs_buf *bp)
> {
> struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp);
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> if (!xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb))
> return;
> @@ -311,7 +311,7 @@ xfs_btree_sblock_calc_crc(
> struct xfs_buf *bp)
> {
> struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp);
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> if (!xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb))
> return;
> diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c
> index cf07585b9d83..ea187b4a7991 100644
> --- a/fs/xfs/libxfs/xfs_da_btree.c
> +++ b/fs/xfs/libxfs/xfs_da_btree.c
> @@ -182,7 +182,7 @@ xfs_da3_node_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> struct xfs_da3_node_hdr *hdr3 = bp->b_addr;
> xfs_failaddr_t fa;
>
> diff --git a/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c
> index fe951fa1a583..2da86a394bcf 100644
> --- a/fs/xfs/libxfs/xfs_dir2_block.c
> +++ b/fs/xfs/libxfs/xfs_dir2_block.c
> @@ -103,7 +103,7 @@ xfs_dir3_block_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
> xfs_failaddr_t fa;
>
> diff --git a/fs/xfs/libxfs/xfs_dir2_data.c b/fs/xfs/libxfs/xfs_dir2_data.c
> index a1e30c751c00..920279485275 100644
> --- a/fs/xfs/libxfs/xfs_dir2_data.c
> +++ b/fs/xfs/libxfs/xfs_dir2_data.c
> @@ -320,7 +320,7 @@ xfs_dir3_data_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
> xfs_failaddr_t fa;
>
> diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c
> index a7ad649398c7..d7e630f41f9c 100644
> --- a/fs/xfs/libxfs/xfs_dir2_leaf.c
> +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c
> @@ -208,7 +208,7 @@ __write_verify(
> uint16_t magic)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> struct xfs_dir3_leaf_hdr *hdr3 = bp->b_addr;
> xfs_failaddr_t fa;
>
> diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
> index bb893ae02696..239d97a64296 100644
> --- a/fs/xfs/libxfs/xfs_dir2_node.c
> +++ b/fs/xfs/libxfs/xfs_dir2_node.c
> @@ -141,7 +141,7 @@ xfs_dir3_free_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
> xfs_failaddr_t fa;
>
> diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
> index 3625d1da7462..0e2cf5f0be1f 100644
> --- a/fs/xfs/libxfs/xfs_ialloc.c
> +++ b/fs/xfs/libxfs/xfs_ialloc.c
> @@ -2557,8 +2557,8 @@ static void
> xfs_agi_write_verify(
> struct xfs_buf *bp)
> {
> - struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_mount *mp = bp->b_target->bt_mount;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> xfs_failaddr_t fa;
>
> fa = xfs_agi_verify(bp);
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index e0c826403c6a..46af6aa60a8e 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -688,7 +688,7 @@ xfs_sb_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> int error;
>
> error = xfs_sb_verify(bp, false);
> diff --git a/fs/xfs/libxfs/xfs_symlink_remote.c b/fs/xfs/libxfs/xfs_symlink_remote.c
> index 091e3cf0868f..5ef5f354587e 100644
> --- a/fs/xfs/libxfs/xfs_symlink_remote.c
> +++ b/fs/xfs/libxfs/xfs_symlink_remote.c
> @@ -149,7 +149,7 @@ xfs_symlink_write_verify(
> struct xfs_buf *bp)
> {
> struct xfs_mount *mp = bp->b_target->bt_mount;
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> xfs_failaddr_t fa;
>
> /* no verification of non-crc buffers */
> diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
> index 5b5b4861c729..6fcba7536d7e 100644
> --- a/fs/xfs/xfs_buf.h
> +++ b/fs/xfs/xfs_buf.h
> @@ -176,7 +176,8 @@ typedef struct xfs_buf {
> struct workqueue_struct *b_ioend_wq; /* I/O completion wq */
> xfs_buf_iodone_t b_iodone; /* I/O completion function */
> struct completion b_iowait; /* queue for I/O waiters */
> - void *b_fspriv;
> + void *b_log_item;
> + struct xfs_log_item *b_li_list;
> struct xfs_trans *b_transp;
> struct page **b_pages; /* array of page pointers */
> struct page *b_page_array[XB_PAGES]; /* inline pages */
> diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
> index 8afcfa3ed976..b27ef1fc5538 100644
> --- a/fs/xfs/xfs_buf_item.c
> +++ b/fs/xfs/xfs_buf_item.c
> @@ -411,7 +411,7 @@ xfs_buf_item_unpin(
> int stale = bip->bli_flags & XFS_BLI_STALE;
> int freed;
>
> - ASSERT(bp->b_fspriv == bip);
> + ASSERT(bp->b_log_item == bip);
> ASSERT(atomic_read(&bip->bli_refcount) > 0);
>
> trace_xfs_buf_item_unpin(bip);
> @@ -456,13 +456,14 @@ xfs_buf_item_unpin(
> */
> if (bip->bli_flags & XFS_BLI_STALE_INODE) {
> xfs_buf_do_callbacks(bp);
> - bp->b_fspriv = NULL;
> + bp->b_log_item = NULL;
> + bp->b_li_list = NULL;
> bp->b_iodone = NULL;
> } else {
> spin_lock(&ailp->xa_lock);
> xfs_trans_ail_delete(ailp, lip, SHUTDOWN_LOG_IO_ERROR);
> xfs_buf_item_relse(bp);
> - ASSERT(bp->b_fspriv == NULL);
> + ASSERT(bp->b_log_item == NULL);
> }
> xfs_buf_relse(bp);
> } else if (freed && remove) {
> @@ -722,18 +723,15 @@ xfs_buf_item_free_format(
>
> /*
> * Allocate a new buf log item to go with the given buffer.
> - * Set the buffer's b_fsprivate field to point to the new
> - * buf log item. If there are other item's attached to the
> - * buffer (see xfs_buf_attach_iodone() below), then put the
> - * buf log item at the front.
> + * Set the buffer's b_log_item field to point to the new
> + * buf log item.
> */
> int
> xfs_buf_item_init(
> struct xfs_buf *bp,
> struct xfs_mount *mp)
> {
> - struct xfs_log_item *lip = bp->b_fspriv;
> - struct xfs_buf_log_item *bip;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> int chunks;
> int map_size;
> int error;
> @@ -741,13 +739,14 @@ xfs_buf_item_init(
>
> /*
> * Check to see if there is already a buf log item for
> - * this buffer. If there is, it is guaranteed to be
> - * the first. If we do already have one, there is
> + * this buffer. If we do already have one, there is
> * nothing to do here so return.
> */
> ASSERT(bp->b_target->bt_mount == mp);
> - if (lip != NULL && lip->li_type == XFS_LI_BUF)
> + if (bip != NULL) {
> + ASSERT(bip->bli_item.li_type == XFS_LI_BUF);
> return 0;
> + }
>
> bip = kmem_zone_zalloc(xfs_buf_item_zone, KM_SLEEP);
> xfs_log_item_init(mp, &bip->bli_item, XFS_LI_BUF, &xfs_buf_item_ops);
> @@ -781,13 +780,7 @@ xfs_buf_item_init(
> bip->bli_formats[i].blf_map_size = map_size;
> }
>
> - /*
> - * Put the buf item into the list of items attached to the
> - * buffer at the front.
> - */
> - if (bp->b_fspriv)
> - bip->bli_item.li_bio_list = bp->b_fspriv;
> - bp->b_fspriv = bip;
> + bp->b_log_item = bip;
> xfs_buf_hold(bp);
> return 0;
> }
> @@ -961,13 +954,14 @@ void
> xfs_buf_item_relse(
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> + struct xfs_log_item *lip = bp->b_li_list;
>
> trace_xfs_buf_item_relse(bp, _RET_IP_);
> ASSERT(!(bip->bli_item.li_flags & XFS_LI_IN_AIL));
>
> - bp->b_fspriv = bip->bli_item.li_bio_list;
> - if (bp->b_fspriv == NULL)
> + bp->b_log_item = NULL;
> + if (lip == NULL)
> bp->b_iodone = NULL;
>
> xfs_buf_rele(bp);
> @@ -980,9 +974,7 @@ xfs_buf_item_relse(
> * to be called when the buffer's I/O completes. If it is not set
> * already, set the buffer's b_iodone() routine to be
> * xfs_buf_iodone_callbacks() and link the log item into the list of
> - * items rooted at b_fsprivate. Items are always added as the second
> - * entry in the list if there is a first, because the buf item code
> - * assumes that the buf log item is first.
> + * items rooted at b_li_list.
> */
> void
> xfs_buf_attach_iodone(
> @@ -995,12 +987,12 @@ xfs_buf_attach_iodone(
> ASSERT(xfs_buf_islocked(bp));
>
> lip->li_cb = cb;
> - head_lip = bp->b_fspriv;
> + head_lip = bp->b_li_list;
> if (head_lip) {
> lip->li_bio_list = head_lip->li_bio_list;
> head_lip->li_bio_list = lip;
> } else {
> - bp->b_fspriv = lip;
> + bp->b_li_list = lip;
> }
>
> ASSERT(bp->b_iodone == NULL ||
> @@ -1024,10 +1016,17 @@ STATIC void
> xfs_buf_do_callbacks(
> struct xfs_buf *bp)
> {
> + struct xfs_buf_log_item *blip = bp->b_log_item;
> struct xfs_log_item *lip;
>
> - while ((lip = bp->b_fspriv) != NULL) {
> - bp->b_fspriv = lip->li_bio_list;
> + /* If there is a buf_log_item attached, run its callback */
> + if (blip) {
> + lip = &blip->bli_item;
> + lip->li_cb(bp, lip);
> + }
> +
> + while ((lip = bp->b_li_list) != NULL) {
> + bp->b_li_list = lip->li_bio_list;
> ASSERT(lip->li_cb != NULL);
> /*
> * Clear the next pointer so we don't have any
> @@ -1052,9 +1051,19 @@ STATIC void
> xfs_buf_do_callbacks_fail(
> struct xfs_buf *bp)
> {
> + struct xfs_log_item *lip = bp->b_li_list;
> struct xfs_log_item *next;
> - struct xfs_log_item *lip = bp->b_fspriv;
> - struct xfs_ail *ailp = lip->li_ailp;
> + struct xfs_ail *ailp;
> +
> + /*
> + * Buffer log item errors are handled directly by xfs_buf_item_push()
> + * and xfs_buf_iodone_callback_error, and they have no IO error
> + * callbacks. Check only for items in b_li_list.
> + */
> + if (lip == NULL)
> + return;
> + else
> + ailp = lip->li_ailp;
I still think you could do:
if (lip == NULL)
return;
ailp = lip->li_ailp;
spin_lock(...);
here, but rather than blather over formatting I'll just fix it on its
way in.
--D
>
> spin_lock(&ailp->xa_lock);
> for (; lip; lip = next) {
> @@ -1069,12 +1078,23 @@ static bool
> xfs_buf_iodone_callback_error(
> struct xfs_buf *bp)
> {
> - struct xfs_log_item *lip = bp->b_fspriv;
> - struct xfs_mount *mp = lip->li_mountp;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> + struct xfs_log_item *lip = bp->b_li_list;
> + struct xfs_mount *mp;
> static ulong lasttime;
> static xfs_buftarg_t *lasttarg;
> struct xfs_error_cfg *cfg;
>
> + /*
> + * The failed buffer might not have a buf_log_item attached or the
> + * log_item list might be empty. Get the mp from the available
> + * xfs_log_item
> + */
> + if (bip == NULL)
> + mp = lip->li_mountp;
> + else
> + mp = bip->bli_item.li_mountp;
> +
> /*
> * If we've already decided to shutdown the filesystem because of
> * I/O errors, there's no point in giving this a retry.
> @@ -1183,7 +1203,8 @@ xfs_buf_iodone_callbacks(
> bp->b_first_retry_time = 0;
>
> xfs_buf_do_callbacks(bp);
> - bp->b_fspriv = NULL;
> + bp->b_log_item = NULL;
> + bp->b_li_list = NULL;
> bp->b_iodone = NULL;
> xfs_buf_ioend(bp);
> }
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index c9e40d4fc939..8a3ff6343d91 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -2272,7 +2272,7 @@ xfs_ifree_cluster(
> * stale first, we will not attempt to lock them in the loop
> * below as the XFS_ISTALE flag will be set.
> */
> - lip = bp->b_fspriv;
> + lip = bp->b_li_list;
> while (lip) {
> if (lip->li_type == XFS_LI_INODE) {
> iip = (xfs_inode_log_item_t *)lip;
> @@ -3649,7 +3649,7 @@ xfs_iflush_int(
> /* generate the checksum. */
> xfs_dinode_calc_crc(mp, dip);
>
> - ASSERT(bp->b_fspriv != NULL);
> + ASSERT(bp->b_li_list != NULL);
> ASSERT(bp->b_iodone != NULL);
> return 0;
>
> diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
> index 6ee5c3bf19ad..993736032b4b 100644
> --- a/fs/xfs/xfs_inode_item.c
> +++ b/fs/xfs/xfs_inode_item.c
> @@ -722,7 +722,7 @@ xfs_iflush_done(
> * Scan the buffer IO completions for other inodes being completed and
> * attach them to the current inode log item.
> */
> - blip = bp->b_fspriv;
> + blip = bp->b_li_list;
> prev = NULL;
> while (blip != NULL) {
> if (blip->li_cb != xfs_iflush_done) {
> @@ -734,7 +734,7 @@ xfs_iflush_done(
> /* remove from list */
> next = blip->li_bio_list;
> if (!prev) {
> - bp->b_fspriv = next;
> + bp->b_li_list = next;
> } else {
> prev->li_bio_list = next;
> }
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index c1f266c34af7..20483b654ef1 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> @@ -1242,7 +1242,7 @@ xlog_space_left(
> static void
> xlog_iodone(xfs_buf_t *bp)
> {
> - struct xlog_in_core *iclog = bp->b_fspriv;
> + struct xlog_in_core *iclog = bp->b_log_item;
> struct xlog *l = iclog->ic_log;
> int aborted = 0;
>
> @@ -1773,7 +1773,7 @@ STATIC int
> xlog_bdstrat(
> struct xfs_buf *bp)
> {
> - struct xlog_in_core *iclog = bp->b_fspriv;
> + struct xlog_in_core *iclog = bp->b_log_item;
>
> xfs_buf_lock(bp);
> if (iclog->ic_state & XLOG_STATE_IOERROR) {
> @@ -1919,7 +1919,7 @@ xlog_sync(
> }
>
> bp->b_io_length = BTOBB(count);
> - bp->b_fspriv = iclog;
> + bp->b_log_item = iclog;
> bp->b_flags &= ~XBF_FLUSH;
> bp->b_flags |= (XBF_ASYNC | XBF_SYNCIO | XBF_WRITE | XBF_FUA);
>
> @@ -1958,7 +1958,7 @@ xlog_sync(
> XFS_BUF_SET_ADDR(bp, 0); /* logical 0 */
> xfs_buf_associate_memory(bp,
> (char *)&iclog->ic_header + count, split);
> - bp->b_fspriv = iclog;
> + bp->b_log_item = iclog;
> bp->b_flags &= ~XBF_FLUSH;
> bp->b_flags |= (XBF_ASYNC | XBF_SYNCIO | XBF_WRITE | XBF_FUA);
>
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index d864380b6575..00240c9ee72e 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -400,9 +400,9 @@ xlog_recover_iodone(
> * On v5 supers, a bli could be attached to update the metadata LSN.
> * Clean it up.
> */
> - if (bp->b_fspriv)
> + if (bp->b_log_item)
> xfs_buf_item_relse(bp);
> - ASSERT(bp->b_fspriv == NULL);
> + ASSERT(bp->b_log_item == NULL);
>
> bp->b_iodone = NULL;
> xfs_buf_ioend(bp);
> @@ -2630,7 +2630,7 @@ xlog_recover_validate_buf_type(
> ASSERT(!bp->b_iodone || bp->b_iodone == xlog_recover_iodone);
> bp->b_iodone = xlog_recover_iodone;
> xfs_buf_item_init(bp, mp);
> - bip = bp->b_fspriv;
> + bip = bp->b_log_item;
> bip->bli_item.li_lsn = current_lsn;
> }
> }
> diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c
> index 74563cd2970c..653ce379d36b 100644
> --- a/fs/xfs/xfs_trans_buf.c
> +++ b/fs/xfs/xfs_trans_buf.c
> @@ -82,12 +82,12 @@ _xfs_trans_bjoin(
> ASSERT(bp->b_transp == NULL);
>
> /*
> - * The xfs_buf_log_item pointer is stored in b_fsprivate. If
> + * The xfs_buf_log_item pointer is stored in b_log_item. If
> * it doesn't have one yet, then allocate one and initialize it.
> * The checks to see if one is there are in xfs_buf_item_init().
> */
> xfs_buf_item_init(bp, tp->t_mountp);
> - bip = bp->b_fspriv;
> + bip = bp->b_log_item;
> ASSERT(!(bip->bli_flags & XFS_BLI_STALE));
> ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL));
> ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED));
> @@ -118,7 +118,7 @@ xfs_trans_bjoin(
> struct xfs_buf *bp)
> {
> _xfs_trans_bjoin(tp, bp, 0);
> - trace_xfs_trans_bjoin(bp->b_fspriv);
> + trace_xfs_trans_bjoin(bp->b_log_item);
> }
>
> /*
> @@ -159,7 +159,7 @@ xfs_trans_get_buf_map(
> }
>
> ASSERT(bp->b_transp == tp);
> - bip = bp->b_fspriv;
> + bip = bp->b_log_item;
> ASSERT(bip != NULL);
> ASSERT(atomic_read(&bip->bli_refcount) > 0);
> bip->bli_recur++;
> @@ -175,7 +175,7 @@ xfs_trans_get_buf_map(
> ASSERT(!bp->b_error);
>
> _xfs_trans_bjoin(tp, bp, 1);
> - trace_xfs_trans_get_buf(bp->b_fspriv);
> + trace_xfs_trans_get_buf(bp->b_log_item);
> return bp;
> }
>
> @@ -211,7 +211,7 @@ xfs_trans_getsb(
> */
> bp = mp->m_sb_bp;
> if (bp->b_transp == tp) {
> - bip = bp->b_fspriv;
> + bip = bp->b_log_item;
> ASSERT(bip != NULL);
> ASSERT(atomic_read(&bip->bli_refcount) > 0);
> bip->bli_recur++;
> @@ -224,7 +224,7 @@ xfs_trans_getsb(
> return NULL;
>
> _xfs_trans_bjoin(tp, bp, 1);
> - trace_xfs_trans_getsb(bp->b_fspriv);
> + trace_xfs_trans_getsb(bp->b_log_item);
> return bp;
> }
>
> @@ -267,7 +267,7 @@ xfs_trans_read_buf_map(
> if (bp) {
> ASSERT(xfs_buf_islocked(bp));
> ASSERT(bp->b_transp == tp);
> - ASSERT(bp->b_fspriv != NULL);
> + ASSERT(bp->b_log_item != NULL);
> ASSERT(!bp->b_error);
> ASSERT(bp->b_flags & XBF_DONE);
>
> @@ -280,7 +280,7 @@ xfs_trans_read_buf_map(
> return -EIO;
> }
>
> - bip = bp->b_fspriv;
> + bip = bp->b_log_item;
> bip->bli_recur++;
>
> ASSERT(atomic_read(&bip->bli_refcount) > 0);
> @@ -330,7 +330,7 @@ xfs_trans_read_buf_map(
>
> if (tp) {
> _xfs_trans_bjoin(tp, bp, 1);
> - trace_xfs_trans_read_buf(bp->b_fspriv);
> + trace_xfs_trans_read_buf(bp->b_log_item);
> }
> *bpp = bp;
> return 0;
> @@ -370,7 +370,7 @@ xfs_trans_brelse(
> }
>
> ASSERT(bp->b_transp == tp);
> - bip = bp->b_fspriv;
> + bip = bp->b_log_item;
> ASSERT(bip->bli_item.li_type == XFS_LI_BUF);
> ASSERT(!(bip->bli_flags & XFS_BLI_STALE));
> ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL));
> @@ -462,7 +462,7 @@ xfs_trans_bhold(
> xfs_trans_t *tp,
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -483,7 +483,7 @@ xfs_trans_bhold_release(
> xfs_trans_t *tp,
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -504,7 +504,7 @@ xfs_trans_dirty_buf(
> struct xfs_trans *tp,
> struct xfs_buf *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -561,7 +561,7 @@ xfs_trans_log_buf(
> uint first,
> uint last)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(first <= last && last < BBTOB(bp->b_length));
> ASSERT(!(bip->bli_flags & XFS_BLI_ORDERED));
> @@ -607,7 +607,7 @@ xfs_trans_binval(
> xfs_trans_t *tp,
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
> int i;
>
> ASSERT(bp->b_transp == tp);
> @@ -662,7 +662,7 @@ xfs_trans_inode_buf(
> xfs_trans_t *tp,
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -686,7 +686,7 @@ xfs_trans_stale_inode_buf(
> xfs_trans_t *tp,
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -711,7 +711,7 @@ xfs_trans_inode_alloc_buf(
> xfs_trans_t *tp,
> xfs_buf_t *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -733,7 +733,7 @@ xfs_trans_ordered_buf(
> struct xfs_trans *tp,
> struct xfs_buf *bp)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(bp->b_transp == tp);
> ASSERT(bip != NULL);
> @@ -763,7 +763,7 @@ xfs_trans_buf_set_type(
> struct xfs_buf *bp,
> enum xfs_blft type)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> if (!tp)
> return;
> @@ -780,8 +780,8 @@ xfs_trans_buf_copy_type(
> struct xfs_buf *dst_bp,
> struct xfs_buf *src_bp)
> {
> - struct xfs_buf_log_item *sbip = src_bp->b_fspriv;
> - struct xfs_buf_log_item *dbip = dst_bp->b_fspriv;
> + struct xfs_buf_log_item *sbip = src_bp->b_log_item;
> + struct xfs_buf_log_item *dbip = dst_bp->b_log_item;
> enum xfs_blft type;
>
> type = xfs_blft_from_flags(&sbip->__bli_format);
> @@ -805,7 +805,7 @@ xfs_trans_dquot_buf(
> xfs_buf_t *bp,
> uint type)
> {
> - struct xfs_buf_log_item *bip = bp->b_fspriv;
> + struct xfs_buf_log_item *bip = bp->b_log_item;
>
> ASSERT(type == XFS_BLF_UDQUOT_BUF ||
> type == XFS_BLF_PDQUOT_BUF ||
> --
> 2.14.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-01-24 21:49 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-24 8:47 [PATCH V2 0/3] Buffer's log item refactoring Carlos Maiolino
2018-01-24 8:47 ` [PATCH 1/3] Get rid of xfs_buf_log_item_t typedef Carlos Maiolino
2018-01-24 16:13 ` Bill O'Donnell
2018-01-24 21:37 ` Darrick J. Wong
2018-01-24 8:47 ` [PATCH 2/3] Split buffer's b_fspriv field Carlos Maiolino
2018-01-24 16:14 ` Bill O'Donnell
2018-01-24 21:49 ` Darrick J. Wong [this message]
2018-01-25 8:40 ` Carlos Maiolino
2018-01-24 8:47 ` [PATCH 3/3] Use list_head infra-structure for buffer's log items list Carlos Maiolino
2018-01-24 17:52 ` Bill O'Donnell
2018-01-24 21:51 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180124214932.GC9068@magnolia \
--to=darrick.wong@oracle.com \
--cc=cmaiolino@redhat.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox