- obp = bread(ip->i_dev, fsbtodb(fs, bprev), osize);
- if (obp->b_flags & B_ERROR) {
- brelse(obp);
- return (NULL);
- }
- bn = fsbtodb(fs, bno);
- bp = getblk(ip->i_dev, bn, nsize);
- bcopy(obp->b_un.b_addr, bp->b_un.b_addr, (u_int)osize);
- count = howmany(osize, DEV_BSIZE);
- s = splimp();
- for (i = 0; i < count; i += CLBYTES / DEV_BSIZE)
- if (mfind(ip->i_dev, bn + i))
- munhash(ip->i_dev, bn + i);
- splx(s);
- 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);
- free(ip, bprev, (off_t)osize);
+#ifdef SECSIZE
+ obp = bread(ip->i_dev, fsbtodb(fs, bprev), osize,
+ fs->fs_dbsize);
+#else SECSIZE
+ bp->b_blkno = bn = fsbtodb(fs, bno);
+ 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
+ blkfree(ip, bprev, (off_t)osize);