Skip to content

Commit 6b103cc

Browse files
author
Al Viro
committed
ufs: take the handling of free block counters into a helper
There are 3 places where those counters (many and varied...) are adjusted - when we are freeing fragments and get an entire block freed, when we are freeing blocks and (in opposite direction) when we are grabbing a block. The logics is identical (modulo the sign of adjustment) in all three; better take it into a helper - less duplication and less clutter in the callers that way. Signed-off-by: Al Viro <[email protected]>
1 parent 64f30e8 commit 6b103cc

File tree

1 file changed

+26
-40
lines changed

1 file changed

+26
-40
lines changed

fs/ufs/balloc.c

Lines changed: 26 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,29 @@ static u64 ufs_bitmap_search (struct super_block *, struct ufs_cg_private_info *
3333
static unsigned char ufs_fragtable_8fpb[], ufs_fragtable_other[];
3434
static 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

Comments
 (0)