@@ -32,6 +32,61 @@ static inline struct xfs_buf_log_item *BUF_ITEM(struct xfs_log_item *lip)
32
32
return container_of (lip , struct xfs_buf_log_item , bli_item );
33
33
}
34
34
35
+ static void
36
+ xfs_buf_item_get_format (
37
+ struct xfs_buf_log_item * bip ,
38
+ int count )
39
+ {
40
+ ASSERT (bip -> bli_formats == NULL );
41
+ bip -> bli_format_count = count ;
42
+
43
+ if (count == 1 ) {
44
+ bip -> bli_formats = & bip -> __bli_format ;
45
+ return ;
46
+ }
47
+
48
+ bip -> bli_formats = kzalloc (count * sizeof (struct xfs_buf_log_format ),
49
+ GFP_KERNEL | __GFP_NOFAIL );
50
+ }
51
+
52
+ static void
53
+ xfs_buf_item_free_format (
54
+ struct xfs_buf_log_item * bip )
55
+ {
56
+ if (bip -> bli_formats != & bip -> __bli_format ) {
57
+ kfree (bip -> bli_formats );
58
+ bip -> bli_formats = NULL ;
59
+ }
60
+ }
61
+
62
+ static void
63
+ xfs_buf_item_free (
64
+ struct xfs_buf_log_item * bip )
65
+ {
66
+ xfs_buf_item_free_format (bip );
67
+ kvfree (bip -> bli_item .li_lv_shadow );
68
+ kmem_cache_free (xfs_buf_item_cache , bip );
69
+ }
70
+
71
+ /*
72
+ * xfs_buf_item_relse() is called when the buf log item is no longer needed.
73
+ */
74
+ static void
75
+ xfs_buf_item_relse (
76
+ struct xfs_buf_log_item * bip )
77
+ {
78
+ struct xfs_buf * bp = bip -> bli_buf ;
79
+
80
+ trace_xfs_buf_item_relse (bp , _RET_IP_ );
81
+
82
+ ASSERT (!test_bit (XFS_LI_IN_AIL , & bip -> bli_item .li_flags ));
83
+ ASSERT (atomic_read (& bip -> bli_refcount ) == 0 );
84
+
85
+ bp -> b_log_item = NULL ;
86
+ xfs_buf_rele (bp );
87
+ xfs_buf_item_free (bip );
88
+ }
89
+
35
90
/* Is this log iovec plausibly large enough to contain the buffer log format? */
36
91
bool
37
92
xfs_buf_log_check_iovec (
@@ -468,7 +523,7 @@ xfs_buf_item_unpin(
468
523
ASSERT (list_empty (& bp -> b_li_list ));
469
524
} else {
470
525
xfs_trans_ail_delete (lip , SHUTDOWN_LOG_IO_ERROR );
471
- xfs_buf_item_relse (bp );
526
+ xfs_buf_item_relse (bip );
472
527
ASSERT (bp -> b_log_item == NULL );
473
528
}
474
529
xfs_buf_relse (bp );
@@ -578,7 +633,7 @@ xfs_buf_item_put(
578
633
*/
579
634
if (aborted )
580
635
xfs_trans_ail_delete (lip , 0 );
581
- xfs_buf_item_relse (bip -> bli_buf );
636
+ xfs_buf_item_relse (bip );
582
637
return true;
583
638
}
584
639
@@ -729,33 +784,6 @@ static const struct xfs_item_ops xfs_buf_item_ops = {
729
784
.iop_push = xfs_buf_item_push ,
730
785
};
731
786
732
- STATIC void
733
- xfs_buf_item_get_format (
734
- struct xfs_buf_log_item * bip ,
735
- int count )
736
- {
737
- ASSERT (bip -> bli_formats == NULL );
738
- bip -> bli_format_count = count ;
739
-
740
- if (count == 1 ) {
741
- bip -> bli_formats = & bip -> __bli_format ;
742
- return ;
743
- }
744
-
745
- bip -> bli_formats = kzalloc (count * sizeof (struct xfs_buf_log_format ),
746
- GFP_KERNEL | __GFP_NOFAIL );
747
- }
748
-
749
- STATIC void
750
- xfs_buf_item_free_format (
751
- struct xfs_buf_log_item * bip )
752
- {
753
- if (bip -> bli_formats != & bip -> __bli_format ) {
754
- kfree (bip -> bli_formats );
755
- bip -> bli_formats = NULL ;
756
- }
757
- }
758
-
759
787
/*
760
788
* Allocate a new buf log item to go with the given buffer.
761
789
* Set the buffer's b_log_item field to point to the new
@@ -976,34 +1004,6 @@ xfs_buf_item_dirty_format(
976
1004
return false;
977
1005
}
978
1006
979
- STATIC void
980
- xfs_buf_item_free (
981
- struct xfs_buf_log_item * bip )
982
- {
983
- xfs_buf_item_free_format (bip );
984
- kvfree (bip -> bli_item .li_lv_shadow );
985
- kmem_cache_free (xfs_buf_item_cache , bip );
986
- }
987
-
988
- /*
989
- * xfs_buf_item_relse() is called when the buf log item is no longer needed.
990
- */
991
- void
992
- xfs_buf_item_relse (
993
- struct xfs_buf * bp )
994
- {
995
- struct xfs_buf_log_item * bip = bp -> b_log_item ;
996
-
997
- trace_xfs_buf_item_relse (bp , _RET_IP_ );
998
- ASSERT (!test_bit (XFS_LI_IN_AIL , & bip -> bli_item .li_flags ));
999
-
1000
- if (atomic_read (& bip -> bli_refcount ))
1001
- return ;
1002
- bp -> b_log_item = NULL ;
1003
- xfs_buf_rele (bp );
1004
- xfs_buf_item_free (bip );
1005
- }
1006
-
1007
1007
void
1008
1008
xfs_buf_item_done (
1009
1009
struct xfs_buf * bp )
@@ -1023,5 +1023,5 @@ xfs_buf_item_done(
1023
1023
xfs_trans_ail_delete (& bp -> b_log_item -> bli_item ,
1024
1024
(bp -> b_flags & _XBF_LOGRECOVERY ) ? 0 :
1025
1025
SHUTDOWN_CORRUPT_INCORE );
1026
- xfs_buf_item_relse (bp );
1026
+ xfs_buf_item_relse (bp -> b_log_item );
1027
1027
}
0 commit comments