Preemptively fixes walk malloc errors
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 18 Jan 2014 02:01:59 +0000 (18:01 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 18 Jan 2014 02:01:59 +0000 (18:01 -0800)
This was painful to diagnose back on the old 9ns branch.  Not sure how
this worked in the old plan9 days.

kern/drivers/dev/dev.c
kern/drivers/dev/mnt.c

index b24386c..2e9c28c 100644 (file)
@@ -152,7 +152,8 @@ devwalk(struct chan *c,
                isdir(c);
 
        alloc = 0;
-       wq = kzmalloc(sizeof(struct walkqid) + (nname - 1) * sizeof(struct qid), 0);
+       wq = kzmalloc(sizeof(struct walkqid) + nname * sizeof(struct qid),
+                     KMALLOC_WAIT);
        if(waserror()){
                if(alloc && wq->clone!=NULL)
                        cclose(wq->clone);
index d93934d..2ccb256 100644 (file)
@@ -404,7 +404,8 @@ mntwalk(struct chan *c, struct chan *nc, char **name, int nname)
        if(nname > MAXWELEM)
                error("devmnt: too many name elements");
        alloc = 0;
-       wq = kzmalloc(sizeof(struct walkqid) + (nname - 1) * sizeof(struct qid), 0);
+       wq = kzmalloc(sizeof(struct walkqid) + nname * sizeof(struct qid),
+                     KMALLOC_WAIT);
        if(waserror()){
                if(alloc && wq->clone!=NULL)
                        cclose(wq->clone);