retain use of bcopy as savings of playing with buffers seems minimal;
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Tue, 8 Jan 1985 06:31:40 +0000 (22:31 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Tue, 8 Jan 1985 06:31:40 +0000 (22:31 -0800)
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

usr/src/sys/ufs/ffs/ffs_alloc.c
usr/src/sys/ufs/lfs/lfs_alloc.c

index b015299..139417c 100644 (file)
@@ -1,4 +1,4 @@
-/*     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"
@@ -153,20 +153,15 @@ realloccg(ip, bprev, bpref, osize, nsize)
                        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);
index 7bb3611..077c7ec 100644 (file)
@@ -1,4 +1,4 @@
-/*     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"
@@ -153,20 +153,15 @@ realloccg(ip, bprev, bpref, osize, nsize)
                        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);