diff options
author | rwatson <rwatson@FreeBSD.org> | 2005-10-01 20:15:41 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2005-10-01 20:15:41 +0000 |
commit | 5758dab89658fa9f8f64973f791d331589e70e2c (patch) | |
tree | 6108dd178a711a087e2a5cd9b15f00d7b1727ad4 /sys/fs | |
parent | 464deb56c22ebb174dadf6125f72f183b808f67f (diff) | |
download | FreeBSD-src-5758dab89658fa9f8f64973f791d331589e70e2c.zip FreeBSD-src-5758dab89658fa9f8f64973f791d331589e70e2c.tar.gz |
Second attempt at a work-around for fifo-related socket panics during
make -j with high levels of parallelism: acquire Giant in fifo I/O
routines.
Discussed with: ups
MFC after: 3 days
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/fifofs/fifo_vnops.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c index 9084fc6..37dfcb9 100644 --- a/sys/fs/fifofs/fifo_vnops.c +++ b/sys/fs/fifofs/fifo_vnops.c @@ -705,7 +705,9 @@ fifo_read_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, str if (uio->uio_resid == 0) return (0); sflags = (fp->f_flag & FNONBLOCK) ? MSG_NBIO : 0; + mtx_lock(&Giant); error = soreceive(fip->fi_readsock, NULL, uio, NULL, NULL, &sflags); + mtx_unlock(&Giant); return (error); } @@ -725,6 +727,8 @@ fifo_write_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, st fip = fp->f_data; KASSERT(uio->uio_rw == UIO_WRITE,("fifo_write mode")); sflags = (fp->f_flag & FNONBLOCK) ? MSG_NBIO : 0; + mtx_lock(&Giant); error = sosend(fip->fi_writesock, NULL, uio, 0, NULL, sflags, td); + mtx_unlock(&Giant); return (error); } |