Date: Tue, 9 Dec 2003 11:21:56 -0800 (PST) From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 43690 for review Message-ID: <200312091921.hB9JLu1B016620@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=43690 Change 43690 by sam@sam_ebb on 2003/12/09 11:21:53 remove Giant bandaids not needed with socket locking Affected files ... .. //depot/projects/netperf+sockets/sys/netinet/ip_divert.c#3 edit .. //depot/projects/netperf+sockets/sys/netinet/ip_dummynet.c#4 edit .. //depot/projects/netperf+sockets/sys/netinet/ip_input.c#3 edit .. //depot/projects/netperf+sockets/sys/netinet/ip_mroute.c#3 edit Differences ... ==== //depot/projects/netperf+sockets/sys/netinet/ip_divert.c#3 (text+ko) ==== @@ -223,20 +223,6 @@ sizeof(divsrc.sin_zero)); } - /* - * XXX sbappendaddr must be protected by Giant until - * we have locking at the socket layer. When entered - * from below we come in w/o Giant and must take it - * here. Unfortunately we cannot tell whether we're - * entering from above (already holding Giant), - * below (potentially without Giant), or otherwise - * (e.g. from tcp_syncache through a timeout) so we - * have to grab it regardless. This causes a LOR with - * the tcp lock, at least, and possibly others. For - * the moment we're ignoring this. Once sockets are - * locked this cruft can be removed. - */ - mtx_lock(&Giant); /* Put packet on socket queue, if any */ sa = NULL; nport = htons((u_int16_t)divert_info(mtag)); @@ -258,7 +244,6 @@ INP_UNLOCK(inp); } INP_INFO_RUNLOCK(&divcbinfo); - mtx_unlock(&Giant); if (sa == NULL) { m_freem(m); ipstat.ips_noproto++; ==== //depot/projects/netperf+sockets/sys/netinet/ip_dummynet.c#4 (text+ko) ==== ==== //depot/projects/netperf+sockets/sys/netinet/ip_input.c#3 (text+ko) ==== @@ -925,21 +925,18 @@ * Switch out to protocol's input routine. */ ipstat.ips_delivered++; - NET_PICKUP_GIANT(); if (args.next_hop && ip->ip_p == IPPROTO_TCP) { /* attach next hop info for TCP */ mtag = m_tag_get(PACKET_TAG_IPFORWARD, sizeof(struct sockaddr_in *), M_NOWAIT); if (mtag == NULL) { /* XXX statistic */ - NET_DROP_GIANT(); goto bad; } *(struct sockaddr_in **)(mtag+1) = args.next_hop; m_tag_prepend(m, mtag); } (*inetsw[ip_protox[ip->ip_p]].pr_input)(m, hlen); - NET_DROP_GIANT(); return; bad: m_freem(m); ==== //depot/projects/netperf+sockets/sys/netinet/ip_mroute.c#3 (text+ko) ==== @@ -1289,13 +1289,10 @@ socket_send(struct socket *s, struct mbuf *mm, struct sockaddr_in *src) { if (s) { - mtx_lock(&Giant); /* XXX until sockets are locked */ if (sbappendaddr(&s->so_rcv, (struct sockaddr *)src, mm, NULL) != 0) { sorwakeup(s); - mtx_unlock(&Giant); return 0; } - mtx_unlock(&Giant); } m_freem(mm); return -1;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200312091921.hB9JLu1B016620>