PERFORCE change 102021 for review
John Baldwin
jhb at FreeBSD.org
Thu Jul 20 19:24:09 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=102021
Change 102021 by jhb at jhb_mutex on 2006/07/20 19:24:01
- Use fdclose() to do the extraref stuff.
- Conditionally grab Giant around socreate().
- Remove D_NEEDGIANT.
Affected files ...
.. //depot/projects/smpng/sys/dev/streams/streams.c#31 edit
Differences ...
==== //depot/projects/smpng/sys/dev/streams/streams.c#31 (text+ko) ====
@@ -99,7 +99,6 @@
static struct cdevsw streams_cdevsw = {
.d_version = D_VERSION,
- .d_flags = D_NEEDGIANT,
.d_open = streamsopen,
.d_name = "streams",
};
@@ -184,14 +183,12 @@
static int
streamsopen(struct cdev *dev, int oflags, int devtype, struct thread *td)
{
- int type, protocol;
- int fd, extraref;
+ struct filedesc *fdp;
+ struct svr4_strm *st;
+ struct socket *so;
struct file *fp;
- struct socket *so;
- struct svr4_strm *st;
- int error;
- int family;
- struct proc *p = td->td_proc;
+ int family, type, protocol;
+ int error, fd;
if (td->td_dupfd >= 0)
return ENODEV;
@@ -242,32 +239,26 @@
return EOPNOTSUPP;
}
+ fdp = td->td_proc->p_fd;
if ((error = falloc(td, &fp, &fd)) != 0)
return error;
/* An extra reference on `fp' has been held for us by falloc(). */
- if ((error = socreate(family, &so, type, protocol,
- td->td_ucred, td)) != 0) {
- FILEDESC_LOCK_FAST(p->p_fd);
- /* Check the fd table entry hasn't changed since we made it. */
- extraref = 0;
- if (p->p_fd->fd_ofiles[fd] == fp) {
- p->p_fd->fd_ofiles[fd] = NULL;
- extraref = 1;
- }
- FILEDESC_UNLOCK_FAST(p->p_fd);
- if (extraref)
- fdrop(fp, td);
- fdrop(fp, td);
- return error;
+ NET_LOCK_GIANT();
+ error = socreate(family, &so, type, protocol, td->td_ucred, td);
+ NET_UNLOCK_GIANT();
+ if (error) {
+ fdclose(fdp, fp, fd, td);
+ fdrop(fp, td);
+ return error;
}
- FILEDESC_LOCK_FAST(p->p_fd);
+ FILEDESC_LOCK_FAST(fdp);
fp->f_data = so;
fp->f_flag = FREAD|FWRITE;
fp->f_ops = &svr4_netops;
fp->f_type = DTYPE_SOCKET;
- FILEDESC_UNLOCK_FAST(p->p_fd);
+ FILEDESC_UNLOCK_FAST(fdp);
/*
* Allocate a stream structure and attach it to this socket.
More information about the p4-projects
mailing list