mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-03 23:28:58 +00:00
Bug fixes for fsck_ffs(8).
Sponsored by: Netflix
(cherry picked from commit 18746531a8
)
This commit is contained in:
parent
146ba7a1d6
commit
b180a0773b
|
@ -319,8 +319,10 @@ getdatablk(ufs2_daddr_t blkno, long size, int type)
|
|||
* Skip check for inodes because chkrange() considers
|
||||
* metadata areas invalid to write data.
|
||||
*/
|
||||
if (type != BT_INODES && chkrange(blkno, size / sblock.fs_fsize))
|
||||
if (type != BT_INODES && chkrange(blkno, size / sblock.fs_fsize)) {
|
||||
failedbuf.b_refcnt++;
|
||||
return (&failedbuf);
|
||||
}
|
||||
bhdp = &bufhashhd[HASH(blkno)];
|
||||
LIST_FOREACH(bp, bhdp, b_hash)
|
||||
if (bp->b_bno == fsbtodb(&sblock, blkno)) {
|
||||
|
|
|
@ -747,6 +747,7 @@ snapremove(ino_t inum)
|
|||
bzero(&snaplist[i - 1], sizeof(struct inode));
|
||||
snapcnt--;
|
||||
}
|
||||
memset(&idesc, 0, sizeof(struct inodesc));
|
||||
idesc.id_type = SNAP;
|
||||
idesc.id_func = snapclean;
|
||||
idesc.id_number = inum;
|
||||
|
@ -767,14 +768,15 @@ snapclean(struct inodesc *idesc)
|
|||
if (blkno == 0)
|
||||
return (KEEPON);
|
||||
|
||||
bp = idesc->id_bp;
|
||||
dp = idesc->id_dp;
|
||||
if (blkno == BLK_NOCOPY || blkno == BLK_SNAP) {
|
||||
if (idesc->id_lbn < UFS_NDADDR)
|
||||
if (idesc->id_lbn < UFS_NDADDR) {
|
||||
DIP_SET(dp, di_db[idesc->id_lbn], 0);
|
||||
else
|
||||
} else {
|
||||
bp = idesc->id_bp;
|
||||
IBLK_SET(bp, bp->b_index, 0);
|
||||
dirty(bp);
|
||||
dirty(bp);
|
||||
}
|
||||
}
|
||||
return (KEEPON);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue