Only linearizeblock on #M qremoves
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Jul 2014 03:39:50 +0000 (20:39 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Jul 2014 03:39:50 +0000 (20:39 -0700)
So we don't linearize blocks any time someone calls qremove.  The other
callers of qremove look okay.  It's up to the callers to know what to do
with the blocks.  For instance, bl2mem() knows how to deal with
extra_data.

Also, the other mount block op right above the change is now safer,
since pullupqueue() makes sure the full header is in place.

kern/drivers/dev/mnt.c
kern/src/ns/qio.c

index 14bea93..825ffc5 100644 (file)
@@ -944,6 +944,8 @@ int mntrpcread(struct mnt *m, struct mntrpc *r)
        *l = NULL;
        do {
                b = qremove(m->q);
+               /* TODO: have better block helpers for this and the memmove below */
+               b = linearizeblock(b);
                if (hlen > 0) {
                        b->rp += hlen;
                        len -= hlen;
index cc12165..eef8574 100644 (file)
@@ -1191,7 +1191,6 @@ struct block *qremove(struct queue *q)
        q->dlen -= BLEN(b);
        q->len -= BALLOC(b);
        QDEBUG checkb(b, "qremove");
-       b = linearizeblock(b);
        return b;
 }