clear B_DELWRI flag on old buffer as data is no longer needed
SCCS-vsn: sys/ufs/ffs/ffs_alloc.c 6.8
SCCS-vsn: sys/ufs/lfs/lfs_alloc.c 6.8
-/* ffs_alloc.c 6.7 84/12/10 */
+/* ffs_alloc.c 6.8 85/01/07 */
#include "param.h"
#include "systm.h"
#include "param.h"
#include "systm.h"
brelse(obp);
return (NULL);
}
brelse(obp);
return (NULL);
}
- bp = getblk(ip->i_dev, fsbtodb(fs, bno), osize);
- swapbuf(obp, bp);
- obp->b_flags &= ~B_DELWRI;
- obp->b_flags |= B_INVAL;
+ bp = getblk(ip->i_dev, fsbtodb(fs, bno), nsize);
+ bcopy(obp->b_un.b_addr, bp->b_un.b_addr, (u_int)osize);
+ 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);
brelse(obp);
free(ip, bprev, (off_t)osize);
- while (brealloc(bp, nsize) == 0) {
- bp = bread(ip->i_dev, fsbtodb(fs, bno), osize);
- if (bp->b_flags & B_ERROR) {
- brelse(bp);
- return (NULL);
- }
- }
- bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
ip->i_blocks += btodb(nsize - osize);
ip->i_flag |= IUPD|ICHG;
return (bp);
ip->i_blocks += btodb(nsize - osize);
ip->i_flag |= IUPD|ICHG;
return (bp);
-/* lfs_alloc.c 6.7 84/12/10 */
+/* lfs_alloc.c 6.8 85/01/07 */
#include "param.h"
#include "systm.h"
#include "param.h"
#include "systm.h"
brelse(obp);
return (NULL);
}
brelse(obp);
return (NULL);
}
- bp = getblk(ip->i_dev, fsbtodb(fs, bno), osize);
- swapbuf(obp, bp);
- obp->b_flags &= ~B_DELWRI;
- obp->b_flags |= B_INVAL;
+ bp = getblk(ip->i_dev, fsbtodb(fs, bno), nsize);
+ bcopy(obp->b_un.b_addr, bp->b_un.b_addr, (u_int)osize);
+ 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);
brelse(obp);
free(ip, bprev, (off_t)osize);
- while (brealloc(bp, nsize) == 0) {
- bp = bread(ip->i_dev, fsbtodb(fs, bno), osize);
- if (bp->b_flags & B_ERROR) {
- brelse(bp);
- return (NULL);
- }
- }
- bzero(bp->b_un.b_addr + osize, (unsigned)nsize - osize);
ip->i_blocks += btodb(nsize - osize);
ip->i_flag |= IUPD|ICHG;
return (bp);
ip->i_blocks += btodb(nsize - osize);
ip->i_flag |= IUPD|ICHG;
return (bp);