summaryrefslogtreecommitdiff
path: root/sys/src/9
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-11-08 21:03:08 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2016-11-08 21:03:08 +0100
commit5cbffd6e6b4430724532beb5bb130ea701cd1a70 (patch)
tree590f62bc7b561555c4c4a1818be31d3ea234b9ed /sys/src/9
parent8f782ac916c3dd480e131c70b9c71e3479acdabd (diff)
kernel/qio: maintain Block.next pointer in padblock()
Diffstat (limited to 'sys/src/9')
-rw-r--r--sys/src/9/port/qio.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/sys/src/9/port/qio.c b/sys/src/9/port/qio.c
index ea2f02dd0..bd026e5a9 100644
--- a/sys/src/9/port/qio.c
+++ b/sys/src/9/port/qio.c
@@ -78,16 +78,12 @@ padblock(Block *bp, int size)
int n;
Block *nbp;
- if(bp->next != nil)
- panic("padblock %#p", getcallerpc(&bp));
-
- QDEBUG checkb(bp, "padblock 1");
+ QDEBUG checkb(bp, "padblock 0");
if(size >= 0){
if(bp->rp - bp->base >= size){
bp->rp -= size;
return bp;
}
-
n = BLEN(bp);
nbp = allocb(size+n);
nbp->rp += size;
@@ -99,12 +95,12 @@ padblock(Block *bp, int size)
size = -size;
if(bp->lim - bp->wp >= size)
return bp;
-
n = BLEN(bp);
- nbp = allocb(size+n);
+ nbp = allocb(n+size);
memmove(nbp->wp, bp->rp, n);
nbp->wp += n;
}
+ nbp->next = bp->next;
freeb(bp);
padblockcnt++;
QDEBUG checkb(nbp, "padblock 1");