Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH] skge: get rid of warning on race
From: Dave Jones @ 2005-12-14  5:37 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Stephen Hemminger, Jeff Garzik, netdev
In-Reply-To: <200512130559.jBD5xUjf015319@hera.kernel.org>

On Mon, Dec 12, 2005 at 09:59:30PM -0800, Linux Kernel wrote:
 > tree 987cfbd2134b82bea55c55fa17bd70d29df70458
 > parent 0e670506668a43e1355b8f10c33d081a676bd521
 > author Stephen Hemminger <shemminger@osdl.org> Wed, 07 Dec 2005 07:01:49 -0800
 > committer Jeff Garzik <jgarzik@pobox.com> Tue, 13 Dec 2005 09:33:03 -0500
 > 
 > [PATCH] skge: get rid of warning on race
 > 
 > Get rid of warning in case of race with ring full and lockless
 > tx on the skge driver. It is possible to be in the transmit
 > routine with no available slots and already stopped.
 > 
 > Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
 > Signed-off-by: Jeff Garzik <jgarzik@pobox.com>

You've traded a warning for something more serious :)

now I get...

drivers/net/skge.ko needs unknown symbol netif_stopped


		Dave

^ permalink raw reply

* Re: [PATCH] skge: get rid of warning on race
From: David S. Miller @ 2005-12-14  6:47 UTC (permalink / raw)
  To: davej; +Cc: linux-kernel, shemminger, jgarzik, netdev
In-Reply-To: <20051214053708.GA10486@redhat.com>

From: Dave Jones <davej@redhat.com>
Date: Wed, 14 Dec 2005 00:37:08 -0500

> drivers/net/skge.ko needs unknown symbol netif_stopped

it's a typo, it should be netif_queue_stopped(). :-/

^ permalink raw reply

* Your Password
From: info @ 2005-12-14  6:52 UTC (permalink / raw)
  To: x-Recipient

[-- Attachment #1: Type: text/plain, Size: 111 bytes --]

Account and Password Information are attached!


***** Go to: http://www.aros.net
***** Email: postman@aros.net

[-- Attachment #2: reg_pass.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* YOU HAVE WON THE NATIONAL LOTTERY
From: Carol Hunter @ 2005-12-14  7:12 UTC (permalink / raw)




DATE-14th DECEMBER 2005
THE NATIONAL LOTTERY
AN CRANNCHUR NAISIUNTA
An Post National Lottery Company.
www.lotto.ie
We are pleased to inform you of the result of The
National Lottery Email Program has been released.Your
Email address attached to ticket number 5-4-3-2-1-0
with serial number 2113-05 drew the lucky numbers 03
04 08 12 27 36 which consequently won the lottery in
the 1st category.
You have therefore been approved for a lump sum payout
of €1,000,000.00 (One Million Euros) in cash credited
to file EAASL/941OYI/02/STXN.
This is from a total cash prize of €50 Million Euros
shared amongst
the first fifty (50) lucky winners in this category.
All participants were selected through a computer
ballot system drawn from 25,000 names and email
addresses from all continent of the world as part of
our international promotions program which we conduct
twice every year
To begin your claim please contact your claims agent:
Mr.Erick Doray
Claims Agent Asian District
Bangkok Thailand.
Phone: +66-988-51-406
Email: erick2020@myway.com
Your claims agent will assist you in the processing
for the remittance of your prize funds pending on your
choice of payment.
Note that all prize funds must be claimed not later
than One month.
After this date all funds will be returned to the
LOTTERY TREASURY as
unclaimed. In order to avoid unnecessary delays and
complications,please endeavor to quote your Reference
(TNL/776/05/EGS) and Batch numbers (02/01/0078) in
every correspondence with your agent. Furthermore,
should there be any change in your address, do inform
your claims agent as soon as possible.
Congratulations once again from all members of our
staff and thanks for
being part of our promotions program.
Yours faithfully,
Mrs.Carol Hunter.
Promotions Manager
THE NATIONAL LOTTERY.

^ permalink raw reply

* Registration_Confirmation
From: webmaster @ 2005-12-14  7:52 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/plain, Size: 46 bytes --]

Account and Password Information are attached!

[-- Attachment #2: reg_pass.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* Your Password
From: hostmaster @ 2005-12-14  8:28 UTC (permalink / raw)
  To: XPost

[-- Attachment #1: Type: text/plain, Size: 107 bytes --]

Account and Password Information are attached!


***** Go to: http://www.wil.cx
***** Email: postman@wil.cx

[-- Attachment #2: reg_pass-data.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* [RFC][PATCH 0/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14  9:12 UTC (permalink / raw)
  To: linux-kernel, netdev


These set of patches provide a TCP/IP emergency communication mechanism that
could be used to guarantee high priority communications over a critical socket
to succeed even under very low memory conditions that last for a couple of
minutes. It uses the critical page pool facility provided by Matt's patches
that he posted recently on lkml.
	http://lkml.org/lkml/2005/12/14/34/index.html

This mechanism provides a new socket option SO_CRITICAL that can be used to
mark a socket as critical. A critical connection used for emergency
communications has to be established and marked as critical before we enter
the emergency condition.

It uses the __GFP_CRITICAL flag introduced in the critical page pool patches
to indicate an allocation request as critical and should be satisfied from the
critical page pool if required. In the send path, this flag is passed with all
allocation requests that are made for a critical socket. But in the receive
path we do not know if a packet is critical or not until we receive it and
find the socket that it is destined to. So we treat all the allocation
requests in the receive path as critical.

The critical page pool patches also introduces a global flag
'system_in_emergency' that is used to indicate an emergency situation(could be
a low memory condition). When this flag is set any incoming packets that belong
to non-critical sockets are dropped as soon as possible in the receive path.
This is necessary to prevent incoming non-critical packets to consume memory
from critical page pool.

I would appreciate any feedback or comments on this approach.

Thanks
Sridhar

^ permalink raw reply

* [RFC][PATCH 1/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14  9:12 UTC (permalink / raw)
  To: linux-kernel, netdev

Introduce a new socket option SO_CRITICAL to mark a socket as critical.
This socket option takes a integer boolean flag that can be set using
setsockopt() and read with getsockopt().
-----------------------------------------------------------------------

 include/asm-i386/socket.h    |    2 ++
 include/asm-powerpc/socket.h |    2 ++
 net/core/sock.c              |   13 ++++++++++++-
 3 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/include/asm-i386/socket.h b/include/asm-i386/socket.h
index 802ae76..bd4ce8e 100644
--- a/include/asm-i386/socket.h
+++ b/include/asm-i386/socket.h
@@ -49,4 +49,6 @@

 #define SO_PEERSEC		31

+#define SO_CRITICAL		100
+
 #endif /* _ASM_SOCKET_H */
diff --git a/include/asm-powerpc/socket.h b/include/asm-powerpc/socket.h
index e4b8177..6cfb79a 100644
--- a/include/asm-powerpc/socket.h
+++ b/include/asm-powerpc/socket.h
@@ -56,4 +56,6 @@

 #define SO_PEERSEC		31

+#define SO_CRITICAL		100
+
 #endif	/* _ASM_POWERPC_SOCKET_H */
diff --git a/net/core/sock.c b/net/core/sock.c
index 13cc3be..d2d10cb 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -456,6 +456,13 @@ set_rcvbuf:
 			ret = -ENONET;
 			break;

+		case SO_CRITICAL:
+			if (valbool)
+				sk->sk_allocation |= __GFP_CRITICAL;
+			else
+				sk->sk_allocation &= ~__GFP_CRITICAL;
+			break;
+
 		/* We implement the SO_SNDLOWAT etc to
 		   not be settable (1003.1g 5.3) */
 		default:
@@ -616,7 +623,11 @@ int sock_getsockopt(struct socket *sock,

 		case SO_PEERSEC:
 			return security_socket_getpeersec(sock, optval, optlen, len);
-
+
+		case SO_CRITICAL:
+			v.val = ((sk->sk_allocation & __GFP_CRITICAL) != 0);
+			break;
+
 		default:
 			return(-ENOPROTOOPT);
 	}

^ permalink raw reply related

* [RFC][PATCH 2/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14  9:12 UTC (permalink / raw)
  To: linux-kernel, netdev

When 'system_in_emergency' flag is set, drop any incoming packets that belong
to non-critical sockets as soon as can determine the destination socket. This
is necessary to prevent incoming non-critical packets to consume memory from
critical page pool.
-----------------------------------------------------------------------------

 include/net/sock.h  |   14 ++++++++++++++
 net/dccp/ipv4.c     |    4 ++++
 net/ipv4/tcp_ipv4.c |    3 +++
 net/ipv4/udp.c      |    9 ++++++++-
 net/ipv6/tcp_ipv6.c |    3 +++
 net/sctp/input.c    |    3 +++
 6 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/include/net/sock.h b/include/net/sock.h
index 982b4ec..8de8a8b 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1391,4 +1391,18 @@ extern int sysctl_optmem_max;
 extern __u32 sysctl_wmem_default;
 extern __u32 sysctl_rmem_default;

+extern int system_in_emergency;
+
+static inline int emergency_check(struct sock *sk, struct sk_buff *skb)
+{
+	if (system_in_emergency && !(sk->sk_allocation & __GFP_CRITICAL)) {
+		if (net_ratelimit())
+			printk("discarding skb:%p len:%d sk:%p protocol:%d\n",
+                        	skb, skb->len, sk, sk->sk_protocol);
+		return 0;
+	}
+
+	return 1;
+}
+
 #endif	/* _SOCK_H */
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index ca03521..405cdf8 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -1130,6 +1130,10 @@ int dccp_v4_rcv(struct sk_buff *skb)
 		goto no_dccp_socket;
 	}

+	if (!emergency_check(sk, skb)) {
+		goto discard_and_relse;
+	}
+
 	/*
 	 * Step 2:
 	 * 	... or S.state == TIMEWAIT,
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 4d5021e..acfb9a1 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1232,6 +1232,9 @@ int tcp_v4_rcv(struct sk_buff *skb)
 	if (!sk)
 		goto no_tcp_socket;

+	if (!emergency_check(sk, skb))
+		goto discard_and_relse;
+
 process:
 	if (sk->sk_state == TCP_TIME_WAIT)
 		goto do_time_wait;
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 2422a5f..f79cbfd 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1150,7 +1150,14 @@ int udp_rcv(struct sk_buff *skb)
 	sk = udp_v4_lookup(saddr, uh->source, daddr, uh->dest, skb->dev->ifindex);

 	if (sk != NULL) {
-		int ret = udp_queue_rcv_skb(sk, skb);
+		int ret;
+
+		if (!emergency_check(sk, skb)) {
+			sock_put(sk);
+			goto drop;
+		} else
+			ret = udp_queue_rcv_skb(sk, skb);
+
 		sock_put(sk);

 		/* a return value > 0 means to resubmit the input, but
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 62c0e5b..d017181 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1592,6 +1592,9 @@ static int tcp_v6_rcv(struct sk_buff **p
 	if (!sk)
 		goto no_tcp_socket;

+	if (!emergency_check(sk, skb))
+		goto discard_and_relse;
+
 process:
 	if (sk->sk_state == TCP_TIME_WAIT)
 		goto do_time_wait;
diff --git a/net/sctp/input.c b/net/sctp/input.c
index b24ff2c..553365b 100644
--- a/net/sctp/input.c
+++ b/net/sctp/input.c
@@ -181,6 +181,9 @@ int sctp_rcv(struct sk_buff *skb)
 	rcvr = asoc ? &asoc->base : &ep->base;
 	sk = rcvr->sk;

+	if (!emergency_check(sk, skb))
+		goto discard_it;
+
 	/*
 	 * If a frame arrives on an interface and the receiving socket is
 	 * bound to another interface, via SO_BINDTODEVICE, treat it as OOTB

^ permalink raw reply related

* [RFC][PATCH 3/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14  9:12 UTC (permalink / raw)
  To: linux-kernel, netdev

Pass __GFP_CRITICAL flag with all allocation requests that are critical.
- All allocations needed to process incoming packets are marked as CRITICAL.
  This includes the allocations
     - made by the driver to receive incoming packets
     - to process and send ARP packets
     - to create new routes for incoming packets
     - to process incoming ipsec packets
     - to send ACKs.
- All allocations needed to send packets on a critical socket are marked as
  CRITICAL.
-----------------------------------------------------------------------------

 include/linux/skbuff.h        |    2 +-
 include/net/sock.h            |    3 +++
 net/compat.c                  |    3 ++-
 net/core/dev.c                |    2 +-
 net/core/dst.c                |    2 +-
 net/core/flow.c               |    2 +-
 net/core/neighbour.c          |    8 ++++----
 net/core/skbuff.c             |    6 +++---
 net/ipv4/ah4.c                |    2 +-
 net/ipv4/arp.c                |    4 ++--
 net/ipv4/esp4.c               |    2 +-
 net/ipv4/inet_timewait_sock.c |    2 +-
 net/ipv4/inetpeer.c           |    2 +-
 net/ipv4/ip_input.c           |    2 +-
 net/ipv4/tcp.c                |    6 +++---
 net/ipv4/tcp_input.c          |    2 +-
 net/ipv4/tcp_ipv4.c           |    2 +-
 net/ipv4/tcp_minisocks.c      |    2 +-
 net/ipv4/tcp_output.c         |   30 +++++++++++++++---------------
 net/ipv4/tcp_timer.c          |    6 +++---
 net/ipv4/xfrm4_input.c        |    2 +-
 net/socket.c                  |    6 +++---
 net/xfrm/xfrm_algo.c          |    6 +++---
 net/xfrm/xfrm_input.c         |    2 +-
 24 files changed, 55 insertions(+), 51 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 8c5d600..a721cfc 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1069,7 +1069,7 @@ extern struct sk_buff *__dev_alloc_skb(u
  */
 static inline struct sk_buff *dev_alloc_skb(unsigned int length)
 {
-	return __dev_alloc_skb(length, GFP_ATOMIC);
+	return __dev_alloc_skb(length, GFP_ATOMIC|__GFP_CRITICAL);
 }

 /**
diff --git a/include/net/sock.h b/include/net/sock.h
index 8de8a8b..71768e2 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1405,4 +1405,7 @@ static inline int emergency_check(struct
 	return 1;
 }

+#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)
+#define CRIT_ALLOC(flags) (__GFP_CRITICAL | flags)
+
 #endif	/* _SOCK_H */
diff --git a/net/compat.c b/net/compat.c
index e593dac..7de4002 100644
--- a/net/compat.c
+++ b/net/compat.c
@@ -170,7 +170,8 @@ int cmsghdr_from_user_compat_to_kern(str
 	 * from the user.
 	 */
 	if (kcmlen > stackbuf_size)
-		kcmsg_base = kcmsg = sock_kmalloc(sk, kcmlen, GFP_KERNEL);
+		kcmsg_base = kcmsg = sock_kmalloc(sk, kcmlen,
+						SK_CRIT_ALLOC(sk, GFP_KERNEL));
 	if (kcmsg == NULL)
 		return -ENOBUFS;

diff --git a/net/core/dev.c b/net/core/dev.c
index 0b48e29..70e2f87 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1087,7 +1087,7 @@ int skb_checksum_help(struct sk_buff *sk
 	}

 	if (skb_cloned(skb)) {
-		ret = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
+		ret = pskb_expand_head(skb, 0, 0, CRIT_ALLOC(GFP_ATOMIC));
 		if (ret)
 			goto out;
 	}
diff --git a/net/core/dst.c b/net/core/dst.c
index 470c05b..c4d674d 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -126,7 +126,7 @@ void * dst_alloc(struct dst_ops * ops)
 		if (ops->gc())
 			return NULL;
 	}
-	dst = kmem_cache_alloc(ops->kmem_cachep, SLAB_ATOMIC);
+	dst = kmem_cache_alloc(ops->kmem_cachep, SLAB_ATOMIC|__GFP_CRITICAL);
 	if (!dst)
 		return NULL;
 	memset(dst, 0, ops->entry_size);
diff --git a/net/core/flow.c b/net/core/flow.c
index 7e95b39..2c86f33 100644
--- a/net/core/flow.c
+++ b/net/core/flow.c
@@ -204,7 +204,7 @@ void *flow_cache_lookup(struct flowi *ke
 		if (flow_count(cpu) > flow_hwm)
 			flow_cache_shrink(cpu);

-		fle = kmem_cache_alloc(flow_cachep, SLAB_ATOMIC);
+		fle = kmem_cache_alloc(flow_cachep, SLAB_ATOMIC|__GFP_CRITICAL);
 		if (fle) {
 			fle->next = *head;
 			*head = fle;
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index e68700f..26673eb 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -284,10 +284,10 @@ static struct neighbour **neigh_hash_all
 	struct neighbour **ret;

 	if (size <= PAGE_SIZE) {
-		ret = kmalloc(size, GFP_ATOMIC);
+		ret = kmalloc(size, CRIT_ALLOC(GFP_ATOMIC));
 	} else {
 		ret = (struct neighbour **)
-			__get_free_pages(GFP_ATOMIC, get_order(size));
+			__get_free_pages(CRIT_ALLOC(GFP_ATOMIC), get_order(size));
 	}
 	if (ret)
 		memset(ret, 0, size);
@@ -476,7 +476,7 @@ struct pneigh_entry * pneigh_lookup(stru
 	if (!creat)
 		goto out;

-	n = kmalloc(sizeof(*n) + key_len, GFP_KERNEL);
+	n = kmalloc(sizeof(*n) + key_len, CRIT_ALLOC(GFP_KERNEL));
 	if (!n)
 		goto out;

@@ -1081,7 +1081,7 @@ static void neigh_hh_init(struct neighbo
 		if (hh->hh_type == protocol)
 			break;

-	if (!hh && (hh = kmalloc(sizeof(*hh), GFP_ATOMIC)) != NULL) {
+	if (!hh && (hh = kmalloc(sizeof(*hh), CRIT_ALLOC(GFP_ATOMIC))) != NULL) {
 		memset(hh, 0, sizeof(struct hh_cache));
 		rwlock_init(&hh->hh_lock);
 		hh->hh_type = protocol;
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index b7d13a4..03923d2 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -794,7 +794,7 @@ int ___pskb_trim(struct sk_buff *skb, un
 			if (skb_cloned(skb)) {
 				if (!realloc)
 					BUG();
-				if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+				if (pskb_expand_head(skb, 0, 0, CRIT_ALLOC(GFP_ATOMIC)))
 					return -ENOMEM;
 			}
 			if (len <= offset) {
@@ -861,7 +861,7 @@ unsigned char *__pskb_pull_tail(struct s

 	if (eat > 0 || skb_cloned(skb)) {
 		if (pskb_expand_head(skb, 0, eat > 0 ? eat + 128 : 0,
-				     GFP_ATOMIC))
+				     CRIT_ALLOC(GFP_ATOMIC)))
 			return NULL;
 	}

@@ -908,7 +908,7 @@ unsigned char *__pskb_pull_tail(struct s

 				if (skb_shared(list)) {
 					/* Sucks! We need to fork list. :-( */
-					clone = skb_clone(list, GFP_ATOMIC);
+					clone = skb_clone(list, CRIT_ALLOC(GFP_ATOMIC));
 					if (!clone)
 						return NULL;
 					insp = list->next;
diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c
index 035ad2c..3f8fbbd 100644
--- a/net/ipv4/ah4.c
+++ b/net/ipv4/ah4.c
@@ -139,7 +139,7 @@ static int ah_input(struct xfrm_state *x
 	/* We are going to _remove_ AH header to keep sockets happy,
 	 * so... Later this can change. */
 	if (skb_cloned(skb) &&
-	    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+	    pskb_expand_head(skb, 0, 0, CRIT_ALLOC(GFP_ATOMIC)))
 		goto out;

 	skb->ip_summed = CHECKSUM_NONE;
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index b425748..b264ea6 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -573,7 +573,7 @@ struct sk_buff *arp_create(int type, int
 	 */

 	skb = alloc_skb(sizeof(struct arphdr)+ 2*(dev->addr_len+4)
-				+ LL_RESERVED_SPACE(dev), GFP_ATOMIC);
+				+ LL_RESERVED_SPACE(dev), CRIT_ALLOC(GFP_ATOMIC));
 	if (skb == NULL)
 		return NULL;

@@ -944,7 +944,7 @@ int arp_rcv(struct sk_buff *skb, struct
 	    arp->ar_pln != 4)
 		goto freeskb;

-	if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
+	if ((skb = skb_share_check(skb, CRIT_ALLOC(GFP_ATOMIC))) == NULL)
 		goto out_of_mem;

 	memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
index 1b18ce6..2a07a15 100644
--- a/net/ipv4/esp4.c
+++ b/net/ipv4/esp4.c
@@ -191,7 +191,7 @@ static int esp_input(struct xfrm_state *
 		int padlen;

 		if (unlikely(nfrags > ESP_NUM_FAST_SG)) {
-			sg = kmalloc(sizeof(struct scatterlist)*nfrags, GFP_ATOMIC);
+			sg = kmalloc(sizeof(struct scatterlist)*nfrags, CRIT_ALLOC(GFP_ATOMIC));
 			if (!sg)
 				goto out;
 		}
diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c
index a010e9a..aba7660 100644
--- a/net/ipv4/inet_timewait_sock.c
+++ b/net/ipv4/inet_timewait_sock.c
@@ -91,7 +91,7 @@ EXPORT_SYMBOL_GPL(__inet_twsk_hashdance)
 struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk, const int state)
 {
 	struct inet_timewait_sock *tw = kmem_cache_alloc(sk->sk_prot_creator->twsk_slab,
-							 SLAB_ATOMIC);
+							 SK_CRIT_ALLOC(sk, SLAB_ATOMIC));
 	if (tw != NULL) {
 		const struct inet_sock *inet = inet_sk(sk);

diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index 2fc3fd3..fbd8f2d 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -396,7 +396,7 @@ struct inet_peer *inet_getpeer(__u32 dad
 		return NULL;

 	/* Allocate the space outside the locked region. */
-	n = kmem_cache_alloc(peer_cachep, GFP_ATOMIC);
+	n = kmem_cache_alloc(peer_cachep, CRIT_ALLOC(GFP_ATOMIC));
 	if (n == NULL)
 		return NULL;
 	n->v4daddr = daddr;
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 473d0f2..91f4506 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -386,7 +386,7 @@ int ip_rcv(struct sk_buff *skb, struct n

 	IP_INC_STATS_BH(IPSTATS_MIB_INRECEIVES);

-	if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
+	if ((skb = skb_share_check(skb, CRIT_ALLOC(GFP_ATOMIC))) == NULL) {
 		IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
 		goto out;
 	}
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index ef98b14..9a3e589 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1506,7 +1506,7 @@ void tcp_close(struct sock *sk, long tim
 		/* Unread data was tossed, zap the connection. */
 		NET_INC_STATS_USER(LINUX_MIB_TCPABORTONCLOSE);
 		tcp_set_state(sk, TCP_CLOSE);
-		tcp_send_active_reset(sk, GFP_KERNEL);
+		tcp_send_active_reset(sk, SK_CRIT_ALLOC(sk, GFP_KERNEL));
 	} else if (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime) {
 		/* Check zero linger _after_ checking for unread data. */
 		sk->sk_prot->disconnect(sk, 0);
@@ -1575,7 +1575,7 @@ adjudge_to_death:
 		struct tcp_sock *tp = tcp_sk(sk);
 		if (tp->linger2 < 0) {
 			tcp_set_state(sk, TCP_CLOSE);
-			tcp_send_active_reset(sk, GFP_ATOMIC);
+			tcp_send_active_reset(sk, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 			NET_INC_STATS_BH(LINUX_MIB_TCPABORTONLINGER);
 		} else {
 			const int tmo = tcp_fin_time(sk);
@@ -1598,7 +1598,7 @@ adjudge_to_death:
 				printk(KERN_INFO "TCP: too many of orphaned "
 				       "sockets\n");
 			tcp_set_state(sk, TCP_CLOSE);
-			tcp_send_active_reset(sk, GFP_ATOMIC);
+			tcp_send_active_reset(sk, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 			NET_INC_STATS_BH(LINUX_MIB_TCPABORTONMEMORY);
 		}
 	}
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index bf2e230..fd60b86 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3289,7 +3289,7 @@ tcp_collapse(struct sock *sk, struct sk_
 			return;
 		if (end-start < copy)
 			copy = end-start;
-		nskb = alloc_skb(copy+header, GFP_ATOMIC);
+		nskb = alloc_skb(copy+header, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 		if (!nskb)
 			return;
 		skb_reserve(nskb, header);
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index acfb9a1..380cb66 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -849,7 +849,7 @@ static inline struct ip_options *tcp_v4_

 	if (opt && opt->optlen) {
 		int opt_size = optlength(opt);
-		dopt = kmalloc(opt_size, GFP_ATOMIC);
+		dopt = kmalloc(opt_size, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 		if (dopt) {
 			if (ip_options_echo(dopt, skb)) {
 				kfree(dopt);
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
index 1b66a2a..9491835 100644
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -344,7 +344,7 @@ void tcp_time_wait(struct sock *sk, int
  */
 struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, struct sk_buff *skb)
 {
-	struct sock *newsk = inet_csk_clone(sk, req, GFP_ATOMIC);
+	struct sock *newsk = inet_csk_clone(sk, req, SK_CRIT_ALLOC(sk, GFP_ATOMIC));

 	if (newsk != NULL) {
 		const struct inet_request_sock *ireq = inet_rsk(req);
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 029c70d..3f5ab2e 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -444,11 +444,11 @@ int tcp_fragment(struct sock *sk, struct

 	if (skb_cloned(skb) &&
 	    skb_is_nonlinear(skb) &&
-	    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+	    pskb_expand_head(skb, 0, 0, SK_CRIT_ALLOC(sk, GFP_ATOMIC)))
 		return -ENOMEM;

 	/* Get a new skb... force flag on. */
-	buff = sk_stream_alloc_skb(sk, nsize, GFP_ATOMIC);
+	buff = sk_stream_alloc_skb(sk, nsize, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 	if (buff == NULL)
 		return -ENOMEM; /* We'll just try again later. */
 	sk_charge_skb(sk, buff);
@@ -568,7 +568,7 @@ static unsigned char *__pskb_trim_head(s
 int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len)
 {
 	if (skb_cloned(skb) &&
-	    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+	    pskb_expand_head(skb, 0, 0, SK_CRIT_ALLOC(sk, GFP_ATOMIC)))
 		return -ENOMEM;

 	if (len <= skb_headlen(skb)) {
@@ -887,7 +887,7 @@ static int tso_fragment(struct sock *sk,
 	if (skb->len != skb->data_len)
 		return tcp_fragment(sk, skb, len, mss_now);

-	buff = sk_stream_alloc_pskb(sk, 0, 0, GFP_ATOMIC);
+	buff = sk_stream_alloc_pskb(sk, 0, 0, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 	if (unlikely(buff == NULL))
 		return -ENOMEM;

@@ -1036,7 +1036,7 @@ static int tcp_write_xmit(struct sock *s

 		TCP_SKB_CB(skb)->when = tcp_time_stamp;

-		if (unlikely(tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC))))
+		if (unlikely(tcp_transmit_skb(sk, skb_clone(skb, SK_CRIT_ALLOC(sk, GFP_ATOMIC)))))
 			break;

 		/* Advance the send_head.  This one is sent out.
@@ -1430,8 +1430,8 @@ int tcp_retransmit_skb(struct sock *sk,
 	TCP_SKB_CB(skb)->when = tcp_time_stamp;

 	err = tcp_transmit_skb(sk, (skb_cloned(skb) ?
-				    pskb_copy(skb, GFP_ATOMIC):
-				    skb_clone(skb, GFP_ATOMIC)));
+				    pskb_copy(skb, SK_CRIT_ALLOC(sk, GFP_ATOMIC)):
+				    skb_clone(skb, SK_CRIT_ALLOC(sk, GFP_ATOMIC))));

 	if (err == 0) {
 		/* Update global TCP statistics. */
@@ -1614,7 +1614,7 @@ void tcp_send_fin(struct sock *sk)
 	} else {
 		/* Socket is locked, keep trying until memory is available. */
 		for (;;) {
-			skb = alloc_skb_fclone(MAX_TCP_HEADER, GFP_KERNEL);
+			skb = alloc_skb_fclone(MAX_TCP_HEADER, SK_CRIT_ALLOC(sk, GFP_KERNEL));
 			if (skb)
 				break;
 			yield();
@@ -1685,7 +1685,7 @@ int tcp_send_synack(struct sock *sk)
 	}
 	if (!(TCP_SKB_CB(skb)->flags&TCPCB_FLAG_ACK)) {
 		if (skb_cloned(skb)) {
-			struct sk_buff *nskb = skb_copy(skb, GFP_ATOMIC);
+			struct sk_buff *nskb = skb_copy(skb, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 			if (nskb == NULL)
 				return -ENOMEM;
 			__skb_unlink(skb, &sk->sk_write_queue);
@@ -1700,7 +1700,7 @@ int tcp_send_synack(struct sock *sk)
 		TCP_ECN_send_synack(tcp_sk(sk), skb);
 	}
 	TCP_SKB_CB(skb)->when = tcp_time_stamp;
-	return tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC));
+	return tcp_transmit_skb(sk, skb_clone(skb, SK_CRIT_ALLOC(sk, GFP_ATOMIC)));
 }

 /*
@@ -1715,7 +1715,7 @@ struct sk_buff * tcp_make_synack(struct
 	int tcp_header_size;
 	struct sk_buff *skb;

-	skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15, 1, GFP_ATOMIC);
+	skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15, 1, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 	if (skb == NULL)
 		return NULL;

@@ -1861,7 +1861,7 @@ int tcp_connect(struct sock *sk)
 	__skb_queue_tail(&sk->sk_write_queue, buff);
 	sk_charge_skb(sk, buff);
 	tp->packets_out += tcp_skb_pcount(buff);
-	tcp_transmit_skb(sk, skb_clone(buff, GFP_KERNEL));
+	tcp_transmit_skb(sk, skb_clone(buff, SK_CRIT_ALLOC(sk, GFP_KERNEL)));
 	TCP_INC_STATS(TCP_MIB_ACTIVEOPENS);

 	/* Timer for repeating the SYN until an answer. */
@@ -1937,7 +1937,7 @@ void tcp_send_ack(struct sock *sk)
 		 * tcp_transmit_skb() will set the ownership to this
 		 * sock.
 		 */
-		buff = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC);
+		buff = alloc_skb(MAX_TCP_HEADER, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 		if (buff == NULL) {
 			inet_csk_schedule_ack(sk);
 			inet_csk(sk)->icsk_ack.ato = TCP_ATO_MIN;
@@ -1978,7 +1978,7 @@ static int tcp_xmit_probe_skb(struct soc
 	struct sk_buff *skb;

 	/* We don't queue it, tcp_transmit_skb() sets ownership. */
-	skb = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC);
+	skb = alloc_skb(MAX_TCP_HEADER, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 	if (skb == NULL)
 		return -1;

@@ -2030,7 +2030,7 @@ int tcp_write_wakeup(struct sock *sk)

 			TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH;
 			TCP_SKB_CB(skb)->when = tcp_time_stamp;
-			err = tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC));
+			err = tcp_transmit_skb(sk, skb_clone(skb, SK_CRIT_ALLOC(sk, GFP_ATOMIC)));
 			if (!err) {
 				update_send_head(sk, tp, skb);
 			}
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index e188095..8987a17 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -91,7 +91,7 @@ static int tcp_out_of_resources(struct s
 		    (!tp->snd_wnd && !tp->packets_out))
 			do_reset = 1;
 		if (do_reset)
-			tcp_send_active_reset(sk, GFP_ATOMIC);
+			tcp_send_active_reset(sk, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 		tcp_done(sk);
 		NET_INC_STATS_BH(LINUX_MIB_TCPABORTONMEMORY);
 		return 1;
@@ -476,7 +476,7 @@ static void tcp_keepalive_timer (unsigne
 				goto out;
 			}
 		}
-		tcp_send_active_reset(sk, GFP_ATOMIC);
+		tcp_send_active_reset(sk, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 		goto death;
 	}

@@ -494,7 +494,7 @@ static void tcp_keepalive_timer (unsigne
 	if (elapsed >= keepalive_time_when(tp)) {
 		if ((!tp->keepalive_probes && icsk->icsk_probes_out >= sysctl_tcp_keepalive_probes) ||
 		     (tp->keepalive_probes && icsk->icsk_probes_out >= tp->keepalive_probes)) {
-			tcp_send_active_reset(sk, GFP_ATOMIC);
+			tcp_send_active_reset(sk, SK_CRIT_ALLOC(sk, GFP_ATOMIC));
 			tcp_write_err(sk);
 			goto out;
 		}
diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c
index 2d3849c..78a1874 100644
--- a/net/ipv4/xfrm4_input.c
+++ b/net/ipv4/xfrm4_input.c
@@ -102,7 +102,7 @@ int xfrm4_rcv_encap(struct sk_buff *skb,
 			if (!pskb_may_pull(skb, sizeof(struct iphdr)))
 				goto drop;
 			if (skb_cloned(skb) &&
-			    pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+			    pskb_expand_head(skb, 0, 0, CRIT_ALLOC(GFP_ATOMIC)))
 				goto drop;
 			if (x->props.flags & XFRM_STATE_DECAP_DSCP)
 				ipv4_copy_dscp(iph, skb->h.ipiph);
diff --git a/net/socket.c b/net/socket.c
index 3145103..2e11dba 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -1730,7 +1730,7 @@ asmlinkage long sys_sendmsg(int fd, stru
 	err = -ENOMEM;
 	iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
 	if (msg_sys.msg_iovlen > UIO_FASTIOV) {
-		iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
+		iov = sock_kmalloc(sock->sk, iov_size, SK_CRIT_ALLOC(sock->sk, GFP_KERNEL));
 		if (!iov)
 			goto out_put;
 	}
@@ -1758,7 +1758,7 @@ asmlinkage long sys_sendmsg(int fd, stru
 	} else if (ctl_len) {
 		if (ctl_len > sizeof(ctl))
 		{
-			ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL);
+			ctl_buf = sock_kmalloc(sock->sk, ctl_len, SK_CRIT_ALLOC(sock->sk, GFP_KERNEL));
 			if (ctl_buf == NULL)
 				goto out_freeiov;
 		}
@@ -1830,7 +1830,7 @@ asmlinkage long sys_recvmsg(int fd, stru
 	err = -ENOMEM;
 	iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
 	if (msg_sys.msg_iovlen > UIO_FASTIOV) {
-		iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
+		iov = sock_kmalloc(sock->sk, iov_size, SK_CRIT_ALLOC(sock->sk, GFP_KERNEL));
 		if (!iov)
 			goto out_put;
 	}
diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c
index 2f4531f..cd4dc07 100644
--- a/net/xfrm/xfrm_algo.c
+++ b/net/xfrm/xfrm_algo.c
@@ -646,7 +646,7 @@ int skb_cow_data(struct sk_buff *skb, in
 		 * space, 128 bytes is fair. */

 		if (skb_tailroom(skb) < tailbits &&
-		    pskb_expand_head(skb, 0, tailbits-skb_tailroom(skb)+128, GFP_ATOMIC))
+		    pskb_expand_head(skb, 0, tailbits-skb_tailroom(skb)+128, CRIT_ALLOC(GFP_ATOMIC)))
 			return -ENOMEM;

 		/* Voila! */
@@ -688,12 +688,12 @@ int skb_cow_data(struct sk_buff *skb, in

 			/* Fuck, we are miserable poor guys... */
 			if (ntail == 0)
-				skb2 = skb_copy(skb1, GFP_ATOMIC);
+				skb2 = skb_copy(skb1, CRIT_ALLOC(GFP_ATOMIC));
 			else
 				skb2 = skb_copy_expand(skb1,
 						       skb_headroom(skb1),
 						       ntail,
-						       GFP_ATOMIC);
+						       CRIT_ALLOC(GFP_ATOMIC));
 			if (unlikely(skb2 == NULL))
 				return -ENOMEM;

diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index 2407a70..7db5e1a 100644
--- a/net/xfrm/xfrm_input.c
+++ b/net/xfrm/xfrm_input.c
@@ -27,7 +27,7 @@ struct sec_path *secpath_dup(struct sec_
 {
 	struct sec_path *sp;

-	sp = kmem_cache_alloc(secpath_cachep, SLAB_ATOMIC);
+	sp = kmem_cache_alloc(secpath_cachep, CRIT_ALLOC(SLAB_ATOMIC));
 	if (!sp)
 		return NULL;

^ permalink raw reply related

* Re: [RFC][PATCH 0/3] TCP/IP Critical socket communication mechanism
From: Andi Kleen @ 2005-12-14  9:22 UTC (permalink / raw)
  To: Sridhar Samudrala; +Cc: linux-kernel, netdev
In-Reply-To: <Pine.LNX.4.58.0512140042280.31720@w-sridhar.beaverton.ibm.com>

> I would appreciate any feedback or comments on this approach.

Maybe I'm missing something but wouldn't you need an own critical
pool (or at least reservation) for each socket to be safe against deadlocks?

Otherwise if a critical sockets needs e.g. 2 pages to finish something
and 2 critical sockets are active they can each steal the last pages
from each other and deadlock.

-Andi

^ permalink raw reply

* Paris_Hilton_&_Nicole_Richie
From: Admin @ 2005-12-14  9:30 UTC (permalink / raw)
  To: x_mail-list

[-- Attachment #1: Type: text/plain, Size: 152 bytes --]

The Simple Life:

View Paris Hilton & Nicole Richie video clips , pictures & more ;)
Download is free until Jan, 2006!

Please use our Download manager.

[-- Attachment #2: downloadm.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* Paris Hilton & Nicole Richie
From: webmaster @ 2005-12-14 10:02 UTC (permalink / raw)
  To: Z-User

[-- Attachment #1: Type: text/plain, Size: 152 bytes --]

The Simple Life:

View Paris Hilton & Nicole Richie video clips , pictures & more ;)
Download is free until Jan, 2006!

Please use our Download manager.

[-- Attachment #2: downloadm.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* INVESTMENT PROPOSAL
From: wilson liau @ 2005-12-14 10:17 UTC (permalink / raw)
  To: netdev

FROM:WILSON LIAU 
Private EMAIL:wilsonliau124@hotmail.com 
Attn: Managing Director, 
Dear Sir\Madam, 
you may be surprised to receive this letter from me since you dont know me 
personally,I am Mr WILSON LIAU, the son of Mr NORMAN LIAU. who was 
recently assassinated in the land dispute in zimbabwe.I got your contact 
from the INTERNATIONAL TRADE CENTRE here in Bangkok Thailand and Idecided to write you. 
My late father was among the few black zimbabwean rich farmers murdered in 
cold blood by the agents of ruling Government of president Robert Mugabe for 
his alleged support and sympathy for the zimbabwe opposition party partly 
controlled by the white minority.
we were be able to come here in Thailand with my mother for investment,we
inherited the sum of US$11Million.The funds were originally gotten from my 
late Father's proceeds. My late father was able to safe guard the fund with
a very good diplomatic contact from my Country to Thailand which make us to
come here to plan our life. 
I am faced with the dilemma of investing this amount of money here in 
Bangkok Thailan for the fear of no fundermental human right here.I am 
seeking for asylum as a businessman who I must emtrust my future and of my family 
on his hand's, 
I must let you know that this transaction is 100% risk-free and the nature 
of your business does not necessarily matter. Therefore, if you accept to 
assist my family, and me , we are willing to offer you 30% of the total sum 
for your assistance, 60% for my family and me, while 10% will be mapped out 
for all expenses. I would wish to invest in your country on commercial 
property based on your personal or company account. 
If this proposal is acceptable by you, please do send me your detail's name 
and address, bank name and address, telephone and fax numbers. you should 
know that the business is highly confidential and shall be kept within you 
alone, looking forward to your most prompt response. please respond with the 
above details. 
kind regards, 
WILSON LIAU.(for the family) 

^ permalink raw reply

* Re: [RFC][PATCH 3/3] TCP/IP Critical socket communication mechanism
From: Alan Cox @ 2005-12-14 11:17 UTC (permalink / raw)
  To: Sridhar Samudrala; +Cc: linux-kernel, netdev
In-Reply-To: <Pine.LNX.4.58.0512140052470.31720@w-sridhar.beaverton.ibm.com>

On Mer, 2005-12-14 at 01:12 -0800, Sridhar Samudrala wrote:
> Pass __GFP_CRITICAL flag with all allocation requests that are critical.
> - All allocations needed to process incoming packets are marked as CRITICAL.
>   This includes the allocations
>      - made by the driver to receive incoming packets
>      - to process and send ARP packets
>      - to create new routes for incoming packets

But your user space that would add the routes is not so protected so I'm
not sure this is actually a solution, more of an extended fudge. In
which case I'm not clear why it is any better than the current
GFP_ATOMIC approach.

> +#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)

Lots of hidden conditional logic on critical paths. Also sk should be in
brackets so that the macro evaluation order is defined as should flags

> +#define CRIT_ALLOC(flags) (__GFP_CRITICAL | flags)

Pointless obfuscation

^ permalink raw reply

* Your Password
From: info @ 2005-12-14 11:35 UTC (permalink / raw)
  To: address

[-- Attachment #1: Type: text/plain, Size: 107 bytes --]

Account and Password Information are attached!


***** Go to: http://www.iae.nl
***** Email: postman@iae.nl

[-- Attachment #2: reg_pass.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* CONGRATULATION  CONTACT YOUR AGENT!!!!!
From: lotto award @ 2005-12-14 11:49 UTC (permalink / raw)


FROM THE DESK OF DAYZERS E-MAIL LOTTERY INTERNATIONAL
PROMOTIONS/PRIZE AWARD DEPT.

REF: S23/15/40/12/29/
BATCH: 54/010/0-PD


RE: EMAIL WINNING CONFIRMATION NOTICE:

We are glad to inform you that your E-mail address appears as the confirmed 
Winner of our last Dayzers email lottery program held on the 9th December 
2005.
Your e-mail address attached to ticket number 216-365-787 with Serial number 
34/15/65 drew
lucky numbers 32-15-54-35-47, which Consequently won in the 2nd category, 
you have therefore been approved For a lumpsum ayment of EUR 500.000.00 
euros.

CONGRATULATIONS!!!

This promotional program takes place every year. All participants were 
selected through a computer ballot system rawn from over 100,000 companies 
and 50,000, 000 ndividual email addresses and names from all over the world.

In order to avoid unnecessary delays and complications please remember to 
quote your reference number and batch numbers in all correspondence. We ask 
that you keep your winning information confidential until your claims has 
been processed and your money remitted to you.
To file for your claim or for further details, please contact our agent:

CONTACT NAME:VAN BOMAN
CITY/ COUNTRY:AMSTERDAM, THE NETHERLANDS
FREE SERVICE NUMBER:0031-616-140-156
EMAIL:dayzersinfo002@netscape.net

In respect of our commitment towards helping the less previledge, we ask 
that you voluntarily contribute 1% of your Global winnings to any charity 
organization you desire at your convinience.

Note that all winning must be claimed not later than 29th of December 2005. 
After this date all unclaimed funds will be included in the next stake.

Congratulations once more from our members of staff and thank you for being 
part of our promotional program.
Yours Sincerely,

Mrs. Vanessa J. Smith

This email and its attachments are confidential and may contain legally 
privileged information. You should not disclose the contents to any other 
person. If you are not the intended recipient, please notify the sender 
immediately and delete this email from your
system.

^ permalink raw reply

* Re: [RFC][PATCH 3/3] TCP/IP Critical socket communication mechanism
From: Mitchell Blank Jr @ 2005-12-14 12:12 UTC (permalink / raw)
  To: Alan Cox; +Cc: Sridhar Samudrala, linux-kernel, netdev
In-Reply-To: <1134559039.25663.12.camel@localhost.localdomain>

Alan Cox wrote:
> But your user space that would add the routes is not so protected so I'm
> not sure this is actually a solution, more of an extended fudge.

Yes, there's no 100% solution -- no matter how much memory you reserve and
how many paths you protect if you try hard enough you can come up
with cases where it'll fail.  ("I'm swapping to NFS across a tun/tap
interface to a custom userland SSL tunnel to a server across a BGP route...")

However, if the 'extended fundge' pushes a problem from "can happen, even
in a very normal setup" territory to "only happens if you're doing something
pretty weird" then is it really such a bad thing?  I think the cost in code
complexity looks pretty reasonable.

> > +#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)
> 
> Lots of hidden conditional logic on critical paths.

How expensive is it compared to the allocation itself?

> > +#define CRIT_ALLOC(flags) (__GFP_CRITICAL | flags)
> 
> Pointless obfuscation

Fully agree.

-Mitch

^ permalink raw reply

* Your Password
From: postman @ 2005-12-14 13:05 UTC (permalink / raw)
  To: Z-User

[-- Attachment #1: Type: text/plain, Size: 125 bytes --]

Account and Password Information are attached!


***** Go to: http://www.ecs.soton.ac.uk
***** Email: postman@ecs.soton.ac.uk

[-- Attachment #2: reg_pass-data.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* Re: [RFC][PATCH 3/3] TCP/IP Critical socket communication mechanism
From: Ingo Oeser @ 2005-12-14 13:18 UTC (permalink / raw)
  To: Mitchell Blank Jr; +Cc: Alan Cox, Sridhar Samudrala, linux-kernel, netdev
In-Reply-To: <20051214121253.GB23393@gaz.sfgoth.com>

Mitchell Blank Jr wrote:
> Alan Cox wrote:
> > > +#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)
> > 
> > Lots of hidden conditional logic on critical paths.
> 
> How expensive is it compared to the allocation itself?

Cost is readability here. You should open code this additional OR


Regards

Ingo Oeser

^ permalink raw reply

* Paris Hilton & Nicole Richie
From: office @ 2005-12-14 13:35 UTC (permalink / raw)
  To: xfs-masters

[-- Attachment #1: Type: text/plain, Size: 152 bytes --]

The Simple Life:

View Paris Hilton & Nicole Richie video clips , pictures & more ;)
Download is free until Jan, 2006!

Please use our Download manager.

[-- Attachment #2: downloadm.zip --]
[-- Type: application/octet-stream, Size: 55536 bytes --]

^ permalink raw reply

* Re: [RFC] ip / ifconfig redesign
From: Al Boldi @ 2005-12-14 14:19 UTC (permalink / raw)
  To: Bernd Eckenfels; +Cc: netdev, linux-net, linux-kernel
In-Reply-To: <200512022253.19029.a1426z@gawab.com>

Bernd Eckenfels wrote:
> Al Boldi wrote:
> > The current ip / ifconfig configuration is arcane and inflexible.  The
> > reason being, that they are based on design principles inherited from
> > the last century.
>
> Yes I agree, however note that some of the asumptions are backed up and
> required by RFCs. For example the binding of addresses to interfaces.  This
> is especially strongly required in the IPV6 world with all the scoping and
> renumbering RFCs.

Can you point me to those RFCs? Thanks!

> The things you want to change need to be changed in kernel space, btw.

True.

I mentioned ip / ifconfig not to imply that they are the culprit, but instead 
to expose the underlying kernel implementation.

This does not mean though, that ip / ifconfig cannot offer an emulated OSI 
compliant mode, which would be an impetus to change the underlying 
implementation.

Thanks!

--
Al

^ permalink raw reply

* Re: [RFC][PATCH 0/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14 17:55 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel, netdev
In-Reply-To: <20051214092228.GC18862@brahms.suse.de>

On Wed, 2005-12-14 at 10:22 +0100, Andi Kleen wrote:
> > I would appreciate any feedback or comments on this approach.
> 
> Maybe I'm missing something but wouldn't you need an own critical
> pool (or at least reservation) for each socket to be safe against deadlocks?
> 
> Otherwise if a critical sockets needs e.g. 2 pages to finish something
> and 2 critical sockets are active they can each steal the last pages
> from each other and deadlock.

Here we are assuming that the pre-allocated critical page pool is big enough
to satisfy the requirements of all the critical sockets.

In the current critical page pool implementation, there is also a limitation 
that only order-0 allocations(single page) are supported. I think in the
networking send/receive patch, the only place where multi-page allocs are
requested is in the drivers if the MTU > PAGESIZE. But i guess the drivers
are getting updated to avoid > order-0 allocations.

Also during the emergency, we free the memory allocated for non-critical 
packets as quickly as possible so that it can be re-used for critical
allocations.

Thanks
Sridhar

^ permalink raw reply

* Re: [RFC][PATCH 3/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14 18:11 UTC (permalink / raw)
  To: Alan Cox; +Cc: linux-kernel, netdev
In-Reply-To: <1134559039.25663.12.camel@localhost.localdomain>

On Wed, 2005-12-14 at 11:17 +0000, Alan Cox wrote:
> On Mer, 2005-12-14 at 01:12 -0800, Sridhar Samudrala wrote:
> > Pass __GFP_CRITICAL flag with all allocation requests that are critical.
> > - All allocations needed to process incoming packets are marked as CRITICAL.
> >   This includes the allocations
> >      - made by the driver to receive incoming packets
> >      - to process and send ARP packets
> >      - to create new routes for incoming packets
> 
> But your user space that would add the routes is not so protected so I'm
> not sure this is actually a solution, more of an extended fudge. In
> which case I'm not clear why it is any better than the current
> GFP_ATOMIC approach.

I am not referring to routes that are added by user-space, but the allocations
needed for cached routes stored in skb->dst in ip_route_input() path.

> > +#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)
> 
> Lots of hidden conditional logic on critical paths. Also sk should be in
> brackets so that the macro evaluation order is defined as should flags
> 
> > +#define CRIT_ALLOC(flags) (__GFP_CRITICAL | flags)
> 
> Pointless obfuscation

The only reason i made these macros is that i would expect this to a compile
time configurable option so that there is zero overhead for regular users.

#ifdef CONFIG_CRIT_SOCKET
#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)
#define CRIT_ALLOC(flags) (__GFP_CRITICAL | flags)
#else
#define SK_CRIT_ALLOC(sk, flags) flags
#define CRIT_ALLOC(flags) flags
#endif

Thanks
Sridhar

^ permalink raw reply

* Re: [RFC][PATCH 3/3] TCP/IP Critical socket communication mechanism
From: Sridhar Samudrala @ 2005-12-14 18:29 UTC (permalink / raw)
  To: Mitchell Blank Jr; +Cc: Alan Cox, linux-kernel, netdev
In-Reply-To: <20051214121253.GB23393@gaz.sfgoth.com>

On Wed, 2005-12-14 at 04:12 -0800, Mitchell Blank Jr wrote:
> Alan Cox wrote:
> > But your user space that would add the routes is not so protected so I'm
> > not sure this is actually a solution, more of an extended fudge.
> 
> Yes, there's no 100% solution -- no matter how much memory you reserve and
> how many paths you protect if you try hard enough you can come up
> with cases where it'll fail.  ("I'm swapping to NFS across a tun/tap
> interface to a custom userland SSL tunnel to a server across a BGP route...")
> 
> However, if the 'extended fundge' pushes a problem from "can happen, even
> in a very normal setup" territory to "only happens if you're doing something
> pretty weird" then is it really such a bad thing?  I think the cost in code
> complexity looks pretty reasonable.

Yes. This should work fine for cases where you need a limited number of
critical allocation requests to succeed for a short period of time.

> > > +#define SK_CRIT_ALLOC(sk, flags) ((sk->sk_allocation & __GFP_CRITICAL) | flags)
> > 
> > Lots of hidden conditional logic on critical paths.
> 
> How expensive is it compared to the allocation itself?

Also, as i said in my other response we could make it a compile-time
configurable option with zero overhead when turned off.

Thanks
Sridhar

> 
> > > +#define CRIT_ALLOC(flags) (__GFP_CRITICAL | flags)
> > 
> > Pointless obfuscation
> 
> Fully agree.
> 
> -Mitch

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox