Cleanups to UFS/FFS ffs_checkblk().

Rename to ffs_checkfreeblk() to better describe that it is checking
to find out if a block or fragment is free. Clarify its implementation.

No functional change intended.

MFC-after:    1 week
Sponsored-by: The FreeBSD Foundation
This commit is contained in:
Kirk McKusick 2023-08-10 22:38:56 -07:00
parent e835ee68e1
commit 677023529d

View file

@ -114,7 +114,7 @@ static void ffs_blkfree_cg(struct ufsmount *, struct fs *,
struct vnode *, ufs2_daddr_t, long, ino_t,
struct workhead *);
#ifdef INVARIANTS
static int ffs_checkblk(struct inode *, ufs2_daddr_t, long);
static int ffs_checkfreeblk(struct inode *, ufs2_daddr_t, long);
#endif
static ufs2_daddr_t ffs_clusteralloc(struct inode *, uint64_t, ufs2_daddr_t,
int);
@ -600,7 +600,7 @@ ffs_reallocblks_ufs1(
end_lbn = start_lbn + len - 1;
#ifdef INVARIANTS
for (i = 0; i < len; i++)
if (!ffs_checkblk(ip,
if (!ffs_checkfreeblk(ip,
dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize))
panic("ffs_reallocblks: unallocated block 1");
for (i = 1; i < len; i++)
@ -721,7 +721,7 @@ ffs_reallocblks_ufs1(
soff = -i;
}
#ifdef INVARIANTS
if (!ffs_checkblk(ip,
if (!ffs_checkfreeblk(ip,
dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize))
panic("ffs_reallocblks: unallocated block 2");
if (dbtofsb(fs, buflist->bs_children[i]->b_blkno) != *bap)
@ -804,7 +804,8 @@ ffs_reallocblks_ufs1(
NOTRIM_KEY : SINGLETON_KEY);
bp->b_blkno = fsbtodb(fs, blkno);
#ifdef INVARIANTS
if (!ffs_checkblk(ip, dbtofsb(fs, bp->b_blkno), fs->fs_bsize))
if (!ffs_checkfreeblk(ip, dbtofsb(fs, bp->b_blkno),
fs->fs_bsize))
panic("ffs_reallocblks: unallocated block 3");
#endif
#ifdef DIAGNOSTIC
@ -865,7 +866,7 @@ ffs_reallocblks_ufs2(
end_lbn = start_lbn + len - 1;
#ifdef INVARIANTS
for (i = 0; i < len; i++)
if (!ffs_checkblk(ip,
if (!ffs_checkfreeblk(ip,
dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize))
panic("ffs_reallocblks: unallocated block 1");
for (i = 1; i < len; i++)
@ -985,7 +986,7 @@ ffs_reallocblks_ufs2(
soff = -i;
}
#ifdef INVARIANTS
if (!ffs_checkblk(ip,
if (!ffs_checkfreeblk(ip,
dbtofsb(fs, buflist->bs_children[i]->b_blkno), fs->fs_bsize))
panic("ffs_reallocblks: unallocated block 2");
if (dbtofsb(fs, buflist->bs_children[i]->b_blkno) != *bap)
@ -1068,7 +1069,8 @@ ffs_reallocblks_ufs2(
NOTRIM_KEY : SINGLETON_KEY);
bp->b_blkno = fsbtodb(fs, blkno);
#ifdef INVARIANTS
if (!ffs_checkblk(ip, dbtofsb(fs, bp->b_blkno), fs->fs_bsize))
if (!ffs_checkfreeblk(ip, dbtofsb(fs, bp->b_blkno),
fs->fs_bsize))
panic("ffs_reallocblks: unallocated block 3");
#endif
#ifdef DIAGNOSTIC
@ -2285,7 +2287,7 @@ ffs_blkfree_cg(struct ufsmount *ump,
printf("dev=%s, bno = %jd, bsize = %ld, size = %ld, fs = %s\n",
devtoname(dev), (intmax_t)bno, (long)fs->fs_bsize,
size, fs->fs_fsmnt);
panic("ffs_blkfree_cg: bad size");
panic("ffs_blkfree_cg: invalid size");
}
#endif
if ((uint64_t)bno >= fs->fs_size) {
@ -2748,11 +2750,11 @@ ffs_blkfree(struct ufsmount *ump,
#ifdef INVARIANTS
/*
* Verify allocation of a block or fragment. Returns true if block or
* fragment is allocated, false if it is free.
* Verify allocation of a block or fragment.
* Return 1 if block or fragment is free.
*/
static int
ffs_checkblk(struct inode *ip,
ffs_checkfreeblk(struct inode *ip,
ufs2_daddr_t bno,
long size)
{
@ -2760,34 +2762,34 @@ ffs_checkblk(struct inode *ip,
struct cg *cgp;
struct buf *bp;
ufs1_daddr_t cgbno;
int i, error, frags, free;
int i, error, frags, blkalloced;
uint8_t *blksfree;
fs = ITOFS(ip);
if ((uint64_t)size > fs->fs_bsize || fragoff(fs, size) != 0) {
printf("bsize = %ld, size = %ld, fs = %s\n",
(long)fs->fs_bsize, size, fs->fs_fsmnt);
panic("ffs_checkblk: bad size");
panic("ffs_checkfreeblk: bad size");
}
if ((uint64_t)bno >= fs->fs_size)
panic("ffs_checkblk: bad block %jd", (intmax_t)bno);
panic("ffs_checkfreeblk: too big block %jd", (intmax_t)bno);
error = ffs_getcg(fs, ITODEVVP(ip), dtog(fs, bno), 0, &bp, &cgp);
if (error)
panic("ffs_checkblk: cylinder group read failed");
panic("ffs_checkfreeblk: cylinder group read failed");
blksfree = cg_blksfree(cgp);
cgbno = dtogd(fs, bno);
if (size == fs->fs_bsize) {
free = ffs_isblock(fs, blksfree, fragstoblks(fs, cgbno));
blkalloced = ffs_isblock(fs, blksfree, fragstoblks(fs, cgbno));
} else {
frags = numfrags(fs, size);
for (free = 0, i = 0; i < frags; i++)
for (blkalloced = 0, i = 0; i < frags; i++)
if (isset(blksfree, cgbno + i))
free++;
if (free != 0 && free != frags)
panic("ffs_checkblk: partially free fragment");
blkalloced++;
if (blkalloced != 0 && blkalloced != frags)
panic("ffs_checkfreeblk: partially free fragment");
}
brelse(bp);
return (!free);
return (blkalloced == 0);
}
#endif /* INVARIANTS */