diff --git a/sys/dev/misc/snp/snp.c b/sys/dev/misc/snp/snp.c index 1d83373..2a0a1cd 100644 --- a/sys/dev/misc/snp/snp.c +++ b/sys/dev/misc/snp/snp.c @@ -590,6 +590,9 @@ snpioctl(struct dev_ioctl_args *ap) snp->snp_flags &= ~SNOOP_ASYNC; break; + case FIONBIO: + break; + case FIONREAD: crit_enter(); if (snp->snp_tty != NULL) diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index 9eebfe0..9056339 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -297,6 +297,11 @@ kern_fcntl(int fd, int cmd, union fcntl_dat *dat, struct ucred *cred) error = fo_ioctl(fp, FIOASYNC, (caddr_t)&tmp, cred, NULL); } + if (error == 0 && ((nflags ^ oflags) & FNONBLOCK)) { + tmp = nflags & FNONBLOCK; + error = fo_ioctl(fp, FIONBIO, (caddr_t)&tmp, + cred, NULL); + } if (error == 0) fp->f_flag = nflags; break; diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index 2a4829d..ddecb16 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -1346,6 +1346,9 @@ kqueue_ioctl(struct file *fp, u_long com, caddr_t data, lwkt_gettoken(tok); switch(com) { + case FIONBIO: + error = 0; + break; case FIOASYNC: if (*(int *)data) kq->kq_state |= KQ_ASYNC; diff --git a/sys/kern/kern_memio.c b/sys/kern/kern_memio.c index 5ead6fd..2a989ab 100644 --- a/sys/kern/kern_memio.c +++ b/sys/kern/kern_memio.c @@ -572,6 +572,8 @@ random_ioctl(cdev_t dev, u_long cmd, caddr_t data, int flags, struct ucred *cred /* Really handled in upper layer */ case FIOASYNC: break; + case FIONBIO: + break; case MEM_SETIRQ: intr = *(int16_t *)data; if ((error = priv_check_cred(cred, PRIV_ROOT, 0)) != 0) diff --git a/sys/kern/subr_log.c b/sys/kern/subr_log.c index 6e174fa..1f60b11 100644 --- a/sys/kern/subr_log.c +++ b/sys/kern/subr_log.c @@ -281,6 +281,9 @@ logioctl(struct dev_ioctl_args *ap) *(int *)ap->a_data = n; break; + case FIONBIO: + break; + case FIOASYNC: if (*(int *)ap->a_data) atomic_set_int(&logsoftc.sc_state, LOG_ASYNC); diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 951314f..5e0fa96 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -964,6 +964,9 @@ pipe_ioctl(struct file *fp, u_long cmd, caddr_t data, lwkt_gettoken(&mpipe->pipe_wlock); switch (cmd) { + case FIONBIO: + error = 0; + break; case FIOASYNC: if (*(int *)data) { mpipe->pipe_state |= PIPE_ASYNC; diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c index 8119523..cac7ffb 100644 --- a/sys/kern/sys_socket.c +++ b/sys/kern/sys_socket.c @@ -132,6 +132,9 @@ soo_ioctl(struct file *fp, u_long cmd, caddr_t data, so = (struct socket *)fp->f_data; switch (cmd) { + case FIONBIO: + error = 0; + break; case FIOASYNC: if (*(int *)data) { sosetstate(so, SS_ASYNC); diff --git a/sys/kern/tty.c b/sys/kern/tty.c index 27c4b1d..c527a5e 100644 --- a/sys/kern/tty.c +++ b/sys/kern/tty.c @@ -919,6 +919,8 @@ ttioctl(struct tty *tp, u_long cmd, void *data, int flag) CLR(tp->t_state, TS_ASYNC); crit_exit(); break; + case FIONBIO: + break; case FIONREAD: /* get # bytes to read */ crit_enter(); *(int *)data = ttnread(tp); diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 43f5296..2ad062f 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -916,7 +916,7 @@ vn_ioctl(struct file *fp, u_long com, caddr_t data, struct ucred *ucred, error = 0; break; } - if (com == FIOASYNC) { /* XXX */ + if (com == FIOASYNC || com == FIONBIO) { /* XXX */ error = 0; /* XXX */ break; } diff --git a/sys/net/bpf.c b/sys/net/bpf.c index 1a82aa1..38ddfed 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -923,6 +923,9 @@ bpfioctl(struct dev_ioctl_args *ap) d->bd_async = *(int *)ap->a_data; break; + case FIONBIO: + break; + case FIOSETOWN: error = fsetown(*(int *)ap->a_data, &d->bd_sigio); break; diff --git a/sys/net/tap/if_tap.c b/sys/net/tap/if_tap.c index cd9b9b6..b14d7b5 100644 --- a/sys/net/tap/if_tap.c +++ b/sys/net/tap/if_tap.c @@ -752,6 +752,9 @@ tapioctl(struct dev_ioctl_args *ap) tp->tap_flags &= ~TAP_ASYNC; break; + case FIONBIO: + break; + case FIONREAD: /* Take a look at devq first */ IF_POLL(&tp->tap_devq, mb); diff --git a/sys/net/tun/if_tun.c b/sys/net/tun/if_tun.c index 8f1b9ce..68752e8 100644 --- a/sys/net/tun/if_tun.c +++ b/sys/net/tun/if_tun.c @@ -491,6 +491,8 @@ tunioctl(struct dev_ioctl_args *ap) else tp->tun_flags &= ~TUN_ASYNC; break; + case FIONBIO: + break; case FIONREAD: *(int *)ap->a_data = ifsq_poll_pktlen( ifq_get_subq_default(&tp->tun_if.if_snd));