Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tcp: Use SKB queue handling interfaces instead of by-hand versions.

Signed-off-by: David S. Miller <davem@davemloft.net>

+15 -25
+15 -25
include/net/tcp.h
··· 1181 1181 1182 1182 static inline struct sk_buff *tcp_write_queue_head(struct sock *sk) 1183 1183 { 1184 - struct sk_buff *skb = sk->sk_write_queue.next; 1185 - if (skb == (struct sk_buff *) &sk->sk_write_queue) 1186 - return NULL; 1187 - return skb; 1184 + return skb_peek(&sk->sk_write_queue); 1188 1185 } 1189 1186 1190 1187 static inline struct sk_buff *tcp_write_queue_tail(struct sock *sk) 1191 1188 { 1192 - struct sk_buff *skb = sk->sk_write_queue.prev; 1193 - if (skb == (struct sk_buff *) &sk->sk_write_queue) 1194 - return NULL; 1195 - return skb; 1189 + return skb_peek_tail(&sk->sk_write_queue); 1196 1190 } 1197 1191 1198 1192 static inline struct sk_buff *tcp_write_queue_next(struct sock *sk, struct sk_buff *skb) 1199 1193 { 1200 - return skb->next; 1194 + return skb_queue_next(&sk->sk_write_queue, skb); 1201 1195 } 1202 1196 1203 1197 #define tcp_for_write_queue(skb, sk) \ 1204 - for (skb = (sk)->sk_write_queue.next; \ 1205 - (skb != (struct sk_buff *)&(sk)->sk_write_queue); \ 1206 - skb = skb->next) 1198 + skb_queue_walk(&(sk)->sk_write_queue, skb) 1207 1199 1208 1200 #define tcp_for_write_queue_from(skb, sk) \ 1209 - for (; (skb != (struct sk_buff *)&(sk)->sk_write_queue);\ 1210 - skb = skb->next) 1201 + skb_queue_walk_from(&(sk)->sk_write_queue, skb) 1211 1202 1212 1203 #define tcp_for_write_queue_from_safe(skb, tmp, sk) \ 1213 - for (tmp = skb->next; \ 1214 - (skb != (struct sk_buff *)&(sk)->sk_write_queue); \ 1215 - skb = tmp, tmp = skb->next) 1204 + skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp) 1216 1205 1217 1206 static inline struct sk_buff *tcp_send_head(struct sock *sk) 1218 1207 { 1219 1208 return sk->sk_send_head; 1220 1209 } 1221 1210 1211 + static inline bool tcp_skb_is_last(const struct sock *sk, 1212 + const struct sk_buff *skb) 1213 + { 1214 + return skb_queue_is_last(&sk->sk_write_queue, skb); 1215 + } 1216 + 1222 1217 static inline void tcp_advance_send_head(struct sock *sk, struct sk_buff *skb) 1223 1218 { 1224 - sk->sk_send_head = skb->next; 1225 - if (sk->sk_send_head == (struct sk_buff *)&sk->sk_write_queue) 1219 + if (tcp_skb_is_last(sk, skb)) 1226 1220 sk->sk_send_head = NULL; 1221 + else 1222 + sk->sk_send_head = tcp_write_queue_next(sk, skb); 1227 1223 } 1228 1224 1229 1225 static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unlinked) ··· 1278 1282 static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk) 1279 1283 { 1280 1284 __skb_unlink(skb, &sk->sk_write_queue); 1281 - } 1282 - 1283 - static inline bool tcp_skb_is_last(const struct sock *sk, 1284 - const struct sk_buff *skb) 1285 - { 1286 - return skb_queue_is_last(&sk->sk_write_queue, skb); 1287 1285 } 1288 1286 1289 1287 static inline int tcp_write_queue_empty(struct sock *sk)