@@ -33,6 +33,29 @@ static u64 ufs_bitmap_search (struct super_block *, struct ufs_cg_private_info *
3333static unsigned char ufs_fragtable_8fpb [], ufs_fragtable_other [];
3434static void ufs_clusteracct (struct super_block * , struct ufs_cg_private_info * , unsigned , int );
3535
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+
3659/*
3760 * Free 'count' fragments from fragment number 'fragment'
3861 */
@@ -97,18 +120,7 @@ void ufs_free_fragments(struct inode *inode, u64 fragment, unsigned count)
97120 fs32_sub (sb , & ucg -> cg_cs .cs_nffree , uspi -> s_fpb );
98121 uspi -> cs_total .cs_nffree -= uspi -> s_fpb ;
99122 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 );
112124 }
113125
114126 ubh_mark_buffer_dirty (USPI_UBH (uspi ));
@@ -183,20 +195,7 @@ void ufs_free_blocks(struct inode *inode, u64 fragment, unsigned count)
183195 }
184196 ubh_setblock (uspi , ucpi , i );
185197 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 );
200199 }
201200
202201 ubh_mark_buffer_dirty (USPI_UBH (uspi ));
@@ -726,20 +725,7 @@ static u64 ufs_alloccg_block(struct inode *inode,
726725 if (!try_add_frags (inode , uspi -> s_fpb ))
727726 return 0 ;
728727 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 );
743729
744730 UFSD ("EXIT, result %llu\n" , (unsigned long long )result );
745731
0 commit comments