-#ifdef SECSIZE
- obp = bread(ip->i_dev, fsbtodb(fs, bprev), osize,
- fs->fs_dbsize);
-#else SECSIZE
- obp = bread(ip->i_dev, fsbtodb(fs, bprev), osize);
-#endif SECSIZE
- if (obp->b_flags & B_ERROR) {
- brelse(obp);
- return (NULL);
- }
- bn = fsbtodb(fs, bno);
-#ifdef SECSIZE
- bp = getblk(ip->i_dev, bn, nsize, fs->fs_dbsize);
-#else SECSIZE
- bp = getblk(ip->i_dev, bn, nsize);
-#endif SECSIZE
- bcopy(obp->b_un.b_addr, bp->b_un.b_addr, (u_int)osize);
- count = howmany(osize, CLBYTES);
- for (i = 0; i < count; i++)
-#ifdef SECSIZE
- munhash(ip->i_dev, bn + i * CLBYTES / fs->fs_dbsize);
-#else SECSIZE
- munhash(ip->i_dev, bn + i * CLBYTES / DEV_BSIZE);
-#endif SECSIZE
- bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
- if (obp->b_flags & B_DELWRI) {
- obp->b_flags &= ~B_DELWRI;
- u.u_ru.ru_oublock--; /* delete charge */
- }
- brelse(obp);
- blkfree(ip, bprev, (off_t)osize);
+ bp->b_blkno = fsbtodb(fs, bno);
+ (void) vnode_pager_uncache(ITOV(ip));
+ ffs_blkfree(ip, bprev, (long)osize);