You can import this changeset into BK by piping this whole message to: '| bk receive [path to repository]' or apply the patch as usual. =================================================================== ChangeSet@1.1414.4.19, 2003-11-09 07:54:39-02:00, acme@conectiva.com.br o LLC: use sk_wait_event primitive af_llc.c | 66 +++++++++++++++++++++++++-------------------------------------- 1 files changed, 27 insertions(+), 39 deletions(-) diff -Nru a/net/llc/af_llc.c b/net/llc/af_llc.c --- a/net/llc/af_llc.c Sat Nov 15 17:03:23 2003 +++ b/net/llc/af_llc.c Sat Nov 15 17:03:23 2003 @@ -36,10 +36,10 @@ static struct sockaddr_llc llc_ui_addrnull; static struct proto_ops llc_ui_ops; -static int llc_ui_wait_for_conn(struct sock *sk, int timeout); -static int llc_ui_wait_for_disc(struct sock *sk, int timeout); -static int llc_ui_wait_for_data(struct sock *sk, int timeout); -static int llc_ui_wait_for_busy_core(struct sock *sk, int timeout); +static int llc_ui_wait_for_conn(struct sock *sk, long timeout); +static int llc_ui_wait_for_disc(struct sock *sk, long timeout); +static int llc_ui_wait_for_data(struct sock *sk, long timeout); +static int llc_ui_wait_for_busy_core(struct sock *sk, long timeout); #if 0 #define dprintk(args...) printk(KERN_DEBUG args) @@ -116,7 +116,7 @@ int rc = 0; if (llc_data_accept_state(llc->state) || llc->p_flag) { - int timeout = sock_sndtimeo(sk, noblock); + long timeout = sock_sndtimeo(sk, noblock); rc = llc_ui_wait_for_busy_core(sk, timeout); } @@ -419,7 +419,7 @@ } if (sk->sk_state == TCP_SYN_SENT) { - const int timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); + const long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); if (!timeo || !llc_ui_wait_for_conn(sk, timeo)) goto out; @@ -479,16 +479,15 @@ return rc; } -static int llc_ui_wait_for_disc(struct sock *sk, int timeout) +static int llc_ui_wait_for_disc(struct sock *sk, long timeout) { DEFINE_WAIT(wait); int rc = 0; - prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); - while (sk->sk_state != TCP_CLOSE) { - release_sock(sk); - timeout = schedule_timeout(timeout); - lock_sock(sk); + while (1) { + prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); + if (sk_wait_event(sk, &timeout, sk->sk_state == TCP_CLOSE)) + break; rc = -ERESTARTSYS; if (signal_pending(current)) break; @@ -496,45 +495,37 @@ if (!timeout) break; rc = 0; - prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); } finish_wait(sk->sk_sleep, &wait); return rc; } -static int llc_ui_wait_for_conn(struct sock *sk, int timeout) +static int llc_ui_wait_for_conn(struct sock *sk, long timeout) { DEFINE_WAIT(wait); - prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); - - while (sk->sk_state == TCP_SYN_SENT) { - release_sock(sk); - timeout = schedule_timeout(timeout); - lock_sock(sk); + while (1) { + prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); + if (sk_wait_event(sk, &timeout, sk->sk_state != TCP_SYN_SENT)) + break; if (signal_pending(current) || !timeout) break; - prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); } finish_wait(sk->sk_sleep, &wait); return timeout; } -static int llc_ui_wait_for_data(struct sock *sk, int timeout) +static int llc_ui_wait_for_data(struct sock *sk, long timeout) { DEFINE_WAIT(wait); int rc = 0; - for (;;) { + while (1) { prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); - if (sk->sk_shutdown & RCV_SHUTDOWN) + if (sk_wait_event(sk, &timeout, + (sk->sk_shutdown & RCV_SHUTDOWN) || + (!skb_queue_empty(&sk->sk_receive_queue)))) break; - sk_flush_backlog(sk); - if (!skb_queue_empty(&sk->sk_receive_queue)) - break; - release_sock(sk); - timeout = schedule_timeout(timeout); - lock_sock(sk); rc = -ERESTARTSYS; if (signal_pending(current)) break; @@ -547,23 +538,20 @@ return rc; } -static int llc_ui_wait_for_busy_core(struct sock *sk, int timeout) +static int llc_ui_wait_for_busy_core(struct sock *sk, long timeout) { DEFINE_WAIT(wait); struct llc_opt *llc = llc_sk(sk); int rc; - for (;;) { + while (1) { prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); - rc = -ENOTCONN; - if (sk->sk_shutdown & RCV_SHUTDOWN) - break; rc = 0; - if (!llc_data_accept_state(llc->state) && !llc->p_flag) + if (sk_wait_event(sk, &timeout, + (sk->sk_shutdown & RCV_SHUTDOWN) || + (!llc_data_accept_state(llc->state) && + !llc->p_flag))) break; - release_sock(sk); - timeout = schedule_timeout(timeout); - lock_sock(sk); rc = -ERESTARTSYS; if (signal_pending(current)) break; =================================================================== This BitKeeper patch contains the following changesets: 1.1414.4.19 ## Wrapped with gzip_uu ## M'XL( 'MXMC\ \56;6_:2!#^;/^*B2HAZ 6SZ]TUF!-5&T#7* @0D#O=)\LL MFV !-O4NB:+SC^^LG:;-BQK=D5/-RUBS,X^?9V9VX1U<:I5WG5CNE/L./F?: M=!V9I4J:Y";V9+;SECDNS+(,%UKK;*=:-K:UW/BM5)FF[P4>=3%B&ANYAAN5 MZZY#/?;@,7=[U75FPS\N1Y]FKMOK07\=I]=JK@ST>J[)\IMXN](?8[/>9JEG M\CC5.V7*9Q'M0M(5I3&G:D5\W@FX:ZE]?$K_,0JC ME(0DI(*U"\*I[[L#H![EE'O*NLU_>;DN MB8G[X65U!3:XM=U*^XET)C>>K 0(1@ECPN<%8^U %*P3MGU?4MX1RU I]0I< M?!6AJ<#NVR$XH0C&.V$Y(D\C[:2\+<57X)Y3%-RGK! AIZ2GSRK]'R9HP$+@[CGW\5N;V"02$GRT[<@AJJ>5\9Q?ER&7ID7Z715>NHV/\V66W3:5.[[-K4RCCV*M?D!_\7T MJVU\K:$&DV@\&9^-)OV+$JE3(97FN+I:L#8(! LI-MFY72=;!77:@'^0XSY7 M^SA7D8JWEBMH:WT0!!A)5?FN%&T M8"$$"$;Y+Y1\4DF>_SV.YL/QXK%J/!A*U3XK59?FN U@P3H5F#6/5 \$(^42 M&O:Z#DO4 7@HS?I@5MEMBF,ZZ_\9S3]?+@:3O\8-*(IOD2=ZLXR^'-1!16JW M-W?UVGUNKJ3"(ZQ::^!EN?C8G($0%:72O,'>M8A!A1@\UR\Z*'P@@G)?6