kernel/qio: maintain Block.next pointer in padblock()

This commit is contained in:
cinap_lenrek 2016-11-08 21:03:08 +01:00
parent 8f782ac916
commit 5cbffd6e6b

View file

@ -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");