Deleted Added
full compact
fifo_vnops.c (175140) fifo_vnops.c (175202)
1/*-
2 * Copyright (c) 1990, 1993, 1995
3 * The Regents of the University of California.
4 * Copyright (c) 2005 Robert N. M. Watson
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 15 unchanged lines hidden (view full) ---

24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)fifo_vnops.c 8.10 (Berkeley) 5/27/95
1/*-
2 * Copyright (c) 1990, 1993, 1995
3 * The Regents of the University of California.
4 * Copyright (c) 2005 Robert N. M. Watson
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 15 unchanged lines hidden (view full) ---

24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)fifo_vnops.c 8.10 (Berkeley) 5/27/95
32 * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 175140 2008-01-07 20:05:19Z jhb $
32 * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 175202 2008-01-10 01:10:58Z attilio $
33 */
34
35#include <sys/param.h>
36#include <sys/event.h>
37#include <sys/file.h>
38#include <sys/filedesc.h>
39#include <sys/filio.h>
40#include <sys/fcntl.h>

--- 211 unchanged lines hidden (view full) ---

252 }
253 }
254 }
255 if ((ap->a_mode & O_NONBLOCK) == 0) {
256 if ((ap->a_mode & FREAD) && fip->fi_writers == 0) {
257 VOP_UNLOCK(vp, 0, td);
258 error = msleep(&fip->fi_readers, &fifo_mtx,
259 PDROP | PCATCH | PSOCK, "fifoor", 0);
33 */
34
35#include <sys/param.h>
36#include <sys/event.h>
37#include <sys/file.h>
38#include <sys/filedesc.h>
39#include <sys/filio.h>
40#include <sys/fcntl.h>

--- 211 unchanged lines hidden (view full) ---

252 }
253 }
254 }
255 if ((ap->a_mode & O_NONBLOCK) == 0) {
256 if ((ap->a_mode & FREAD) && fip->fi_writers == 0) {
257 VOP_UNLOCK(vp, 0, td);
258 error = msleep(&fip->fi_readers, &fifo_mtx,
259 PDROP | PCATCH | PSOCK, "fifoor", 0);
260 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
260 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
261 if (error) {
262 fip->fi_readers--;
263 if (fip->fi_readers == 0) {
264 socantsendmore(fip->fi_writesock);
265 fifo_cleanup(vp);
266 }
267 return (error);
268 }
269 mtx_lock(&fifo_mtx);
270 /*
271 * We must have got woken up because we had a writer.
272 * That (and not still having one) is the condition
273 * that we must wait for.
274 */
275 }
276 if ((ap->a_mode & FWRITE) && fip->fi_readers == 0) {
277 VOP_UNLOCK(vp, 0, td);
278 error = msleep(&fip->fi_writers, &fifo_mtx,
279 PDROP | PCATCH | PSOCK, "fifoow", 0);
261 if (error) {
262 fip->fi_readers--;
263 if (fip->fi_readers == 0) {
264 socantsendmore(fip->fi_writesock);
265 fifo_cleanup(vp);
266 }
267 return (error);
268 }
269 mtx_lock(&fifo_mtx);
270 /*
271 * We must have got woken up because we had a writer.
272 * That (and not still having one) is the condition
273 * that we must wait for.
274 */
275 }
276 if ((ap->a_mode & FWRITE) && fip->fi_readers == 0) {
277 VOP_UNLOCK(vp, 0, td);
278 error = msleep(&fip->fi_writers, &fifo_mtx,
279 PDROP | PCATCH | PSOCK, "fifoow", 0);
280 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
280 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
281 if (error) {
282 fip->fi_writers--;
283 if (fip->fi_writers == 0) {
284 socantrcvmore(fip->fi_readsock);
285 fifo_cleanup(vp);
286 }
287 return (error);
288 }

--- 460 unchanged lines hidden ---
281 if (error) {
282 fip->fi_writers--;
283 if (fip->fi_writers == 0) {
284 socantrcvmore(fip->fi_readsock);
285 fifo_cleanup(vp);
286 }
287 return (error);
288 }

--- 460 unchanged lines hidden ---