summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2005-10-01 20:15:41 +0000
committerrwatson <rwatson@FreeBSD.org>2005-10-01 20:15:41 +0000
commit5758dab89658fa9f8f64973f791d331589e70e2c (patch)
tree6108dd178a711a087e2a5cd9b15f00d7b1727ad4 /sys/fs
parent464deb56c22ebb174dadf6125f72f183b808f67f (diff)
downloadFreeBSD-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.c4
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);
}
OpenPOWER on IntegriCloud