Stop calling qremove() outside qio.c
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Mar 2016 16:45:38 +0000 (12:45 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 31 Mar 2016 20:53:42 +0000 (16:53 -0400)
That function was meant to be called with the queue locked.  #mnt doesn't
lock it - nor does it or any other file have a mechanism to do so.  So it's
always a bad idea to call qremove.  It looks like #mnt wants qget().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/mnt.c
kern/include/ns.h
kern/src/ns/qio.c

index b9036cc..df3dd30 100644 (file)
@@ -969,7 +969,7 @@ int mntrpcread(struct mnt *m, struct mntrpc *r)
        l = &r->b;
        *l = NULL;
        do {
-               b = qremove(m->q);
+               b = qget(m->q);
                /* TODO: have better block helpers for this and the memmove below */
                b = linearizeblock(b);
                if (hlen > 0) {
index 26844be..ad2464b 100644 (file)
@@ -837,7 +837,6 @@ ssize_t qpass(struct queue *, struct block *);
 ssize_t qpassnolim(struct queue *, struct block *);
 void qputback(struct queue *, struct block *);
 long qread(struct queue *, void *, int);
-struct block *qremove(struct queue *);
 void qreopen(struct queue *);
 void qsetlimit(struct queue *, int);
 int qwindow(struct queue *);
index 86a7b95..6835c20 100644 (file)
@@ -1176,7 +1176,7 @@ void qaddlist(struct queue *q, struct block *b)
 /*
  *  called with q ilocked
  */
-struct block *qremove(struct queue *q)
+static struct block *qremove(struct queue *q)
 {
        struct block *b;