@@ -33,6 +33,29 @@ static u64 ufs_bitmap_search (struct super_block *, struct ufs_cg_private_info *
33
33
static unsigned char ufs_fragtable_8fpb [], ufs_fragtable_other [];
34
34
static void ufs_clusteracct (struct super_block * , struct ufs_cg_private_info * , unsigned , int );
35
35
36
+ static void adjust_free_blocks (struct super_block * sb ,
37
+ struct ufs_cylinder_group * ucg ,
38
+ struct ufs_cg_private_info * ucpi ,
39
+ unsigned fragment , int delta )
40
+ {
41
+ struct ufs_sb_private_info * uspi = UFS_SB (sb )-> s_uspi ;
42
+
43
+ if ((UFS_SB (sb )-> s_flags & UFS_CG_MASK ) == UFS_CG_44BSD )
44
+ ufs_clusteracct (sb , ucpi , fragment , delta );
45
+
46
+ fs32_add (sb , & ucg -> cg_cs .cs_nbfree , delta );
47
+ uspi -> cs_total .cs_nbfree += delta ;
48
+ fs32_add (sb , & UFS_SB (sb )-> fs_cs (ucpi -> c_cgx ).cs_nbfree , delta );
49
+
50
+ if (uspi -> fs_magic != UFS2_MAGIC ) {
51
+ unsigned cylno = ufs_cbtocylno (fragment );
52
+
53
+ fs16_add (sb , & ubh_cg_blks (ucpi , cylno ,
54
+ ufs_cbtorpos (fragment )), delta );
55
+ fs32_add (sb , & ubh_cg_blktot (ucpi , cylno ), delta );
56
+ }
57
+ }
58
+
36
59
/*
37
60
* Free 'count' fragments from fragment number 'fragment'
38
61
*/
@@ -97,18 +120,7 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
97
120
fs32_sub (sb , & ucg -> cg_cs .cs_nffree , uspi -> s_fpb );
98
121
uspi -> cs_total .cs_nffree -= uspi -> s_fpb ;
99
122
fs32_sub (sb , & UFS_SB (sb )-> fs_cs (cgno ).cs_nffree , uspi -> s_fpb );
100
- if ((UFS_SB (sb )-> s_flags & UFS_CG_MASK ) == UFS_CG_44BSD )
101
- ufs_clusteracct (sb , ucpi , bbase , 1 );
102
- fs32_add (sb , & ucg -> cg_cs .cs_nbfree , 1 );
103
- uspi -> cs_total .cs_nbfree ++ ;
104
- fs32_add (sb , & UFS_SB (sb )-> fs_cs (cgno ).cs_nbfree , 1 );
105
- if (uspi -> fs_magic != UFS2_MAGIC ) {
106
- unsigned cylno = ufs_cbtocylno (bbase );
107
-
108
- fs16_add (sb , & ubh_cg_blks (ucpi , cylno ,
109
- ufs_cbtorpos (bbase )), 1 );
110
- fs32_add (sb , & ubh_cg_blktot (ucpi , cylno ), 1 );
111
- }
123
+ adjust_free_blocks (sb , ucg , ucpi , bbase , 1 );
112
124
}
113
125
114
126
ubh_mark_buffer_dirty (USPI_UBH (uspi ));
@@ -183,20 +195,7 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
183
195
}
184
196
ubh_setblock (uspi , ucpi , i );
185
197
inode_sub_bytes (inode , uspi -> s_fpb << uspi -> s_fshift );
186
- if ((UFS_SB (sb )-> s_flags & UFS_CG_MASK ) == UFS_CG_44BSD )
187
- ufs_clusteracct (sb , ucpi , i , 1 );
188
-
189
- fs32_add (sb , & ucg -> cg_cs .cs_nbfree , 1 );
190
- uspi -> cs_total .cs_nbfree ++ ;
191
- fs32_add (sb , & UFS_SB (sb )-> fs_cs (cgno ).cs_nbfree , 1 );
192
-
193
- if (uspi -> fs_magic != UFS2_MAGIC ) {
194
- unsigned cylno = ufs_cbtocylno (i );
195
-
196
- fs16_add (sb , & ubh_cg_blks (ucpi , cylno ,
197
- ufs_cbtorpos (i )), 1 );
198
- fs32_add (sb , & ubh_cg_blktot (ucpi , cylno ), 1 );
199
- }
198
+ adjust_free_blocks (sb , ucg , ucpi , i , 1 );
200
199
}
201
200
202
201
ubh_mark_buffer_dirty (USPI_UBH (uspi ));
@@ -726,20 +725,7 @@ static u64 ufs_alloccg_block(struct inode *inode,
726
725
if (!try_add_frags (inode , uspi -> s_fpb ))
727
726
return 0 ;
728
727
ubh_clrblock (uspi , ucpi , result );
729
- if ((UFS_SB (sb )-> s_flags & UFS_CG_MASK ) == UFS_CG_44BSD )
730
- ufs_clusteracct (sb , ucpi , result , -1 );
731
-
732
- fs32_sub (sb , & ucg -> cg_cs .cs_nbfree , 1 );
733
- uspi -> cs_total .cs_nbfree -- ;
734
- fs32_sub (sb , & UFS_SB (sb )-> fs_cs (ucpi -> c_cgx ).cs_nbfree , 1 );
735
-
736
- if (uspi -> fs_magic != UFS2_MAGIC ) {
737
- unsigned cylno = ufs_cbtocylno ((unsigned )result );
738
-
739
- fs16_sub (sb , & ubh_cg_blks (ucpi , cylno ,
740
- ufs_cbtorpos ((unsigned )result )), 1 );
741
- fs32_sub (sb , & ubh_cg_blktot (ucpi , cylno ), 1 );
742
- }
728
+ adjust_free_blocks (sb , ucg , ucpi , result , -1 );
743
729
744
730
UFSD ("EXIT, result %llu\n" , (unsigned long long )result );
745
731
0 commit comments