summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_syscalls.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
committerjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
commit5596676e6c6c1e81e899cd0531f9b1c28a292669 (patch)
treeb1a19fcdf05759281fab0d89efb13f0fdf42102e /sys/kern/uipc_syscalls.c
parent83e00d4274950d2b531c24692cd123538ffbddb9 (diff)
downloadFreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.zip
FreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.tar.gz
KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
Diffstat (limited to 'sys/kern/uipc_syscalls.c')
-rw-r--r--sys/kern/uipc_syscalls.c344
1 files changed, 168 insertions, 176 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index ecf4406..e09951f 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -77,14 +77,14 @@ SYSINIT(sock_sf, SI_SUB_MBUF, SI_ORDER_ANY, sf_buf_init, NULL)
static struct sf_buf *sf_buf_alloc(void);
static void sf_buf_free(caddr_t addr, void *args);
-static int sendit __P((struct proc *p, int s, struct msghdr *mp, int flags));
-static int recvit __P((struct proc *p, int s, struct msghdr *mp,
+static int sendit __P((struct thread *td, int s, struct msghdr *mp, int flags));
+static int recvit __P((struct thread *td, int s, struct msghdr *mp,
caddr_t namelenp));
-static int accept1 __P((struct proc *p, struct accept_args *uap, int compat));
-static int getsockname1 __P((struct proc *p, struct getsockname_args *uap,
+static int accept1 __P((struct thread *td, struct accept_args *uap, int compat));
+static int getsockname1 __P((struct thread *td, struct getsockname_args *uap,
int compat));
-static int getpeername1 __P((struct proc *p, struct getpeername_args *uap,
+static int getpeername1 __P((struct thread *td, struct getpeername_args *uap,
int compat));
/*
@@ -113,8 +113,8 @@ extern struct fileops socketops;
* MPSAFE
*/
int
-socket(p, uap)
- struct proc *p;
+socket(td, uap)
+ struct thread *td;
register struct socket_args /* {
int domain;
int type;
@@ -127,26 +127,25 @@ socket(p, uap)
int fd, error;
mtx_lock(&Giant);
-
- fdp = p->p_fd;
- error = falloc(p, &fp, &fd);
+ fdp = td->td_proc->p_fd;
+ error = falloc(td, &fp, &fd);
if (error)
goto done2;
fhold(fp);
- error = socreate(uap->domain, &so, uap->type, uap->protocol, p);
+ error = socreate(uap->domain, &so, uap->type, uap->protocol, td);
if (error) {
if (fdp->fd_ofiles[fd] == fp) {
fdp->fd_ofiles[fd] = NULL;
- fdrop(fp, p);
+ fdrop(fp, td);
}
} else {
fp->f_data = (caddr_t)so;
fp->f_flag = FREAD|FWRITE;
fp->f_ops = &socketops;
fp->f_type = DTYPE_SOCKET;
- p->p_retval[0] = fd;
+ td->td_retval[0] = fd;
}
- fdrop(fp, p);
+ fdrop(fp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -157,8 +156,8 @@ done2:
*/
/* ARGSUSED */
int
-bind(p, uap)
- struct proc *p;
+bind(td, uap)
+ struct thread *td;
register struct bind_args /* {
int s;
caddr_t name;
@@ -170,18 +169,17 @@ bind(p, uap)
int error;
mtx_lock(&Giant);
-
- error = holdsock(p->p_fd, uap->s, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error)
goto done2;
error = getsockaddr(&sa, uap->name, uap->namelen);
if (error) {
- fdrop(fp, p);
+ fdrop(fp, td);
goto done2;
}
- error = sobind((struct socket *)fp->f_data, sa, p);
+ error = sobind((struct socket *)fp->f_data, sa, td);
FREE(sa, M_SONAME);
- fdrop(fp, p);
+ fdrop(fp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -192,8 +190,8 @@ done2:
*/
/* ARGSUSED */
int
-listen(p, uap)
- struct proc *p;
+listen(td, uap)
+ struct thread *td;
register struct listen_args /* {
int s;
int backlog;
@@ -203,10 +201,10 @@ listen(p, uap)
int error;
mtx_lock(&Giant);
- error = holdsock(p->p_fd, uap->s, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error == 0) {
- error = solisten((struct socket *)fp->f_data, uap->backlog, p);
- fdrop(fp, p);
+ error = solisten((struct socket *)fp->f_data, uap->backlog, td);
+ fdrop(fp, td);
}
mtx_unlock(&Giant);
return(error);
@@ -217,8 +215,8 @@ listen(p, uap)
* MPSAFE
*/
static int
-accept1(p, uap, compat)
- struct proc *p;
+accept1(td, uap, compat)
+ struct thread *td;
register struct accept_args /* {
int s;
caddr_t name;
@@ -236,8 +234,7 @@ accept1(p, uap, compat)
short fflag; /* type must match fp->f_flag */
mtx_lock(&Giant);
- fdp = p->p_fd;
-
+ fdp = td->td_proc->p_fd;
if (uap->name) {
error = copyin((caddr_t)uap->anamelen, (caddr_t)&namelen,
sizeof (namelen));
@@ -290,7 +287,7 @@ accept1(p, uap, compat)
head->so_qlen--;
fflag = lfp->f_flag;
- error = falloc(p, &nfp, &fd);
+ error = falloc(td, &nfp, &fd);
if (error) {
/*
* Probably ran out of file descriptors. Put the
@@ -305,7 +302,7 @@ accept1(p, uap, compat)
goto done;
}
fhold(nfp);
- p->p_retval[0] = fd;
+ td->td_retval[0] = fd;
/* connection has been removed from the listen queue */
KNOTE(&head->so_rcv.sb_sel.si_note, 0);
@@ -367,7 +364,7 @@ noconnection:
if (error) {
if (fdp->fd_ofiles[fd] == nfp) {
fdp->fd_ofiles[fd] = NULL;
- fdrop(nfp, p);
+ fdrop(nfp, td);
}
}
splx(s);
@@ -377,8 +374,8 @@ noconnection:
*/
done:
if (nfp != NULL)
- fdrop(nfp, p);
- fdrop(lfp, p);
+ fdrop(nfp, td);
+ fdrop(lfp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -388,11 +385,12 @@ done2:
* MPSAFE (accept1() is MPSAFE)
*/
int
-accept(p, uap)
- struct proc *p;
+accept(td, uap)
+ struct thread *td;
struct accept_args *uap;
{
- return (accept1(p, uap, 0));
+
+ return (accept1(td, uap, 0));
}
#ifdef COMPAT_OLDSOCK
@@ -400,11 +398,12 @@ accept(p, uap)
* MPSAFE (accept1() is MPSAFE)
*/
int
-oaccept(p, uap)
- struct proc *p;
+oaccept(td, uap)
+ struct thread *td;
struct accept_args *uap;
{
- return (accept1(p, uap, 1));
+
+ return (accept1(td, uap, 1));
}
#endif /* COMPAT_OLDSOCK */
@@ -413,8 +412,8 @@ oaccept(p, uap)
*/
/* ARGSUSED */
int
-connect(p, uap)
- struct proc *p;
+connect(td, uap)
+ struct thread *td;
register struct connect_args /* {
int s;
caddr_t name;
@@ -427,8 +426,7 @@ connect(p, uap)
int error, s;
mtx_lock(&Giant);
-
- error = holdsock(p->p_fd, uap->s, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error)
goto done2;
so = (struct socket *)fp->f_data;
@@ -439,7 +437,7 @@ connect(p, uap)
error = getsockaddr(&sa, uap->name, uap->namelen);
if (error)
goto done;
- error = soconnect(so, sa, p);
+ error = soconnect(so, sa, td);
if (error)
goto bad;
if ((so->so_state & SS_NBIO) && (so->so_state & SS_ISCONNECTING)) {
@@ -465,7 +463,7 @@ bad:
if (error == ERESTART)
error = EINTR;
done:
- fdrop(fp, p);
+ fdrop(fp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -475,8 +473,8 @@ done2:
* MPSAFE
*/
int
-socketpair(p, uap)
- struct proc *p;
+socketpair(td, uap)
+ struct thread *td;
register struct socketpair_args /* {
int domain;
int type;
@@ -484,26 +482,25 @@ socketpair(p, uap)
int *rsv;
} */ *uap;
{
- register struct filedesc *fdp = p->p_fd;
+ register struct filedesc *fdp = td->td_proc->p_fd;
struct file *fp1, *fp2;
struct socket *so1, *so2;
int fd, error, sv[2];
mtx_lock(&Giant);
-
- error = socreate(uap->domain, &so1, uap->type, uap->protocol, p);
+ error = socreate(uap->domain, &so1, uap->type, uap->protocol, td);
if (error)
goto done2;
- error = socreate(uap->domain, &so2, uap->type, uap->protocol, p);
+ error = socreate(uap->domain, &so2, uap->type, uap->protocol, td);
if (error)
goto free1;
- error = falloc(p, &fp1, &fd);
+ error = falloc(td, &fp1, &fd);
if (error)
goto free2;
fhold(fp1);
sv[0] = fd;
fp1->f_data = (caddr_t)so1;
- error = falloc(p, &fp2, &fd);
+ error = falloc(td, &fp2, &fd);
if (error)
goto free3;
fhold(fp2);
@@ -524,21 +521,21 @@ socketpair(p, uap)
fp1->f_ops = fp2->f_ops = &socketops;
fp1->f_type = fp2->f_type = DTYPE_SOCKET;
error = copyout((caddr_t)sv, (caddr_t)uap->rsv, 2 * sizeof (int));
- fdrop(fp1, p);
- fdrop(fp2, p);
+ fdrop(fp1, td);
+ fdrop(fp2, td);
goto done2;
free4:
if (fdp->fd_ofiles[sv[1]] == fp2) {
fdp->fd_ofiles[sv[1]] = NULL;
- fdrop(fp2, p);
+ fdrop(fp2, td);
}
- fdrop(fp2, p);
+ fdrop(fp2, td);
free3:
if (fdp->fd_ofiles[sv[0]] == fp1) {
fdp->fd_ofiles[sv[0]] = NULL;
- fdrop(fp1, p);
+ fdrop(fp1, td);
}
- fdrop(fp1, p);
+ fdrop(fp1, td);
free2:
(void)soclose(so2);
free1:
@@ -549,8 +546,8 @@ done2:
}
static int
-sendit(p, s, mp, flags)
- register struct proc *p;
+sendit(td, s, mp, flags)
+ register struct thread *td;
int s;
register struct msghdr *mp;
int flags;
@@ -568,27 +565,27 @@ sendit(p, s, mp, flags)
struct uio ktruio;
#endif
- error = holdsock(p->p_fd, s, &fp);
+ error = holdsock(td->td_proc->p_fd, s, &fp);
if (error)
return (error);
auio.uio_iov = mp->msg_iov;
auio.uio_iovcnt = mp->msg_iovlen;
auio.uio_segflg = UIO_USERSPACE;
auio.uio_rw = UIO_WRITE;
- auio.uio_procp = p;
+ auio.uio_td = td;
auio.uio_offset = 0; /* XXX */
auio.uio_resid = 0;
iov = mp->msg_iov;
for (i = 0; i < mp->msg_iovlen; i++, iov++) {
if ((auio.uio_resid += iov->iov_len) < 0) {
- fdrop(fp, p);
+ fdrop(fp, td);
return (EINVAL);
}
}
if (mp->msg_name) {
error = getsockaddr(&to, mp->msg_name, mp->msg_namelen);
if (error) {
- fdrop(fp, p);
+ fdrop(fp, td);
return (error);
}
} else {
@@ -627,7 +624,7 @@ sendit(p, s, mp, flags)
control = 0;
}
#ifdef KTRACE
- if (KTRPOINT(p, KTR_GENIO)) {
+ if (KTRPOINT(td->td_proc, KTR_GENIO)) {
int iovlen = auio.uio_iovcnt * sizeof (struct iovec);
MALLOC(ktriov, struct iovec *, iovlen, M_TEMP, M_WAITOK);
@@ -638,31 +635,31 @@ sendit(p, s, mp, flags)
len = auio.uio_resid;
so = (struct socket *)fp->f_data;
error = so->so_proto->pr_usrreqs->pru_sosend(so, to, &auio, 0, control,
- flags, p);
+ flags, td);
if (error) {
if (auio.uio_resid != len && (error == ERESTART ||
error == EINTR || error == EWOULDBLOCK))
error = 0;
if (error == EPIPE) {
- PROC_LOCK(p);
- psignal(p, SIGPIPE);
- PROC_UNLOCK(p);
+ PROC_LOCK(td->td_proc);
+ psignal(td->td_proc, SIGPIPE);
+ PROC_UNLOCK(td->td_proc);
}
}
if (error == 0)
- p->p_retval[0] = len - auio.uio_resid;
+ td->td_retval[0] = len - auio.uio_resid;
#ifdef KTRACE
if (ktriov != NULL) {
if (error == 0) {
ktruio.uio_iov = ktriov;
- ktruio.uio_resid = p->p_retval[0];
- ktrgenio(p->p_tracep, s, UIO_WRITE, &ktruio, error);
+ ktruio.uio_resid = td->td_retval[0];
+ ktrgenio(td->td_proc->p_tracep, s, UIO_WRITE, &ktruio, error);
}
FREE(ktriov, M_TEMP);
}
#endif
bad:
- fdrop(fp, p);
+ fdrop(fp, td);
if (to)
FREE(to, M_SONAME);
return (error);
@@ -672,8 +669,8 @@ bad:
* MPSAFE
*/
int
-sendto(p, uap)
- struct proc *p;
+sendto(td, uap)
+ struct thread *td;
register struct sendto_args /* {
int s;
caddr_t buf;
@@ -698,7 +695,7 @@ sendto(p, uap)
aiov.iov_base = uap->buf;
aiov.iov_len = uap->len;
mtx_lock(&Giant);
- error = sendit(p, uap->s, &msg, uap->flags);
+ error = sendit(td, uap->s, &msg, uap->flags);
mtx_unlock(&Giant);
return (error);
}
@@ -708,8 +705,8 @@ sendto(p, uap)
* MPSAFE
*/
int
-osend(p, uap)
- struct proc *p;
+osend(td, uap)
+ struct thread *td;
register struct osend_args /* {
int s;
caddr_t buf;
@@ -730,7 +727,7 @@ osend(p, uap)
msg.msg_control = 0;
msg.msg_flags = 0;
mtx_lock(&Giant);
- error = sendit(p, uap->s, &msg, uap->flags);
+ error = sendit(td, uap->s, &msg, uap->flags);
mtx_unlock(&Giant);
return (error);
}
@@ -739,8 +736,8 @@ osend(p, uap)
* MPSAFE
*/
int
-osendmsg(p, uap)
- struct proc *p;
+osendmsg(td, uap)
+ struct thread *td;
register struct osendmsg_args /* {
int s;
caddr_t msg;
@@ -772,7 +769,7 @@ osendmsg(p, uap)
goto done;
msg.msg_flags = MSG_COMPAT;
msg.msg_iov = iov;
- error = sendit(p, uap->s, &msg, uap->flags);
+ error = sendit(td, uap->s, &msg, uap->flags);
done:
if (iov != aiov)
FREE(iov, M_IOV);
@@ -786,8 +783,8 @@ done2:
* MPSAFE
*/
int
-sendmsg(p, uap)
- struct proc *p;
+sendmsg(td, uap)
+ struct thread *td;
register struct sendmsg_args /* {
int s;
caddr_t msg;
@@ -799,7 +796,6 @@ sendmsg(p, uap)
int error;
mtx_lock(&Giant);
-
error = copyin(uap->msg, (caddr_t)&msg, sizeof (msg));
if (error)
goto done2;
@@ -822,7 +818,7 @@ sendmsg(p, uap)
#ifdef COMPAT_OLDSOCK
msg.msg_flags = 0;
#endif
- error = sendit(p, uap->s, &msg, uap->flags);
+ error = sendit(td, uap->s, &msg, uap->flags);
done:
if (iov != aiov)
FREE(iov, M_IOV);
@@ -832,8 +828,8 @@ done2:
}
static int
-recvit(p, s, mp, namelenp)
- register struct proc *p;
+recvit(td, s, mp, namelenp)
+ register struct thread *td;
int s;
register struct msghdr *mp;
caddr_t namelenp;
@@ -852,25 +848,25 @@ recvit(p, s, mp, namelenp)
struct uio ktruio;
#endif
- error = holdsock(p->p_fd, s, &fp);
+ error = holdsock(td->td_proc->p_fd, s, &fp);
if (error)
return (error);
auio.uio_iov = mp->msg_iov;
auio.uio_iovcnt = mp->msg_iovlen;
auio.uio_segflg = UIO_USERSPACE;
auio.uio_rw = UIO_READ;
- auio.uio_procp = p;
+ auio.uio_td = td;
auio.uio_offset = 0; /* XXX */
auio.uio_resid = 0;
iov = mp->msg_iov;
for (i = 0; i < mp->msg_iovlen; i++, iov++) {
if ((auio.uio_resid += iov->iov_len) < 0) {
- fdrop(fp, p);
+ fdrop(fp, td);
return (EINVAL);
}
}
#ifdef KTRACE
- if (KTRPOINT(p, KTR_GENIO)) {
+ if (KTRPOINT(td->td_proc, KTR_GENIO)) {
int iovlen = auio.uio_iovcnt * sizeof (struct iovec);
MALLOC(ktriov, struct iovec *, iovlen, M_TEMP, M_WAITOK);
@@ -893,14 +889,14 @@ recvit(p, s, mp, namelenp)
if (error == 0) {
ktruio.uio_iov = ktriov;
ktruio.uio_resid = len - auio.uio_resid;
- ktrgenio(p->p_tracep, s, UIO_READ, &ktruio, error);
+ ktrgenio(td->td_proc->p_tracep, s, UIO_READ, &ktruio, error);
}
FREE(ktriov, M_TEMP);
}
#endif
if (error)
goto out;
- p->p_retval[0] = len - auio.uio_resid;
+ td->td_retval[0] = len - auio.uio_resid;
if (mp->msg_name) {
len = mp->msg_namelen;
if (len <= 0 || fromsa == 0)
@@ -979,7 +975,7 @@ recvit(p, s, mp, namelenp)
mp->msg_controllen = ctlbuf - (caddr_t)mp->msg_control;
}
out:
- fdrop(fp, p);
+ fdrop(fp, td);
if (fromsa)
FREE(fromsa, M_SONAME);
if (control)
@@ -991,8 +987,8 @@ out:
* MPSAFE
*/
int
-recvfrom(p, uap)
- struct proc *p;
+recvfrom(td, uap)
+ struct thread *td;
register struct recvfrom_args /* {
int s;
caddr_t buf;
@@ -1007,7 +1003,6 @@ recvfrom(p, uap)
int error;
mtx_lock(&Giant);
-
if (uap->fromlenaddr) {
error = copyin((caddr_t)uap->fromlenaddr,
(caddr_t)&msg.msg_namelen, sizeof (msg.msg_namelen));
@@ -1023,7 +1018,7 @@ recvfrom(p, uap)
aiov.iov_len = uap->len;
msg.msg_control = 0;
msg.msg_flags = uap->flags;
- error = recvit(p, uap->s, &msg, (caddr_t)uap->fromlenaddr);
+ error = recvit(td, uap->s, &msg, (caddr_t)uap->fromlenaddr);
done2:
mtx_unlock(&Giant);
return(error);
@@ -1034,13 +1029,13 @@ done2:
* MPSAFE
*/
int
-orecvfrom(p, uap)
- struct proc *p;
+orecvfrom(td, uap)
+ struct thread *td;
struct recvfrom_args *uap;
{
uap->flags |= MSG_COMPAT;
- return (recvfrom(p, uap));
+ return (recvfrom(td, uap));
}
#endif
@@ -1050,8 +1045,8 @@ orecvfrom(p, uap)
* MPSAFE
*/
int
-orecv(p, uap)
- struct proc *p;
+orecv(td, uap)
+ struct thread *td;
register struct orecv_args /* {
int s;
caddr_t buf;
@@ -1072,7 +1067,7 @@ orecv(p, uap)
aiov.iov_len = uap->len;
msg.msg_control = 0;
msg.msg_flags = uap->flags;
- error = recvit(p, uap->s, &msg, (caddr_t)0);
+ error = recvit(td, uap->s, &msg, (caddr_t)0);
mtx_unlock(&Giant);
return (error);
}
@@ -1085,8 +1080,8 @@ orecv(p, uap)
* MPSAFE
*/
int
-orecvmsg(p, uap)
- struct proc *p;
+orecvmsg(td, uap)
+ struct thread *td;
register struct orecvmsg_args /* {
int s;
struct omsghdr *msg;
@@ -1120,7 +1115,7 @@ orecvmsg(p, uap)
if (error)
goto done;
msg.msg_iov = iov;
- error = recvit(p, uap->s, &msg, (caddr_t)&uap->msg->msg_namelen);
+ error = recvit(td, uap->s, &msg, (caddr_t)&uap->msg->msg_namelen);
if (msg.msg_controllen && error == 0)
error = copyout((caddr_t)&msg.msg_controllen,
@@ -1138,8 +1133,8 @@ done2:
* MPSAFE
*/
int
-recvmsg(p, uap)
- struct proc *p;
+recvmsg(td, uap)
+ struct thread *td;
register struct recvmsg_args /* {
int s;
struct msghdr *msg;
@@ -1151,7 +1146,6 @@ recvmsg(p, uap)
register int error;
mtx_lock(&Giant);
-
error = copyin((caddr_t)uap->msg, (caddr_t)&msg, sizeof (msg));
if (error)
goto done2;
@@ -1177,7 +1171,7 @@ recvmsg(p, uap)
(unsigned)(msg.msg_iovlen * sizeof (struct iovec)));
if (error)
goto done;
- error = recvit(p, uap->s, &msg, (caddr_t)0);
+ error = recvit(td, uap->s, &msg, (caddr_t)0);
if (!error) {
msg.msg_iov = uiov;
error = copyout((caddr_t)&msg, (caddr_t)uap->msg, sizeof(msg));
@@ -1195,8 +1189,8 @@ done2:
*/
/* ARGSUSED */
int
-shutdown(p, uap)
- struct proc *p;
+shutdown(td, uap)
+ struct thread *td;
register struct shutdown_args /* {
int s;
int how;
@@ -1206,11 +1200,10 @@ shutdown(p, uap)
int error;
mtx_lock(&Giant);
-
- error = holdsock(p->p_fd, uap->s, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error == 0) {
error = soshutdown((struct socket *)fp->f_data, uap->how);
- fdrop(fp, p);
+ fdrop(fp, td);
}
mtx_unlock(&Giant);
return(error);
@@ -1221,8 +1214,8 @@ shutdown(p, uap)
*/
/* ARGSUSED */
int
-setsockopt(p, uap)
- struct proc *p;
+setsockopt(td, uap)
+ struct thread *td;
register struct setsockopt_args /* {
int s;
int level;
@@ -1241,16 +1234,16 @@ setsockopt(p, uap)
return (EINVAL);
mtx_lock(&Giant);
- error = holdsock(p->p_fd, uap->s, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error == 0) {
sopt.sopt_dir = SOPT_SET;
sopt.sopt_level = uap->level;
sopt.sopt_name = uap->name;
sopt.sopt_val = uap->val;
sopt.sopt_valsize = uap->valsize;
- sopt.sopt_p = p;
+ sopt.sopt_td = td;
error = sosetopt((struct socket *)fp->f_data, &sopt);
- fdrop(fp, p);
+ fdrop(fp, td);
}
mtx_unlock(&Giant);
return(error);
@@ -1261,8 +1254,8 @@ setsockopt(p, uap)
*/
/* ARGSUSED */
int
-getsockopt(p, uap)
- struct proc *p;
+getsockopt(td, uap)
+ struct thread *td;
register struct getsockopt_args /* {
int s;
int level;
@@ -1276,19 +1269,18 @@ getsockopt(p, uap)
struct sockopt sopt;
mtx_lock(&Giant);
-
- error = holdsock(p->p_fd, uap->s, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error)
goto done2;
if (uap->val) {
error = copyin((caddr_t)uap->avalsize, (caddr_t)&valsize,
sizeof (valsize));
if (error) {
- fdrop(fp, p);
+ fdrop(fp, td);
goto done2;
}
if (valsize < 0) {
- fdrop(fp, p);
+ fdrop(fp, td);
error = EINVAL;
goto done2;
}
@@ -1301,7 +1293,7 @@ getsockopt(p, uap)
sopt.sopt_name = uap->name;
sopt.sopt_val = uap->val;
sopt.sopt_valsize = (size_t)valsize; /* checked non-negative above */
- sopt.sopt_p = p;
+ sopt.sopt_td = td;
error = sogetopt((struct socket *)fp->f_data, &sopt);
if (error == 0) {
@@ -1309,7 +1301,7 @@ getsockopt(p, uap)
error = copyout((caddr_t)&valsize,
(caddr_t)uap->avalsize, sizeof (valsize));
}
- fdrop(fp, p);
+ fdrop(fp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -1322,8 +1314,8 @@ done2:
*/
/* ARGSUSED */
static int
-getsockname1(p, uap, compat)
- struct proc *p;
+getsockname1(td, uap, compat)
+ struct thread *td;
register struct getsockname_args /* {
int fdes;
caddr_t asa;
@@ -1337,13 +1329,12 @@ getsockname1(p, uap, compat)
int len, error;
mtx_lock(&Giant);
-
- error = holdsock(p->p_fd, uap->fdes, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->fdes, &fp);
if (error)
goto done2;
error = copyin((caddr_t)uap->alen, (caddr_t)&len, sizeof (len));
if (error) {
- fdrop(fp, p);
+ fdrop(fp, td);
goto done2;
}
so = (struct socket *)fp->f_data;
@@ -1369,7 +1360,7 @@ gotnothing:
bad:
if (sa)
FREE(sa, M_SONAME);
- fdrop(fp, p);
+ fdrop(fp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -1379,11 +1370,12 @@ done2:
* MPSAFE
*/
int
-getsockname(p, uap)
- struct proc *p;
+getsockname(td, uap)
+ struct thread *td;
struct getsockname_args *uap;
{
- return (getsockname1(p, uap, 0));
+
+ return (getsockname1(td, uap, 0));
}
#ifdef COMPAT_OLDSOCK
@@ -1391,11 +1383,12 @@ getsockname(p, uap)
* MPSAFE
*/
int
-ogetsockname(p, uap)
- struct proc *p;
+ogetsockname(td, uap)
+ struct thread *td;
struct getsockname_args *uap;
{
- return (getsockname1(p, uap, 1));
+
+ return (getsockname1(td, uap, 1));
}
#endif /* COMPAT_OLDSOCK */
@@ -1406,8 +1399,8 @@ ogetsockname(p, uap)
*/
/* ARGSUSED */
static int
-getpeername1(p, uap, compat)
- struct proc *p;
+getpeername1(td, uap, compat)
+ struct thread *td;
register struct getpeername_args /* {
int fdes;
caddr_t asa;
@@ -1421,19 +1414,18 @@ getpeername1(p, uap, compat)
int len, error;
mtx_lock(&Giant);
-
- error = holdsock(p->p_fd, uap->fdes, &fp);
+ error = holdsock(td->td_proc->p_fd, uap->fdes, &fp);
if (error)
goto done2;
so = (struct socket *)fp->f_data;
if ((so->so_state & (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0) {
- fdrop(fp, p);
+ fdrop(fp, td);
error = ENOTCONN;
goto done2;
}
error = copyin((caddr_t)uap->alen, (caddr_t)&len, sizeof (len));
if (error) {
- fdrop(fp, p);
+ fdrop(fp, td);
goto done2;
}
sa = 0;
@@ -1458,7 +1450,7 @@ gotnothing:
bad:
if (sa)
FREE(sa, M_SONAME);
- fdrop(fp, p);
+ fdrop(fp, td);
done2:
mtx_unlock(&Giant);
return (error);
@@ -1468,11 +1460,12 @@ done2:
* MPSAFE
*/
int
-getpeername(p, uap)
- struct proc *p;
+getpeername(td, uap)
+ struct thread *td;
struct getpeername_args *uap;
{
- return (getpeername1(p, uap, 0));
+
+ return (getpeername1(td, uap, 0));
}
#ifdef COMPAT_OLDSOCK
@@ -1480,12 +1473,13 @@ getpeername(p, uap)
* MPSAFE
*/
int
-ogetpeername(p, uap)
- struct proc *p;
+ogetpeername(td, uap)
+ struct thread *td;
struct ogetpeername_args *uap;
{
+
/* XXX uap should have type `getpeername_args *' to begin with. */
- return (getpeername1(p, (struct getpeername_args *)uap, 1));
+ return (getpeername1(td, (struct getpeername_args *)uap, 1));
}
#endif /* COMPAT_OLDSOCK */
@@ -1682,10 +1676,10 @@ sf_buf_free(caddr_t addr, void *args)
*
*/
int
-sendfile(struct proc *p, struct sendfile_args *uap)
+sendfile(struct thread *td, struct sendfile_args *uap)
{
struct file *fp;
- struct filedesc *fdp = p->p_fd;
+ struct filedesc *fdp = td->td_proc->p_fd;
struct vnode *vp;
struct vm_object *obj;
struct socket *so;
@@ -1698,7 +1692,6 @@ sendfile(struct proc *p, struct sendfile_args *uap)
int error = 0, s;
mtx_lock(&Giant);
-
vp = NULL;
/*
* Do argument checking. Must be a regular file in, stream
@@ -1719,8 +1712,8 @@ sendfile(struct proc *p, struct sendfile_args *uap)
error = EINVAL;
goto done;
}
- fdrop(fp, p);
- error = holdsock(p->p_fd, uap->s, &fp);
+ fdrop(fp, td);
+ error = holdsock(td->td_proc->p_fd, uap->s, &fp);
if (error)
goto done;
so = (struct socket *)fp->f_data;
@@ -1752,10 +1745,10 @@ sendfile(struct proc *p, struct sendfile_args *uap)
nuap.fd = uap->s;
nuap.iovp = hdtr.headers;
nuap.iovcnt = hdtr.hdr_cnt;
- error = writev(p, &nuap);
+ error = writev(td, &nuap);
if (error)
goto done;
- sbytes += p->p_retval[0];
+ sbytes += td->td_retval[0];
}
}
@@ -1856,11 +1849,11 @@ retry_lookup:
auio.uio_offset = trunc_page(off);
auio.uio_segflg = UIO_NOCOPY;
auio.uio_rw = UIO_READ;
- auio.uio_procp = p;
- vn_lock(vp, LK_SHARED | LK_NOPAUSE | LK_RETRY, p);
+ auio.uio_td = td;
+ vn_lock(vp, LK_SHARED | LK_NOPAUSE | LK_RETRY, td);
error = VOP_READ(vp, &auio, IO_VMIO | ((MAXBSIZE / bsize) << 16),
- p->p_ucred);
- VOP_UNLOCK(vp, 0, p);
+ td->td_proc->p_ucred);
+ VOP_UNLOCK(vp, 0, td);
vm_page_flag_clear(pg, PG_ZERO);
vm_page_io_finish(pg);
if (error) {
@@ -1972,7 +1965,7 @@ retry_space:
}
goto retry_space;
}
- error = (*so->so_proto->pr_usrreqs->pru_send)(so, 0, m, 0, 0, p);
+ error = (*so->so_proto->pr_usrreqs->pru_send)(so, 0, m, 0, 0, td);
splx(s);
if (error) {
sbunlock(&so->so_snd);
@@ -1988,19 +1981,19 @@ retry_space:
nuap.fd = uap->s;
nuap.iovp = hdtr.trailers;
nuap.iovcnt = hdtr.trl_cnt;
- error = writev(p, &nuap);
+ error = writev(td, &nuap);
if (error)
goto done;
- sbytes += p->p_retval[0];
+ sbytes += td->td_retval[0];
}
done:
/*
- * If there was no error we have to clear p->p_retval[0]
+ * If there was no error we have to clear td->td_retval[0]
* because it may have been set by writev.
*/
if (error == 0) {
- p->p_retval[0] = 0;
+ td->td_retval[0] = 0;
}
if (uap->sbytes != NULL) {
copyout(&sbytes, uap->sbytes, sizeof(off_t));
@@ -2008,8 +2001,7 @@ done:
if (vp)
vrele(vp);
if (fp)
- fdrop(fp, p);
+ fdrop(fp, td);
mtx_unlock(&Giant);
return (error);
}
-
OpenPOWER on IntegriCloud