Use M_NOWAIT in wtab_alloc(), too. Convert panic() to
a soft failure here. wtab_alloc() is used by red_alloc(), which can fail. Reported by: Kim Culhan <w8hdkim gmail.com>
This commit is contained in:
parent
45a1f1e1ff
commit
e9e4cb7345
@ -235,6 +235,13 @@ red_alloc(int weight, int inv_pmax, int th_min, int th_max, int flags,
|
|||||||
if (rp == NULL)
|
if (rp == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
/* allocate weight table */
|
||||||
|
rp->red_wtab = wtab_alloc(rp->red_weight);
|
||||||
|
if (rp->red_wtab == NULL) {
|
||||||
|
free(rp, M_DEVBUF);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
rp->red_avg = 0;
|
rp->red_avg = 0;
|
||||||
rp->red_idle = 1;
|
rp->red_idle = 1;
|
||||||
|
|
||||||
@ -301,9 +308,6 @@ red_alloc(int weight, int inv_pmax, int th_min, int th_max, int flags,
|
|||||||
rp->red_probd = (2 * (rp->red_thmax - rp->red_thmin)
|
rp->red_probd = (2 * (rp->red_thmax - rp->red_thmin)
|
||||||
* rp->red_inv_pmax) << FP_SHIFT;
|
* rp->red_inv_pmax) << FP_SHIFT;
|
||||||
|
|
||||||
/* allocate weight table */
|
|
||||||
rp->red_wtab = wtab_alloc(rp->red_weight);
|
|
||||||
|
|
||||||
microtime(&rp->red_last);
|
microtime(&rp->red_last);
|
||||||
return (rp);
|
return (rp);
|
||||||
}
|
}
|
||||||
@ -638,10 +642,9 @@ wtab_alloc(int weight)
|
|||||||
return (w);
|
return (w);
|
||||||
}
|
}
|
||||||
|
|
||||||
w = malloc(sizeof(struct wtab), M_DEVBUF, M_WAITOK);
|
w = malloc(sizeof(struct wtab), M_DEVBUF, M_NOWAIT | M_ZERO);
|
||||||
if (w == NULL)
|
if (w == NULL)
|
||||||
panic("wtab_alloc: malloc failed!");
|
return (NULL);
|
||||||
bzero(w, sizeof(struct wtab));
|
|
||||||
w->w_weight = weight;
|
w->w_weight = weight;
|
||||||
w->w_refcount = 1;
|
w->w_refcount = 1;
|
||||||
w->w_next = wtab_list;
|
w->w_next = wtab_list;
|
||||||
|
Loading…
Reference in New Issue
Block a user