mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
When allocating a pbuf for the cluster write, do not sleep waiting
for the available pbuf when passed vnode is backing md(4). Other i/o directed to the same md device might already hold pbufs, and then we could deadlock since only our progress can free a pbuf needed for wakeup. Obtained from: projects/vm6 Reminded and tested by: pho MFC after: 1 week
This commit is contained in:
parent
c9735f9537
commit
1ca79c111c
1 changed files with 3 additions and 1 deletions
|
|
@ -837,7 +837,9 @@ cluster_wbuild(struct vnode *vp, long size, daddr_t start_lbn, int len,
|
|||
(tbp->b_bcount != tbp->b_bufsize) ||
|
||||
(tbp->b_bcount != size) ||
|
||||
(len == 1) ||
|
||||
((bp = getpbuf(&cluster_pbuf_freecnt)) == NULL)) {
|
||||
((bp = (vp->v_vflag & VV_MD) != 0 ?
|
||||
trypbuf(&cluster_pbuf_freecnt) :
|
||||
getpbuf(&cluster_pbuf_freecnt)) == NULL)) {
|
||||
totalwritten += tbp->b_bufsize;
|
||||
bawrite(tbp);
|
||||
++start_lbn;
|
||||
|
|
|
|||
Loading…
Reference in a new issue