Message ID | 20180628163636.52564-23-bfoster@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Thu, Jun 28, 2018 at 12:36:34PM -0400, Brian Foster wrote: > Use ->t_dfops of the transaction from the caller. Reset it before we > return to avoid leaks of local stack memory. Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de> -- 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
On Thu, Jun 28, 2018 at 12:36:34PM -0400, Brian Foster wrote: > Use ->t_dfops of the transaction from the caller. Reset it before we > return to avoid leaks of local stack memory. > > Signed-off-by: Brian Foster <bfoster@redhat.com> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> --D > --- > fs/xfs/xfs_reflink.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c > index 7cfe74d1514e..75a99bb020e4 100644 > --- a/fs/xfs/xfs_reflink.c > +++ b/fs/xfs/xfs_reflink.c > @@ -553,6 +553,7 @@ xfs_reflink_cancel_cow_blocks( > struct xfs_iext_cursor icur; > xfs_fsblock_t firstfsb; > struct xfs_defer_ops dfops; > + struct xfs_defer_ops *odfops = (*tpp)->t_dfops; > int error = 0; > > if (!xfs_is_reflink_inode(ip)) > @@ -580,23 +581,24 @@ xfs_reflink_cancel_cow_blocks( > break; > } else if (del.br_state == XFS_EXT_UNWRITTEN || cancel_real) { > xfs_defer_init(&dfops, &firstfsb); > + (*tpp)->t_dfops = &dfops; > > /* Free the CoW orphan record. */ > error = xfs_refcount_free_cow_extent(ip->i_mount, > - &dfops, del.br_startblock, > + (*tpp)->t_dfops, del.br_startblock, > del.br_blockcount); > if (error) > break; > > - xfs_bmap_add_free(ip->i_mount, &dfops, > + xfs_bmap_add_free(ip->i_mount, (*tpp)->t_dfops, > del.br_startblock, del.br_blockcount, > NULL); > > /* Roll the transaction */ > - xfs_defer_ijoin(&dfops, ip); > - error = xfs_defer_finish(tpp, &dfops); > + xfs_defer_ijoin((*tpp)->t_dfops, ip); > + error = xfs_defer_finish(tpp, (*tpp)->t_dfops); > if (error) { > - xfs_defer_cancel(&dfops); > + xfs_defer_cancel((*tpp)->t_dfops); > break; > } > > @@ -621,7 +623,7 @@ xfs_reflink_cancel_cow_blocks( > /* clear tag if cow fork is emptied */ > if (!ifp->if_bytes) > xfs_inode_clear_cowblocks_tag(ip); > - > + (*tpp)->t_dfops = odfops; > return error; > } > > -- > 2.17.1 > > -- > 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 -- 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
diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 7cfe74d1514e..75a99bb020e4 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -553,6 +553,7 @@ xfs_reflink_cancel_cow_blocks( struct xfs_iext_cursor icur; xfs_fsblock_t firstfsb; struct xfs_defer_ops dfops; + struct xfs_defer_ops *odfops = (*tpp)->t_dfops; int error = 0; if (!xfs_is_reflink_inode(ip)) @@ -580,23 +581,24 @@ xfs_reflink_cancel_cow_blocks( break; } else if (del.br_state == XFS_EXT_UNWRITTEN || cancel_real) { xfs_defer_init(&dfops, &firstfsb); + (*tpp)->t_dfops = &dfops; /* Free the CoW orphan record. */ error = xfs_refcount_free_cow_extent(ip->i_mount, - &dfops, del.br_startblock, + (*tpp)->t_dfops, del.br_startblock, del.br_blockcount); if (error) break; - xfs_bmap_add_free(ip->i_mount, &dfops, + xfs_bmap_add_free(ip->i_mount, (*tpp)->t_dfops, del.br_startblock, del.br_blockcount, NULL); /* Roll the transaction */ - xfs_defer_ijoin(&dfops, ip); - error = xfs_defer_finish(tpp, &dfops); + xfs_defer_ijoin((*tpp)->t_dfops, ip); + error = xfs_defer_finish(tpp, (*tpp)->t_dfops); if (error) { - xfs_defer_cancel(&dfops); + xfs_defer_cancel((*tpp)->t_dfops); break; } @@ -621,7 +623,7 @@ xfs_reflink_cancel_cow_blocks( /* clear tag if cow fork is emptied */ if (!ifp->if_bytes) xfs_inode_clear_cowblocks_tag(ip); - + (*tpp)->t_dfops = odfops; return error; }
Use ->t_dfops of the transaction from the caller. Reset it before we return to avoid leaks of local stack memory. Signed-off-by: Brian Foster <bfoster@redhat.com> --- fs/xfs/xfs_reflink.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)