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 --- |