aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-07-14 23:23:54 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-14 23:23:54 -0400
commit2aec609fb45e84d65bc8eabc7b650bbecb1cc179 (patch)
treeeb3e8a79604113392d0ee74b19dbc1dfce579c11
parent4c8894980010536915c4f5513ee180e3614aeca9 (diff)
parent9076689ab07974a6f5d230fc241448f7a77e9078 (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: net/netfilter/nf_conntrack_proto_tcp.c
-rw-r--r--Documentation/networking/ip-sysctl.txt256
-rw-r--r--drivers/net/arm/ixp4xx_eth.c3
-rw-r--r--drivers/net/tun.c6
-rw-r--r--drivers/net/wireless/libertas/scan.c4
-rw-r--r--drivers/net/wireless/rt2x00/rt2400pci.c11
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c11
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c7
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c9
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c9
-rw-r--r--drivers/net/wireless/zd1211rw/zd_mac.c1
-rw-r--r--include/linux/xfrm.h1
-rw-r--r--net/ipv4/fib_trie.c17
-rw-r--r--net/ipv4/netfilter/nf_nat_snmp_basic.c2
-rw-r--r--net/ipv4/tcp_probe.c2
-rw-r--r--net/ipv6/exthdrs.c2
-rw-r--r--net/mac80211/rc80211_pid.h5
-rw-r--r--net/mac80211/rc80211_pid_algo.c31
-rw-r--r--net/netfilter/nf_conntrack_proto_tcp.c10
-rw-r--r--net/netlabel/netlabel_cipso_v4.c7
-rw-r--r--net/netlabel/netlabel_mgmt.c12
-rw-r--r--net/netlabel/netlabel_unlabeled.c6
-rw-r--r--net/xfrm/xfrm_user.c3
22 files changed, 307 insertions, 108 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index a40feaee62ec..d84932650fd3 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -148,9 +148,9 @@ tcp_available_congestion_control - STRING
148 but not loaded. 148 but not loaded.
149 149
150tcp_base_mss - INTEGER 150tcp_base_mss - INTEGER
151 The initial value of search_low to be used by Packetization Layer 151 The initial value of search_low to be used by the packetization layer
152 Path MTU Discovery (MTU probing). If MTU probing is enabled, 152 Path MTU discovery (MTU probing). If MTU probing is enabled,
153 this is the inital MSS used by the connection. 153 this is the initial MSS used by the connection.
154 154
155tcp_congestion_control - STRING 155tcp_congestion_control - STRING
156 Set the congestion control algorithm to be used for new 156 Set the congestion control algorithm to be used for new
@@ -185,10 +185,9 @@ tcp_frto - INTEGER
185 timeouts. It is particularly beneficial in wireless environments 185 timeouts. It is particularly beneficial in wireless environments
186 where packet loss is typically due to random radio interference 186 where packet loss is typically due to random radio interference
187 rather than intermediate router congestion. F-RTO is sender-side 187 rather than intermediate router congestion. F-RTO is sender-side
188 only modification. Therefore it does not require any support from 188 only modification. Therefore it does not require any support from
189 the peer, but in a typical case, however, where wireless link is 189 the peer.
190 the local access link and most of the data flows downlink, the 190
191 faraway servers should have F-RTO enabled to take advantage of it.
192 If set to 1, basic version is enabled. 2 enables SACK enhanced 191 If set to 1, basic version is enabled. 2 enables SACK enhanced
193 F-RTO if flow uses SACK. The basic version can be used also when 192 F-RTO if flow uses SACK. The basic version can be used also when
194 SACK is in use though scenario(s) with it exists where F-RTO 193 SACK is in use though scenario(s) with it exists where F-RTO
@@ -276,7 +275,7 @@ tcp_mem - vector of 3 INTEGERs: min, pressure, max
276 memory. 275 memory.
277 276
278tcp_moderate_rcvbuf - BOOLEAN 277tcp_moderate_rcvbuf - BOOLEAN
279 If set, TCP performs receive buffer autotuning, attempting to 278 If set, TCP performs receive buffer auto-tuning, attempting to
280 automatically size the buffer (no greater than tcp_rmem[2]) to 279 automatically size the buffer (no greater than tcp_rmem[2]) to
281 match the size required by the path for full throughput. Enabled by 280 match the size required by the path for full throughput. Enabled by
282 default. 281 default.
@@ -336,7 +335,7 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
336 pressure. 335 pressure.
337 Default: 8K 336 Default: 8K
338 337
339 default: default size of receive buffer used by TCP sockets. 338 default: initial size of receive buffer used by TCP sockets.
340 This value overrides net.core.rmem_default used by other protocols. 339 This value overrides net.core.rmem_default used by other protocols.
341 Default: 87380 bytes. This value results in window of 65535 with 340 Default: 87380 bytes. This value results in window of 65535 with
342 default setting of tcp_adv_win_scale and tcp_app_win:0 and a bit 341 default setting of tcp_adv_win_scale and tcp_app_win:0 and a bit
@@ -344,8 +343,10 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
344 343
345 max: maximal size of receive buffer allowed for automatically 344 max: maximal size of receive buffer allowed for automatically
346 selected receiver buffers for TCP socket. This value does not override 345 selected receiver buffers for TCP socket. This value does not override
347 net.core.rmem_max, "static" selection via SO_RCVBUF does not use this. 346 net.core.rmem_max. Calling setsockopt() with SO_RCVBUF disables
348 Default: 87380*2 bytes. 347 automatic tuning of that socket's receive buffer size, in which
348 case this value is ignored.
349 Default: between 87380B and 4MB, depending on RAM size.
349 350
350tcp_sack - BOOLEAN 351tcp_sack - BOOLEAN
351 Enable select acknowledgments (SACKS). 352 Enable select acknowledgments (SACKS).
@@ -358,7 +359,7 @@ tcp_slow_start_after_idle - BOOLEAN
358 Default: 1 359 Default: 1
359 360
360tcp_stdurg - BOOLEAN 361tcp_stdurg - BOOLEAN
361 Use the Host requirements interpretation of the TCP urg pointer field. 362 Use the Host requirements interpretation of the TCP urgent pointer field.
362 Most hosts use the older BSD interpretation, so if you turn this on 363 Most hosts use the older BSD interpretation, so if you turn this on
363 Linux might not communicate correctly with them. 364 Linux might not communicate correctly with them.
364 Default: FALSE 365 Default: FALSE
@@ -371,12 +372,12 @@ tcp_synack_retries - INTEGER
371tcp_syncookies - BOOLEAN 372tcp_syncookies - BOOLEAN
372 Only valid when the kernel was compiled with CONFIG_SYNCOOKIES 373 Only valid when the kernel was compiled with CONFIG_SYNCOOKIES
373 Send out syncookies when the syn backlog queue of a socket 374 Send out syncookies when the syn backlog queue of a socket
374 overflows. This is to prevent against the common 'syn flood attack' 375 overflows. This is to prevent against the common 'SYN flood attack'
375 Default: FALSE 376 Default: FALSE
376 377
377 Note, that syncookies is fallback facility. 378 Note, that syncookies is fallback facility.
378 It MUST NOT be used to help highly loaded servers to stand 379 It MUST NOT be used to help highly loaded servers to stand
379 against legal connection rate. If you see synflood warnings 380 against legal connection rate. If you see SYN flood warnings
380 in your logs, but investigation shows that they occur 381 in your logs, but investigation shows that they occur
381 because of overload with legal connections, you should tune 382 because of overload with legal connections, you should tune
382 another parameters until this warning disappear. 383 another parameters until this warning disappear.
@@ -386,7 +387,7 @@ tcp_syncookies - BOOLEAN
386 to use TCP extensions, can result in serious degradation 387 to use TCP extensions, can result in serious degradation
387 of some services (f.e. SMTP relaying), visible not by you, 388 of some services (f.e. SMTP relaying), visible not by you,
388 but your clients and relays, contacting you. While you see 389 but your clients and relays, contacting you. While you see
389 synflood warnings in logs not being really flooded, your server 390 SYN flood warnings in logs not being really flooded, your server
390 is seriously misconfigured. 391 is seriously misconfigured.
391 392
392tcp_syn_retries - INTEGER 393tcp_syn_retries - INTEGER
@@ -419,19 +420,21 @@ tcp_window_scaling - BOOLEAN
419 Enable window scaling as defined in RFC1323. 420 Enable window scaling as defined in RFC1323.
420 421
421tcp_wmem - vector of 3 INTEGERs: min, default, max 422tcp_wmem - vector of 3 INTEGERs: min, default, max
422 min: Amount of memory reserved for send buffers for TCP socket. 423 min: Amount of memory reserved for send buffers for TCP sockets.
423 Each TCP socket has rights to use it due to fact of its birth. 424 Each TCP socket has rights to use it due to fact of its birth.
424 Default: 4K 425 Default: 4K
425 426
426 default: Amount of memory allowed for send buffers for TCP socket 427 default: initial size of send buffer used by TCP sockets. This
427 by default. This value overrides net.core.wmem_default used 428 value overrides net.core.wmem_default used by other protocols.
428 by other protocols, it is usually lower than net.core.wmem_default. 429 It is usually lower than net.core.wmem_default.
429 Default: 16K 430 Default: 16K
430 431
431 max: Maximal amount of memory allowed for automatically selected 432 max: Maximal amount of memory allowed for automatically tuned
432 send buffers for TCP socket. This value does not override 433 send buffers for TCP sockets. This value does not override
433 net.core.wmem_max, "static" selection via SO_SNDBUF does not use this. 434 net.core.wmem_max. Calling setsockopt() with SO_SNDBUF disables
434 Default: 128K 435 automatic tuning of that socket's send buffer size, in which case
436 this value is ignored.
437 Default: between 64K and 4MB, depending on RAM size.
435 438
436tcp_workaround_signed_windows - BOOLEAN 439tcp_workaround_signed_windows - BOOLEAN
437 If set, assume no receipt of a window scaling option means the 440 If set, assume no receipt of a window scaling option means the
@@ -1073,24 +1076,193 @@ bridge-nf-filter-pppoe-tagged - BOOLEAN
1073 Default: 1 1076 Default: 1
1074 1077
1075 1078
1076UNDOCUMENTED: 1079proc/sys/net/sctp/* Variables:
1080
1081addip_enable - BOOLEAN
1082 Enable or disable extension of Dynamic Address Reconfiguration
1083 (ADD-IP) functionality specified in RFC5061. This extension provides
1084 the ability to dynamically add and remove new addresses for the SCTP
1085 associations.
1086
1087 1: Enable extension.
1088
1089 0: Disable extension.
1090
1091 Default: 0
1092
1093addip_noauth_enable - BOOLEAN
1094 Dynamic Address Reconfiguration (ADD-IP) requires the use of
1095 authentication to protect the operations of adding or removing new
1096 addresses. This requirement is mandated so that unauthorized hosts
1097 would not be able to hijack associations. However, older
1098 implementations may not have implemented this requirement while
1099 allowing the ADD-IP extension. For reasons of interoperability,
1100 we provide this variable to control the enforcement of the
1101 authentication requirement.
1102
1103 1: Allow ADD-IP extension to be used without authentication. This
1104 should only be set in a closed environment for interoperability
1105 with older implementations.
1106
1107 0: Enforce the authentication requirement
1108
1109 Default: 0
1110
1111auth_enable - BOOLEAN
1112 Enable or disable Authenticated Chunks extension. This extension
1113 provides the ability to send and receive authenticated chunks and is
1114 required for secure operation of Dynamic Address Reconfiguration
1115 (ADD-IP) extension.
1116
1117 1: Enable this extension.
1118 0: Disable this extension.
1119
1120 Default: 0
1121
1122prsctp_enable - BOOLEAN
1123 Enable or disable the Partial Reliability extension (RFC3758) which
1124 is used to notify peers that a given DATA should no longer be expected.
1125
1126 1: Enable extension
1127 0: Disable
1128
1129 Default: 1
1130
1131max_burst - INTEGER
1132 The limit of the number of new packets that can be initially sent. It
1133 controls how bursty the generated traffic can be.
1134
1135 Default: 4
1136
1137association_max_retrans - INTEGER
1138 Set the maximum number for retransmissions that an association can
1139 attempt deciding that the remote end is unreachable. If this value
1140 is exceeded, the association is terminated.
1141
1142 Default: 10
1143
1144max_init_retransmits - INTEGER
1145 The maximum number of retransmissions of INIT and COOKIE-ECHO chunks
1146 that an association will attempt before declaring the destination
1147 unreachable and terminating.
1148
1149 Default: 8
1150
1151path_max_retrans - INTEGER
1152 The maximum number of retransmissions that will be attempted on a given
1153 path. Once this threshold is exceeded, the path is considered
1154 unreachable, and new traffic will use a different path when the
1155 association is multihomed.
1156
1157 Default: 5
1158
1159rto_initial - INTEGER
1160 The initial round trip timeout value in milliseconds that will be used
1161 in calculating round trip times. This is the initial time interval
1162 for retransmissions.
1163
1164 Default: 3000
1077 1165
1078dev_weight FIXME 1166rto_max - INTEGER
1079discovery_slots FIXME 1167 The maximum value (in milliseconds) of the round trip timeout. This
1080discovery_timeout FIXME 1168 is the largest time interval that can elapse between retransmissions.
1081fast_poll_increase FIXME 1169
1082ip6_queue_maxlen FIXME 1170 Default: 60000
1083lap_keepalive_time FIXME 1171
1084lo_cong FIXME 1172rto_min - INTEGER
1085max_baud_rate FIXME 1173 The minimum value (in milliseconds) of the round trip timeout. This
1086max_dgram_qlen FIXME 1174 is the smallest time interval the can elapse between retransmissions.
1087max_noreply_time FIXME 1175
1088max_tx_data_size FIXME 1176 Default: 1000
1089max_tx_window FIXME 1177
1090min_tx_turn_time FIXME 1178hb_interval - INTEGER
1091mod_cong FIXME 1179 The interval (in milliseconds) between HEARTBEAT chunks. These chunks
1092no_cong FIXME 1180 are sent at the specified interval on idle paths to probe the state of
1093no_cong_thresh FIXME 1181 a given path between 2 associations.
1094slot_timeout FIXME 1182
1095warn_noreply_time FIXME 1183 Default: 30000
1184
1185sack_timeout - INTEGER
1186 The amount of time (in milliseconds) that the implementation will wait
1187 to send a SACK.
1188
1189 Default: 200
1190
1191valid_cookie_life - INTEGER
1192 The default lifetime of the SCTP cookie (in milliseconds). The cookie
1193 is used during association establishment.
1194
1195 Default: 60000
1196
1197cookie_preserve_enable - BOOLEAN
1198 Enable or disable the ability to extend the lifetime of the SCTP cookie
1199 that is used during the establishment phase of SCTP association
1200
1201 1: Enable cookie lifetime extension.
1202 0: Disable
1203
1204 Default: 1
1205
1206rcvbuf_policy - INTEGER
1207 Determines if the receive buffer is attributed to the socket or to
1208 association. SCTP supports the capability to create multiple
1209 associations on a single socket. When using this capability, it is
1210 possible that a single stalled association that's buffering a lot
1211 of data may block other associations from delivering their data by
1212 consuming all of the receive buffer space. To work around this,
1213 the rcvbuf_policy could be set to attribute the receiver buffer space
1214 to each association instead of the socket. This prevents the described
1215 blocking.
1216
1217 1: rcvbuf space is per association
1218 0: recbuf space is per socket
1219
1220 Default: 0
1221
1222sndbuf_policy - INTEGER
1223 Similar to rcvbuf_policy above, this applies to send buffer space.
1224
1225 1: Send buffer is tracked per association
1226 0: Send buffer is tracked per socket.
1227
1228 Default: 0
1229
1230sctp_mem - vector of 3 INTEGERs: min, pressure, max
1231 Number of pages allowed for queueing by all SCTP sockets.
1232
1233 min: Below this number of pages SCTP is not bothered about its
1234 memory appetite. When amount of memory allocated by SCTP exceeds
1235 this number, SCTP starts to moderate memory usage.
1236
1237 pressure: This value was introduced to follow format of tcp_mem.
1238
1239 max: Number of pages allowed for queueing by all SCTP sockets.
1240
1241 Default is calculated at boot time from amount of available memory.
1242
1243sctp_rmem - vector of 3 INTEGERs: min, default, max
1244 See tcp_rmem for a description.
1245
1246sctp_wmem - vector of 3 INTEGERs: min, default, max
1247 See tcp_wmem for a description.
1248
1249UNDOCUMENTED:
1096 1250
1251/proc/sys/net/core/*
1252 dev_weight FIXME
1253
1254/proc/sys/net/unix/*
1255 max_dgram_qlen FIXME
1256
1257/proc/sys/net/irda/*
1258 fast_poll_increase FIXME
1259 warn_noreply_time FIXME
1260 discovery_slots FIXME
1261 slot_timeout FIXME
1262 max_baud_rate FIXME
1263 discovery_timeout FIXME
1264 lap_keepalive_time FIXME
1265 max_noreply_time FIXME
1266 max_tx_data_size FIXME
1267 max_tx_window FIXME
1268 min_tx_turn_time FIXME
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
index c617b64c288e..9b777d9433cd 100644
--- a/drivers/net/arm/ixp4xx_eth.c
+++ b/drivers/net/arm/ixp4xx_eth.c
@@ -522,7 +522,6 @@ static int eth_poll(struct napi_struct *napi, int budget)
522#endif 522#endif
523 523
524 if ((n = queue_get_desc(rxq, port, 0)) < 0) { 524 if ((n = queue_get_desc(rxq, port, 0)) < 0) {
525 received = 0; /* No packet received */
526#if DEBUG_RX 525#if DEBUG_RX
527 printk(KERN_DEBUG "%s: eth_poll netif_rx_complete\n", 526 printk(KERN_DEBUG "%s: eth_poll netif_rx_complete\n",
528 dev->name); 527 dev->name);
@@ -543,7 +542,7 @@ static int eth_poll(struct napi_struct *napi, int budget)
543 printk(KERN_DEBUG "%s: eth_poll all done\n", 542 printk(KERN_DEBUG "%s: eth_poll all done\n",
544 dev->name); 543 dev->name);
545#endif 544#endif
546 return 0; /* all work done */ 545 return received; /* all work done */
547 } 546 }
548 547
549 desc = rx_desc_ptr(port, n); 548 desc = rx_desc_ptr(port, n);
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index aa4ee4439f04..2693f883ecda 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -690,6 +690,12 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
690 tun->attached = 1; 690 tun->attached = 1;
691 get_net(dev_net(tun->dev)); 691 get_net(dev_net(tun->dev));
692 692
693 /* Make sure persistent devices do not get stuck in
694 * xoff state.
695 */
696 if (netif_running(tun->dev))
697 netif_wake_queue(tun->dev);
698
693 strcpy(ifr->ifr_name, tun->dev->name); 699 strcpy(ifr->ifr_name, tun->dev->name);
694 return 0; 700 return 0;
695 701
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
index 343ed38f772d..4b274562f965 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -567,11 +567,11 @@ static int lbs_process_bss(struct bss_descriptor *bss,
567 pos += 8; 567 pos += 8;
568 568
569 /* beacon interval is 2 bytes long */ 569 /* beacon interval is 2 bytes long */
570 bss->beaconperiod = le16_to_cpup((void *) pos); 570 bss->beaconperiod = get_unaligned_le16(pos);
571 pos += 2; 571 pos += 2;
572 572
573 /* capability information is 2 bytes long */ 573 /* capability information is 2 bytes long */
574 bss->capability = le16_to_cpup((void *) pos); 574 bss->capability = get_unaligned_le16(pos);
575 lbs_deb_scan("process_bss: capabilities 0x%04x\n", bss->capability); 575 lbs_deb_scan("process_bss: capabilities 0x%04x\n", bss->capability);
576 pos += 2; 576 pos += 2;
577 577
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index ee953ca0c6a3..91cbd9e560bd 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -733,6 +733,17 @@ static int rt2400pci_init_registers(struct rt2x00_dev *rt2x00dev)
733 (rt2x00dev->rx->data_size / 128)); 733 (rt2x00dev->rx->data_size / 128));
734 rt2x00pci_register_write(rt2x00dev, CSR9, reg); 734 rt2x00pci_register_write(rt2x00dev, CSR9, reg);
735 735
736 rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
737 rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 0);
738 rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 0);
739 rt2x00_set_field32(&reg, CSR14_TBCN, 0);
740 rt2x00_set_field32(&reg, CSR14_TCFP, 0);
741 rt2x00_set_field32(&reg, CSR14_TATIMW, 0);
742 rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 0);
743 rt2x00_set_field32(&reg, CSR14_CFP_COUNT_PRELOAD, 0);
744 rt2x00_set_field32(&reg, CSR14_TBCM_PRELOAD, 0);
745 rt2x00pci_register_write(rt2x00dev, CSR14, reg);
746
736 rt2x00pci_register_write(rt2x00dev, CNT3, 0x3f080000); 747 rt2x00pci_register_write(rt2x00dev, CNT3, 0x3f080000);
737 748
738 rt2x00pci_register_read(rt2x00dev, ARCSR0, &reg); 749 rt2x00pci_register_read(rt2x00dev, ARCSR0, &reg);
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index 0423c251c78e..0f2a0e22fd71 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -831,6 +831,17 @@ static int rt2500pci_init_registers(struct rt2x00_dev *rt2x00dev)
831 rt2x00_set_field32(&reg, CSR11_CW_SELECT, 0); 831 rt2x00_set_field32(&reg, CSR11_CW_SELECT, 0);
832 rt2x00pci_register_write(rt2x00dev, CSR11, reg); 832 rt2x00pci_register_write(rt2x00dev, CSR11, reg);
833 833
834 rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
835 rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 0);
836 rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 0);
837 rt2x00_set_field32(&reg, CSR14_TBCN, 0);
838 rt2x00_set_field32(&reg, CSR14_TCFP, 0);
839 rt2x00_set_field32(&reg, CSR14_TATIMW, 0);
840 rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 0);
841 rt2x00_set_field32(&reg, CSR14_CFP_COUNT_PRELOAD, 0);
842 rt2x00_set_field32(&reg, CSR14_TBCM_PRELOAD, 0);
843 rt2x00pci_register_write(rt2x00dev, CSR14, reg);
844
834 rt2x00pci_register_write(rt2x00dev, CNT3, 0); 845 rt2x00pci_register_write(rt2x00dev, CNT3, 0);
835 846
836 rt2x00pci_register_read(rt2x00dev, TXCSR8, &reg); 847 rt2x00pci_register_read(rt2x00dev, TXCSR8, &reg);
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 0dd1cb537b92..367db10b96d9 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -812,6 +812,13 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev)
812 rt2x00_set_field16(&reg, TXRX_CSR8_BBP_ID1_VALID, 0); 812 rt2x00_set_field16(&reg, TXRX_CSR8_BBP_ID1_VALID, 0);
813 rt2500usb_register_write(rt2x00dev, TXRX_CSR8, reg); 813 rt2500usb_register_write(rt2x00dev, TXRX_CSR8, reg);
814 814
815 rt2500usb_register_read(rt2x00dev, TXRX_CSR19, &reg);
816 rt2x00_set_field16(&reg, TXRX_CSR19_TSF_COUNT, 0);
817 rt2x00_set_field16(&reg, TXRX_CSR19_TSF_SYNC, 0);
818 rt2x00_set_field16(&reg, TXRX_CSR19_TBCN, 0);
819 rt2x00_set_field16(&reg, TXRX_CSR19_BEACON_GEN, 0);
820 rt2500usb_register_write(rt2x00dev, TXRX_CSR19, reg);
821
815 rt2500usb_register_write(rt2x00dev, TXRX_CSR21, 0xe78f); 822 rt2500usb_register_write(rt2x00dev, TXRX_CSR21, 0xe78f);
816 rt2500usb_register_write(rt2x00dev, MAC_CSR9, 0xff1d); 823 rt2500usb_register_write(rt2x00dev, MAC_CSR9, 0xff1d);
817 824
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index bbf1048f6400..5a1330c5de71 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -1198,6 +1198,15 @@ static int rt61pci_init_registers(struct rt2x00_dev *rt2x00dev)
1198 rt2x00_set_field32(&reg, TXRX_CSR8_ACK_CTS_54MBS, 42); 1198 rt2x00_set_field32(&reg, TXRX_CSR8_ACK_CTS_54MBS, 42);
1199 rt2x00pci_register_write(rt2x00dev, TXRX_CSR8, reg); 1199 rt2x00pci_register_write(rt2x00dev, TXRX_CSR8, reg);
1200 1200
1201 rt2x00pci_register_read(rt2x00dev, TXRX_CSR9, &reg);
1202 rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_INTERVAL, 0);
1203 rt2x00_set_field32(&reg, TXRX_CSR9_TSF_TICKING, 0);
1204 rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 0);
1205 rt2x00_set_field32(&reg, TXRX_CSR9_TBTT_ENABLE, 0);
1206 rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_GEN, 0);
1207 rt2x00_set_field32(&reg, TXRX_CSR9_TIMESTAMP_COMPENSATE, 0);
1208 rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, reg);
1209
1201 rt2x00pci_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f); 1210 rt2x00pci_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f);
1202 1211
1203 rt2x00pci_register_write(rt2x00dev, MAC_CSR6, 0x00000fff); 1212 rt2x00pci_register_write(rt2x00dev, MAC_CSR6, 0x00000fff);
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 3ef318e098e7..25d8b660051f 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -1016,6 +1016,15 @@ static int rt73usb_init_registers(struct rt2x00_dev *rt2x00dev)
1016 rt2x00_set_field32(&reg, TXRX_CSR8_ACK_CTS_54MBS, 42); 1016 rt2x00_set_field32(&reg, TXRX_CSR8_ACK_CTS_54MBS, 42);
1017 rt73usb_register_write(rt2x00dev, TXRX_CSR8, reg); 1017 rt73usb_register_write(rt2x00dev, TXRX_CSR8, reg);
1018 1018
1019 rt73usb_register_read(rt2x00dev, TXRX_CSR9, &reg);
1020 rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_INTERVAL, 0);
1021 rt2x00_set_field32(&reg, TXRX_CSR9_TSF_TICKING, 0);
1022 rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 0);
1023 rt2x00_set_field32(&reg, TXRX_CSR9_TBTT_ENABLE, 0);
1024 rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_GEN, 0);
1025 rt2x00_set_field32(&reg, TXRX_CSR9_TIMESTAMP_COMPENSATE, 0);
1026 rt73usb_register_write(rt2x00dev, TXRX_CSR9, reg);
1027
1019 rt73usb_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f); 1028 rt73usb_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f);
1020 1029
1021 rt73usb_register_read(rt2x00dev, MAC_CSR6, &reg); 1030 rt73usb_register_read(rt2x00dev, MAC_CSR6, &reg);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 665f76af2fec..feaf43d17249 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -707,6 +707,7 @@ static void zd_op_remove_interface(struct ieee80211_hw *hw,
707{ 707{
708 struct zd_mac *mac = zd_hw_mac(hw); 708 struct zd_mac *mac = zd_hw_mac(hw);
709 mac->type = IEEE80211_IF_TYPE_INVALID; 709 mac->type = IEEE80211_IF_TYPE_INVALID;
710 zd_set_beacon_interval(&mac->chip, 0);
710 zd_write_mac_addr(&mac->chip, NULL); 711 zd_write_mac_addr(&mac->chip, NULL);
711} 712}
712 713
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h
index 2ca6bae88721..fb0c215a3051 100644
--- a/include/linux/xfrm.h
+++ b/include/linux/xfrm.h
@@ -339,6 +339,7 @@ struct xfrm_usersa_info {
339#define XFRM_STATE_NOPMTUDISC 4 339#define XFRM_STATE_NOPMTUDISC 4
340#define XFRM_STATE_WILDRECV 8 340#define XFRM_STATE_WILDRECV 8
341#define XFRM_STATE_ICMP 16 341#define XFRM_STATE_ICMP 16
342#define XFRM_STATE_AF_UNSPEC 32
342}; 343};
343 344
344struct xfrm_usersa_id { 345struct xfrm_usersa_id {
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index d16ae4623be6..f155a66d6ebf 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1357,17 +1357,17 @@ static int check_leaf(struct trie *t, struct leaf *l,
1357 t->stats.semantic_match_miss++; 1357 t->stats.semantic_match_miss++;
1358#endif 1358#endif
1359 if (err <= 0) 1359 if (err <= 0)
1360 return plen; 1360 return err;
1361 } 1361 }
1362 1362
1363 return -1; 1363 return 1;
1364} 1364}
1365 1365
1366static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp, 1366static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp,
1367 struct fib_result *res) 1367 struct fib_result *res)
1368{ 1368{
1369 struct trie *t = (struct trie *) tb->tb_data; 1369 struct trie *t = (struct trie *) tb->tb_data;
1370 int plen, ret = 0; 1370 int ret;
1371 struct node *n; 1371 struct node *n;
1372 struct tnode *pn; 1372 struct tnode *pn;
1373 int pos, bits; 1373 int pos, bits;
@@ -1391,10 +1391,7 @@ static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp,
1391 1391
1392 /* Just a leaf? */ 1392 /* Just a leaf? */
1393 if (IS_LEAF(n)) { 1393 if (IS_LEAF(n)) {
1394 plen = check_leaf(t, (struct leaf *)n, key, flp, res); 1394 ret = check_leaf(t, (struct leaf *)n, key, flp, res);
1395 if (plen < 0)
1396 goto failed;
1397 ret = 0;
1398 goto found; 1395 goto found;
1399 } 1396 }
1400 1397
@@ -1419,11 +1416,9 @@ static int fn_trie_lookup(struct fib_table *tb, const struct flowi *flp,
1419 } 1416 }
1420 1417
1421 if (IS_LEAF(n)) { 1418 if (IS_LEAF(n)) {
1422 plen = check_leaf(t, (struct leaf *)n, key, flp, res); 1419 ret = check_leaf(t, (struct leaf *)n, key, flp, res);
1423 if (plen < 0) 1420 if (ret > 0)
1424 goto backtrace; 1421 goto backtrace;
1425
1426 ret = 0;
1427 goto found; 1422 goto found;
1428 } 1423 }
1429 1424
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c
index 7750c97fde7b..ffeaffc3fffe 100644
--- a/net/ipv4/netfilter/nf_nat_snmp_basic.c
+++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c
@@ -439,8 +439,8 @@ static unsigned char asn1_oid_decode(struct asn1_ctx *ctx,
439 unsigned int *len) 439 unsigned int *len)
440{ 440{
441 unsigned long subid; 441 unsigned long subid;
442 unsigned int size;
443 unsigned long *optr; 442 unsigned long *optr;
443 size_t size;
444 444
445 size = eoc - ctx->pointer + 1; 445 size = eoc - ctx->pointer + 1;
446 446
diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
index 5ff0ce6e9d39..7ddc30f0744f 100644
--- a/net/ipv4/tcp_probe.c
+++ b/net/ipv4/tcp_probe.c
@@ -224,7 +224,7 @@ static __init int tcpprobe_init(void)
224 if (bufsize < 0) 224 if (bufsize < 0)
225 return -EINVAL; 225 return -EINVAL;
226 226
227 tcp_probe.log = kcalloc(sizeof(struct tcp_log), bufsize, GFP_KERNEL); 227 tcp_probe.log = kcalloc(bufsize, sizeof(struct tcp_log), GFP_KERNEL);
228 if (!tcp_probe.log) 228 if (!tcp_probe.log)
229 goto err0; 229 goto err0;
230 230
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c
index 602ea826f0a5..9f1084b4c0e8 100644
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
@@ -443,7 +443,7 @@ looped_back:
443 kfree_skb(skb); 443 kfree_skb(skb);
444 return -1; 444 return -1;
445 } 445 }
446 if (!ipv6_chk_home_addr(&init_net, addr)) { 446 if (!ipv6_chk_home_addr(dev_net(skb->dst->dev), addr)) {
447 IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), 447 IP6_INC_STATS_BH(ip6_dst_idev(skb->dst),
448 IPSTATS_MIB_INADDRERRORS); 448 IPSTATS_MIB_INADDRERRORS);
449 kfree_skb(skb); 449 kfree_skb(skb);
diff --git a/net/mac80211/rc80211_pid.h b/net/mac80211/rc80211_pid.h
index 2078803d3581..0a9135b974b5 100644
--- a/net/mac80211/rc80211_pid.h
+++ b/net/mac80211/rc80211_pid.h
@@ -141,7 +141,6 @@ struct rc_pid_events_file_info {
141 * rate behaviour values (lower means we should trust more what we learnt 141 * rate behaviour values (lower means we should trust more what we learnt
142 * about behaviour of rates, higher means we should trust more the natural 142 * about behaviour of rates, higher means we should trust more the natural
143 * ordering of rates) 143 * ordering of rates)
144 * @fast_start: if Y, push high rates right after initialization
145 */ 144 */
146struct rc_pid_debugfs_entries { 145struct rc_pid_debugfs_entries {
147 struct dentry *dir; 146 struct dentry *dir;
@@ -154,7 +153,6 @@ struct rc_pid_debugfs_entries {
154 struct dentry *sharpen_factor; 153 struct dentry *sharpen_factor;
155 struct dentry *sharpen_duration; 154 struct dentry *sharpen_duration;
156 struct dentry *norm_offset; 155 struct dentry *norm_offset;
157 struct dentry *fast_start;
158}; 156};
159 157
160void rate_control_pid_event_tx_status(struct rc_pid_event_buffer *buf, 158void rate_control_pid_event_tx_status(struct rc_pid_event_buffer *buf,
@@ -267,9 +265,6 @@ struct rc_pid_info {
267 /* Normalization offset. */ 265 /* Normalization offset. */
268 unsigned int norm_offset; 266 unsigned int norm_offset;
269 267
270 /* Fast starst parameter. */
271 unsigned int fast_start;
272
273 /* Rates information. */ 268 /* Rates information. */
274 struct rc_pid_rateinfo *rinfo; 269 struct rc_pid_rateinfo *rinfo;
275 270
diff --git a/net/mac80211/rc80211_pid_algo.c b/net/mac80211/rc80211_pid_algo.c
index 62388f8e9024..742c5b06cffd 100644
--- a/net/mac80211/rc80211_pid_algo.c
+++ b/net/mac80211/rc80211_pid_algo.c
@@ -398,13 +398,25 @@ static void *rate_control_pid_alloc(struct ieee80211_local *local)
398 return NULL; 398 return NULL;
399 } 399 }
400 400
401 pinfo->target = RC_PID_TARGET_PF;
402 pinfo->sampling_period = RC_PID_INTERVAL;
403 pinfo->coeff_p = RC_PID_COEFF_P;
404 pinfo->coeff_i = RC_PID_COEFF_I;
405 pinfo->coeff_d = RC_PID_COEFF_D;
406 pinfo->smoothing_shift = RC_PID_SMOOTHING_SHIFT;
407 pinfo->sharpen_factor = RC_PID_SHARPENING_FACTOR;
408 pinfo->sharpen_duration = RC_PID_SHARPENING_DURATION;
409 pinfo->norm_offset = RC_PID_NORM_OFFSET;
410 pinfo->rinfo = rinfo;
411 pinfo->oldrate = 0;
412
401 /* Sort the rates. This is optimized for the most common case (i.e. 413 /* Sort the rates. This is optimized for the most common case (i.e.
402 * almost-sorted CCK+OFDM rates). Kind of bubble-sort with reversed 414 * almost-sorted CCK+OFDM rates). Kind of bubble-sort with reversed
403 * mapping too. */ 415 * mapping too. */
404 for (i = 0; i < sband->n_bitrates; i++) { 416 for (i = 0; i < sband->n_bitrates; i++) {
405 rinfo[i].index = i; 417 rinfo[i].index = i;
406 rinfo[i].rev_index = i; 418 rinfo[i].rev_index = i;
407 if (pinfo->fast_start) 419 if (RC_PID_FAST_START)
408 rinfo[i].diff = 0; 420 rinfo[i].diff = 0;
409 else 421 else
410 rinfo[i].diff = i * pinfo->norm_offset; 422 rinfo[i].diff = i * pinfo->norm_offset;
@@ -425,19 +437,6 @@ static void *rate_control_pid_alloc(struct ieee80211_local *local)
425 break; 437 break;
426 } 438 }
427 439
428 pinfo->target = RC_PID_TARGET_PF;
429 pinfo->sampling_period = RC_PID_INTERVAL;
430 pinfo->coeff_p = RC_PID_COEFF_P;
431 pinfo->coeff_i = RC_PID_COEFF_I;
432 pinfo->coeff_d = RC_PID_COEFF_D;
433 pinfo->smoothing_shift = RC_PID_SMOOTHING_SHIFT;
434 pinfo->sharpen_factor = RC_PID_SHARPENING_FACTOR;
435 pinfo->sharpen_duration = RC_PID_SHARPENING_DURATION;
436 pinfo->norm_offset = RC_PID_NORM_OFFSET;
437 pinfo->fast_start = RC_PID_FAST_START;
438 pinfo->rinfo = rinfo;
439 pinfo->oldrate = 0;
440
441#ifdef CONFIG_MAC80211_DEBUGFS 440#ifdef CONFIG_MAC80211_DEBUGFS
442 de = &pinfo->dentries; 441 de = &pinfo->dentries;
443 de->dir = debugfs_create_dir("rc80211_pid", 442 de->dir = debugfs_create_dir("rc80211_pid",
@@ -465,9 +464,6 @@ static void *rate_control_pid_alloc(struct ieee80211_local *local)
465 de->norm_offset = debugfs_create_u32("norm_offset", 464 de->norm_offset = debugfs_create_u32("norm_offset",
466 S_IRUSR | S_IWUSR, de->dir, 465 S_IRUSR | S_IWUSR, de->dir,
467 &pinfo->norm_offset); 466 &pinfo->norm_offset);
468 de->fast_start = debugfs_create_bool("fast_start",
469 S_IRUSR | S_IWUSR, de->dir,
470 &pinfo->fast_start);
471#endif 467#endif
472 468
473 return pinfo; 469 return pinfo;
@@ -479,7 +475,6 @@ static void rate_control_pid_free(void *priv)
479#ifdef CONFIG_MAC80211_DEBUGFS 475#ifdef CONFIG_MAC80211_DEBUGFS
480 struct rc_pid_debugfs_entries *de = &pinfo->dentries; 476 struct rc_pid_debugfs_entries *de = &pinfo->dentries;
481 477
482 debugfs_remove(de->fast_start);
483 debugfs_remove(de->norm_offset); 478 debugfs_remove(de->norm_offset);
484 debugfs_remove(de->sharpen_duration); 479 debugfs_remove(de->sharpen_duration);
485 debugfs_remove(de->sharpen_factor); 480 debugfs_remove(de->sharpen_factor);
diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
index 740acd6bc7d9..420a10d8eb1e 100644
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
@@ -844,8 +844,14 @@ static int tcp_packet(struct nf_conn *ct,
844 /* Attempt to reopen a closed/aborted connection. 844 /* Attempt to reopen a closed/aborted connection.
845 * Delete this connection and look up again. */ 845 * Delete this connection and look up again. */
846 write_unlock_bh(&tcp_lock); 846 write_unlock_bh(&tcp_lock);
847 nf_ct_kill(ct); 847
848 return -NF_REPEAT; 848 /* Only repeat if we can actually remove the timer.
849 * Destruction may already be in progress in process
850 * context and we must give it a chance to terminate.
851 */
852 if (nf_ct_kill(ct))
853 return -NF_REPEAT;
854 return -NF_DROP;
849 } 855 }
850 /* Fall through */ 856 /* Fall through */
851 case TCP_CONNTRACK_IGNORE: 857 case TCP_CONNTRACK_IGNORE:
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c
index fdc14a0d21af..9080c61b71a5 100644
--- a/net/netlabel/netlabel_cipso_v4.c
+++ b/net/netlabel/netlabel_cipso_v4.c
@@ -584,12 +584,7 @@ list_start:
584 rcu_read_unlock(); 584 rcu_read_unlock();
585 585
586 genlmsg_end(ans_skb, data); 586 genlmsg_end(ans_skb, data);
587 587 return genlmsg_reply(ans_skb, info);
588 ret_val = genlmsg_reply(ans_skb, info);
589 if (ret_val != 0)
590 goto list_failure;
591
592 return 0;
593 588
594list_retry: 589list_retry:
595 /* XXX - this limit is a guesstimate */ 590 /* XXX - this limit is a guesstimate */
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c
index 22c191267808..44be5d5261f4 100644
--- a/net/netlabel/netlabel_mgmt.c
+++ b/net/netlabel/netlabel_mgmt.c
@@ -386,11 +386,7 @@ static int netlbl_mgmt_listdef(struct sk_buff *skb, struct genl_info *info)
386 rcu_read_unlock(); 386 rcu_read_unlock();
387 387
388 genlmsg_end(ans_skb, data); 388 genlmsg_end(ans_skb, data);
389 389 return genlmsg_reply(ans_skb, info);
390 ret_val = genlmsg_reply(ans_skb, info);
391 if (ret_val != 0)
392 goto listdef_failure;
393 return 0;
394 390
395listdef_failure_lock: 391listdef_failure_lock:
396 rcu_read_unlock(); 392 rcu_read_unlock();
@@ -501,11 +497,7 @@ static int netlbl_mgmt_version(struct sk_buff *skb, struct genl_info *info)
501 goto version_failure; 497 goto version_failure;
502 498
503 genlmsg_end(ans_skb, data); 499 genlmsg_end(ans_skb, data);
504 500 return genlmsg_reply(ans_skb, info);
505 ret_val = genlmsg_reply(ans_skb, info);
506 if (ret_val != 0)
507 goto version_failure;
508 return 0;
509 501
510version_failure: 502version_failure:
511 kfree_skb(ans_skb); 503 kfree_skb(ans_skb);
diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
index 52b2611a6eb6..56f80872924e 100644
--- a/net/netlabel/netlabel_unlabeled.c
+++ b/net/netlabel/netlabel_unlabeled.c
@@ -1107,11 +1107,7 @@ static int netlbl_unlabel_list(struct sk_buff *skb, struct genl_info *info)
1107 goto list_failure; 1107 goto list_failure;
1108 1108
1109 genlmsg_end(ans_skb, data); 1109 genlmsg_end(ans_skb, data);
1110 1110 return genlmsg_reply(ans_skb, info);
1111 ret_val = genlmsg_reply(ans_skb, info);
1112 if (ret_val != 0)
1113 goto list_failure;
1114 return 0;
1115 1111
1116list_failure: 1112list_failure:
1117 kfree_skb(ans_skb); 1113 kfree_skb(ans_skb);
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index b976d9ed10e4..04c41504f84c 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -277,9 +277,8 @@ static void copy_from_user_state(struct xfrm_state *x, struct xfrm_usersa_info *
277 memcpy(&x->props.saddr, &p->saddr, sizeof(x->props.saddr)); 277 memcpy(&x->props.saddr, &p->saddr, sizeof(x->props.saddr));
278 x->props.flags = p->flags; 278 x->props.flags = p->flags;
279 279
280 if (!x->sel.family) 280 if (!x->sel.family && !(p->flags & XFRM_STATE_AF_UNSPEC))
281 x->sel.family = p->family; 281 x->sel.family = p->family;
282
283} 282}
284 283
285/* 284/*