PERFORCE change 86081 for review
Robert Watson
rwatson at FreeBSD.org
Sun Oct 30 11:56:32 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=86081
Change 86081 by rwatson at rwatson_zoo on 2005/10/30 19:56:18
Re-inline socket buffer sleep lock assertions, since I'm not
currently using them.
Affected files ...
.. //depot/projects/netsmp/src/sys/kern/uipc_socket.c#18 edit
.. //depot/projects/netsmp/src/sys/kern/uipc_socket2.c#7 edit
.. //depot/projects/netsmp/src/sys/sys/socketvar.h#6 edit
Differences ...
==== //depot/projects/netsmp/src/sys/kern/uipc_socket.c#18 (text+ko) ====
@@ -391,7 +391,6 @@
SOCKBUF_LOCK(&so->so_snd);
so->so_snd.sb_flags |= SB_NOINTR;
(void)sblock(&so->so_snd, M_WAITOK);
- sb_lock_assert(&so->so_snd);
/*
* socantsendmore_locked() drops the socket buffer mutex so that it
* can safely perform wakeups. Re-acquire the mutex before
@@ -924,7 +923,6 @@
error = sblock(&so->so_snd, SBLOCKWAIT(flags));
if (error)
goto out_locked;
- sb_lock_assert(&so->so_snd);
do {
SOCKBUF_LOCK_ASSERT(&so->so_snd);
if (so->so_snd.sb_state & SBS_CANTSENDMORE)
@@ -950,7 +948,6 @@
snderr(so->so_proto->pr_flags & PR_CONNREQUIRED ?
ENOTCONN : EDESTADDRREQ);
}
-
space = sbspace(&so->so_snd);
if (flags & MSG_OOB)
space += 1024;
@@ -1184,7 +1181,6 @@
error = sblock(&so->so_rcv, SBLOCKWAIT(flags));
if (error)
goto out;
- sb_lock_assert(&so->so_rcv);
m = so->so_rcv.sb_mb;
/*
@@ -1423,15 +1419,10 @@
error = uiomoveco(mtod(m, char *) + moff,
(int)len, uio,
disposable);
- SOCKBUF_LOCK(&so->so_rcv);
} else
#endif /* ZERO_COPY_SOCKETS */
- {
- sb_lock_assert(&so->so_rcv);
error = uiomove(mtod(m, char *) + moff, (int)len, uio);
SOCKBUF_LOCK(&so->so_rcv);
- sb_lock_assert(&so->so_rcv);
- }
if (error)
goto release;
} else
@@ -1627,7 +1618,6 @@
SOCKBUF_LOCK(sb);
sb->sb_flags |= SB_NOINTR;
(void) sblock(sb, M_WAITOK);
- sb_lock_assert(sb);
/*
* socantrcvmore_locked() drops the socket buffer mutex so that it
* can safely perform wakeups. Re-acquire the mutex before
==== //depot/projects/netsmp/src/sys/kern/uipc_socket2.c#7 (text+ko) ====
@@ -353,8 +353,6 @@
/*
* Lock a sockbuf already known to be locked;
* return any error returned from sleep (EINTR).
- *
- * XXXRW: Isn't a bit silly that we repeatedly clear and re-set SB_WANT?
*/
int
sb_lock(sb)
@@ -372,70 +370,11 @@
if (error)
return (error);
}
- KASSERT(sb->sb_lock_owner == NULL, ("sb_lock: sb_lock_owner %p",
- sb->sb_lock_owner));
sb->sb_flags |= SB_LOCK;
- sb->sb_lock_owner = curthread;
return (0);
}
/*
- * Un-inlined sblock() macro.
- */
-int
-sblock(sb, wf)
- struct sockbuf *sb;
- int wf;
-{
-
- SOCKBUF_LOCK_ASSERT(sb);
-
- if (sb->sb_flags & SB_LOCK) {
- if (wf == M_WAITOK)
- return (sb_lock(sb));
- else
- return (EWOULDBLOCK);
- }
- sb->sb_flags |= SB_LOCK;
- sb->sb_lock_owner = curthread;
- return (0);
-}
-
-/*
- * Un-inlined sbunlock() macro.
- */
-void
-sbunlock(sb)
- struct sockbuf *sb;
-{
-
- SOCKBUF_LOCK_ASSERT(sb);
- KASSERT(sb->sb_flags & SB_LOCK, ("sbunlock: !SB_LOCK"));
- KASSERT(sb->sb_lock_owner == curthread, ("sbunlock: !curthread"));
-
- sb->sb_flags &= ~SB_LOCK;
- sb->sb_lock_owner = NULL;
- if (sb->sb_flags & SB_WANT) {
- sb->sb_flags &= ~SB_WANT;
- wakeup(&sb->sb_flags);
- }
-}
-
-
-/*
- * We can't assert that the current thread owns the socket buffer sleep lock,
- * but we can at least assert that it is held.
- */
-void
-sb_lock_assert(sb)
- struct sockbuf *sb;
-{
-
- KASSERT(sb->sb_flags & SB_LOCK, ("sb_lock_assert: failed"));
- KASSERT(sb->sb_lock_owner == curthread, ("sb_lock_assert: !curthread"));
-}
-
-/*
* Wakeup processes waiting on a socket buffer. Do asynchronous
* notification via SIGIO if the socket has the SS_ASYNC flag set.
*
==== //depot/projects/netsmp/src/sys/sys/socketvar.h#6 (text+ko) ====
@@ -111,7 +111,6 @@
int sb_lowat; /* (c/d) low water mark */
int sb_timeo; /* (c/d) timeout for read/write */
short sb_flags; /* (c/d) flags, see below */
- struct thread *sb_lock_owner; /* (c/d), sb_lock owner */
} so_rcv, so_snd;
/*
* Constants for sb_flags field of struct sockbuf.
@@ -318,6 +317,25 @@
}
/*
+ * Set lock on sockbuf sb; sleep if lock is already held.
+ * Unless SB_NOINTR is set on sockbuf, sleep is interruptible.
+ * Returns error without lock if sleep is interrupted.
+ */
+#define sblock(sb, wf) ((sb)->sb_flags & SB_LOCK ? \
+ (((wf) == M_WAITOK) ? sb_lock(sb) : EWOULDBLOCK) : \
+ ((sb)->sb_flags |= SB_LOCK), 0)
+
+/* release lock on sockbuf sb */
+#define sbunlock(sb) do { \
+ SOCKBUF_LOCK_ASSERT(sb); \
+ (sb)->sb_flags &= ~SB_LOCK; \
+ if ((sb)->sb_flags & SB_WANT) { \
+ (sb)->sb_flags &= ~SB_WANT; \
+ wakeup(&(sb)->sb_flags); \
+ } \
+} while (0)
+
+/*
* soref()/sorele() ref-count the socket structure. Note that you must
* still explicitly close the socket, but the last ref count will free
* the structure.
@@ -469,10 +487,7 @@
struct thread *td);
void sbtoxsockbuf(struct sockbuf *sb, struct xsockbuf *xsb);
int sbwait(struct sockbuf *sb);
-int sblock(struct sockbuf *sb, int wf);
int sb_lock(struct sockbuf *sb);
-void sb_lock_assert(struct sockbuf *sb);
-void sbunlock(struct sockbuf *sb);
int soabort(struct socket *so);
int soaccept(struct socket *so, struct sockaddr **nam);
struct socket *soalloc(int mflags);
More information about the p4-projects
mailing list