@@ -363,15 +363,17 @@ static inline void TCP_ECN_send(struct sock *sk, struct sk_buff *skb,
363
363
*/
364
364
static void tcp_init_nondata_skb (struct sk_buff * skb , u32 seq , u8 flags )
365
365
{
366
+ struct skb_shared_info * shinfo = skb_shinfo (skb );
367
+
366
368
skb -> ip_summed = CHECKSUM_PARTIAL ;
367
369
skb -> csum = 0 ;
368
370
369
371
TCP_SKB_CB (skb )-> tcp_flags = flags ;
370
372
TCP_SKB_CB (skb )-> sacked = 0 ;
371
373
372
- skb_shinfo ( skb ) -> gso_segs = 1 ;
373
- skb_shinfo ( skb ) -> gso_size = 0 ;
374
- skb_shinfo ( skb ) -> gso_type = 0 ;
374
+ shinfo -> gso_segs = 1 ;
375
+ shinfo -> gso_size = 0 ;
376
+ shinfo -> gso_type = 0 ;
375
377
376
378
TCP_SKB_CB (skb )-> seq = seq ;
377
379
if (flags & (TCPHDR_SYN | TCPHDR_FIN ))
@@ -986,20 +988,22 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb)
986
988
static void tcp_set_skb_tso_segs (const struct sock * sk , struct sk_buff * skb ,
987
989
unsigned int mss_now )
988
990
{
991
+ struct skb_shared_info * shinfo = skb_shinfo (skb );
992
+
989
993
/* Make sure we own this skb before messing gso_size/gso_segs */
990
994
WARN_ON_ONCE (skb_cloned (skb ));
991
995
992
996
if (skb -> len <= mss_now || skb -> ip_summed == CHECKSUM_NONE ) {
993
997
/* Avoid the costly divide in the normal
994
998
* non-TSO case.
995
999
*/
996
- skb_shinfo ( skb ) -> gso_segs = 1 ;
997
- skb_shinfo ( skb ) -> gso_size = 0 ;
998
- skb_shinfo ( skb ) -> gso_type = 0 ;
1000
+ shinfo -> gso_segs = 1 ;
1001
+ shinfo -> gso_size = 0 ;
1002
+ shinfo -> gso_type = 0 ;
999
1003
} else {
1000
- skb_shinfo ( skb ) -> gso_segs = DIV_ROUND_UP (skb -> len , mss_now );
1001
- skb_shinfo ( skb ) -> gso_size = mss_now ;
1002
- skb_shinfo ( skb ) -> gso_type = sk -> sk_gso_type ;
1004
+ shinfo -> gso_segs = DIV_ROUND_UP (skb -> len , mss_now );
1005
+ shinfo -> gso_size = mss_now ;
1006
+ shinfo -> gso_type = sk -> sk_gso_type ;
1003
1007
}
1004
1008
}
1005
1009
@@ -1146,6 +1150,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len,
1146
1150
*/
1147
1151
static void __pskb_trim_head (struct sk_buff * skb , int len )
1148
1152
{
1153
+ struct skb_shared_info * shinfo ;
1149
1154
int i , k , eat ;
1150
1155
1151
1156
eat = min_t (int , len , skb_headlen (skb ));
@@ -1157,23 +1162,24 @@ static void __pskb_trim_head(struct sk_buff *skb, int len)
1157
1162
}
1158
1163
eat = len ;
1159
1164
k = 0 ;
1160
- for (i = 0 ; i < skb_shinfo (skb )-> nr_frags ; i ++ ) {
1161
- int size = skb_frag_size (& skb_shinfo (skb )-> frags [i ]);
1165
+ shinfo = skb_shinfo (skb );
1166
+ for (i = 0 ; i < shinfo -> nr_frags ; i ++ ) {
1167
+ int size = skb_frag_size (& shinfo -> frags [i ]);
1162
1168
1163
1169
if (size <= eat ) {
1164
1170
skb_frag_unref (skb , i );
1165
1171
eat -= size ;
1166
1172
} else {
1167
- skb_shinfo ( skb ) -> frags [k ] = skb_shinfo ( skb ) -> frags [i ];
1173
+ shinfo -> frags [k ] = shinfo -> frags [i ];
1168
1174
if (eat ) {
1169
- skb_shinfo ( skb ) -> frags [k ].page_offset += eat ;
1170
- skb_frag_size_sub (& skb_shinfo ( skb ) -> frags [k ], eat );
1175
+ shinfo -> frags [k ].page_offset += eat ;
1176
+ skb_frag_size_sub (& shinfo -> frags [k ], eat );
1171
1177
eat = 0 ;
1172
1178
}
1173
1179
k ++ ;
1174
1180
}
1175
1181
}
1176
- skb_shinfo ( skb ) -> nr_frags = k ;
1182
+ shinfo -> nr_frags = k ;
1177
1183
1178
1184
skb_reset_tail_pointer (skb );
1179
1185
skb -> data_len -= len ;
0 commit comments