|
@@ -549,14 +549,12 @@ int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
|
!tp->urg_data ||
|
|
!tp->urg_data ||
|
|
before(tp->urg_seq, tp->copied_seq) ||
|
|
before(tp->urg_seq, tp->copied_seq) ||
|
|
!before(tp->urg_seq, tp->rcv_nxt)) {
|
|
!before(tp->urg_seq, tp->rcv_nxt)) {
|
|
- struct sk_buff *skb;
|
|
|
|
|
|
|
|
answ = tp->rcv_nxt - tp->copied_seq;
|
|
answ = tp->rcv_nxt - tp->copied_seq;
|
|
|
|
|
|
- /* Subtract 1, if FIN is in queue. */
|
|
|
|
- skb = skb_peek_tail(&sk->sk_receive_queue);
|
|
|
|
- if (answ && skb)
|
|
|
|
- answ -= tcp_hdr(skb)->fin;
|
|
|
|
|
|
+ /* Subtract 1, if FIN was received */
|
|
|
|
+ if (answ && sock_flag(sk, SOCK_DONE))
|
|
|
|
+ answ--;
|
|
} else
|
|
} else
|
|
answ = tp->urg_seq - tp->copied_seq;
|
|
answ = tp->urg_seq - tp->copied_seq;
|
|
release_sock(sk);
|
|
release_sock(sk);
|