@@ -39,6 +39,7 @@ STATIC void
3939xfs_bui_item_free (
4040 struct xfs_bui_log_item * buip )
4141{
42+ kmem_free (buip -> bui_item .li_lv_shadow );
4243 kmem_cache_free (xfs_bui_cache , buip );
4344}
4445
@@ -54,10 +55,11 @@ xfs_bui_release(
5455 struct xfs_bui_log_item * buip )
5556{
5657 ASSERT (atomic_read (& buip -> bui_refcount ) > 0 );
57- if (atomic_dec_and_test (& buip -> bui_refcount )) {
58- xfs_trans_ail_delete (& buip -> bui_item , SHUTDOWN_LOG_IO_ERROR );
59- xfs_bui_item_free (buip );
60- }
58+ if (!atomic_dec_and_test (& buip -> bui_refcount ))
59+ return ;
60+
61+ xfs_trans_ail_delete (& buip -> bui_item , 0 );
62+ xfs_bui_item_free (buip );
6163}
6264
6365
@@ -198,14 +200,24 @@ xfs_bud_item_release(
198200 struct xfs_bud_log_item * budp = BUD_ITEM (lip );
199201
200202 xfs_bui_release (budp -> bud_buip );
203+ kmem_free (budp -> bud_item .li_lv_shadow );
201204 kmem_cache_free (xfs_bud_cache , budp );
202205}
203206
207+ static struct xfs_log_item *
208+ xfs_bud_item_intent (
209+ struct xfs_log_item * lip )
210+ {
211+ return & BUD_ITEM (lip )-> bud_buip -> bui_item ;
212+ }
213+
204214static const struct xfs_item_ops xfs_bud_item_ops = {
205- .flags = XFS_ITEM_RELEASE_WHEN_COMMITTED ,
215+ .flags = XFS_ITEM_RELEASE_WHEN_COMMITTED |
216+ XFS_ITEM_INTENT_DONE ,
206217 .iop_size = xfs_bud_item_size ,
207218 .iop_format = xfs_bud_item_format ,
208219 .iop_release = xfs_bud_item_release ,
220+ .iop_intent = xfs_bud_item_intent ,
209221};
210222
211223static struct xfs_bud_log_item *
@@ -254,7 +266,7 @@ xfs_trans_log_finish_bmap_update(
254266 * 1.) releases the BUI and frees the BUD
255267 * 2.) shuts down the filesystem
256268 */
257- tp -> t_flags |= XFS_TRANS_DIRTY ;
269+ tp -> t_flags |= XFS_TRANS_DIRTY | XFS_TRANS_HAS_INTENT_DONE ;
258270 set_bit (XFS_LI_DIRTY , & budp -> bud_item .li_flags );
259271
260272 return error ;
@@ -586,6 +598,7 @@ xfs_bui_item_relog(
586598}
587599
588600static const struct xfs_item_ops xfs_bui_item_ops = {
601+ .flags = XFS_ITEM_INTENT ,
589602 .iop_size = xfs_bui_item_size ,
590603 .iop_format = xfs_bui_item_format ,
591604 .iop_unpin = xfs_bui_item_unpin ,
0 commit comments