kernel/qio: maintain Block.next pointer in padblock()
This commit is contained in:
parent
8f782ac916
commit
5cbffd6e6b
1 changed files with 3 additions and 7 deletions
|
@ -78,16 +78,12 @@ padblock(Block *bp, int size)
|
||||||
int n;
|
int n;
|
||||||
Block *nbp;
|
Block *nbp;
|
||||||
|
|
||||||
if(bp->next != nil)
|
QDEBUG checkb(bp, "padblock 0");
|
||||||
panic("padblock %#p", getcallerpc(&bp));
|
|
||||||
|
|
||||||
QDEBUG checkb(bp, "padblock 1");
|
|
||||||
if(size >= 0){
|
if(size >= 0){
|
||||||
if(bp->rp - bp->base >= size){
|
if(bp->rp - bp->base >= size){
|
||||||
bp->rp -= size;
|
bp->rp -= size;
|
||||||
return bp;
|
return bp;
|
||||||
}
|
}
|
||||||
|
|
||||||
n = BLEN(bp);
|
n = BLEN(bp);
|
||||||
nbp = allocb(size+n);
|
nbp = allocb(size+n);
|
||||||
nbp->rp += size;
|
nbp->rp += size;
|
||||||
|
@ -99,12 +95,12 @@ padblock(Block *bp, int size)
|
||||||
size = -size;
|
size = -size;
|
||||||
if(bp->lim - bp->wp >= size)
|
if(bp->lim - bp->wp >= size)
|
||||||
return bp;
|
return bp;
|
||||||
|
|
||||||
n = BLEN(bp);
|
n = BLEN(bp);
|
||||||
nbp = allocb(size+n);
|
nbp = allocb(n+size);
|
||||||
memmove(nbp->wp, bp->rp, n);
|
memmove(nbp->wp, bp->rp, n);
|
||||||
nbp->wp += n;
|
nbp->wp += n;
|
||||||
}
|
}
|
||||||
|
nbp->next = bp->next;
|
||||||
freeb(bp);
|
freeb(bp);
|
||||||
padblockcnt++;
|
padblockcnt++;
|
||||||
QDEBUG checkb(nbp, "padblock 1");
|
QDEBUG checkb(nbp, "padblock 1");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue