| To: | "David S. Miller" <davem@xxxxxxxxxx> |
|---|---|
| Subject: | [PATCH 5/5] schedule() bug in xfrm_lookup() |
| From: | Krishna Kumar <krkumar@xxxxxxxxxx> |
| Date: | Tue, 13 Jan 2004 13:26:21 -0800 (PST) |
| Cc: | netdev@xxxxxxxxxxx, KK <krkumar@xxxxxxxxxx> |
| In-reply-to: | <Pine.LNX.4.44.0401131319510.25742-100000@linux-udp14999547uds> |
| Sender: | netdev-bounce@xxxxxxxxxxx |
When xfrm_tmpl_resolve fails, schedule() before retrying. Also, cleaned
up the set_task_* routines to use set_current_*, etc.
This needs to be applied after [PATCH 3/5].
thanks,
- KK
diff -ruN linux-2.6.0-rc2-bk6.org/net/xfrm/xfrm_policy.c
linux-2.6.0-rc2-bk6/net/xfrm/xfrm_policy.c
--- linux-2.6.0-rc2-bk6.org/net/xfrm/xfrm_policy.c 2004-01-09
12:42:53.000000000 -0800
+++ linux-2.6.0-rc2-bk6/net/xfrm/xfrm_policy.c 2004-01-12 09:55:26.000000000
-0800
@@ -775,20 +775,17 @@
if (unlikely(nx<0)) {
err = nx;
- if (err == -EAGAIN) {
- struct task_struct *tsk = current;
- DECLARE_WAITQUEUE(wait, tsk);
- if (!flags)
- goto error;
+ if (err == -EAGAIN && !flags) {
+ DECLARE_WAITQUEUE(wait, current);
- __set_task_state(tsk, TASK_INTERRUPTIBLE);
add_wait_queue(&km_waitq, &wait);
- nx = xfrm_tmpl_resolve(policy, fl, xfrm,
family);
- if (nx == -EAGAIN)
- schedule();
- __set_task_state(tsk, TASK_RUNNING);
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule();
+ set_current_state(TASK_RUNNING);
remove_wait_queue(&km_waitq, &wait);
+ nx = xfrm_tmpl_resolve(policy, fl, xfrm,
family);
+
if (nx == -EAGAIN && signal_pending(current)) {
err = -ERESTART;
goto error;
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [PATCH 4/5] xfrm_state_construct doesn't set tunnel state, Krishna Kumar |
|---|---|
| Next by Date: | [PATCH 2.6.X] SIOCSIFNAME wilcard suppor & name validation, Stephen Hemminger |
| Previous by Thread: | Re: [PATCH 4/5] xfrm_state_construct doesn't set tunnel state, David S. Miller |
| Next by Thread: | Re: [PATCH 5/5] schedule() bug in xfrm_lookup(), David S. Miller |
| Indexes: | [Date] [Thread] [Top] [All Lists] |