Contents of /trunk/kernel26-alx/patches-2.6.23-r1/0116-2.6.23.17-all-fixes.patch
Parent Directory | Revision Log
Revision 658 -
(show annotations)
(download)
Mon Jun 23 21:39:39 2008 UTC (16 years, 3 months ago) by niro
File size: 16283 byte(s)
Mon Jun 23 21:39:39 2008 UTC (16 years, 3 months ago) by niro
File size: 16283 byte(s)
2.6.23-alx-r1: new default as we fix the via epia clocksource=tsc quircks -linux-2.6.23.17 -fbcondecor-0.9.4 -squashfs-3.3 -unionfs-2.3.3 -ipw3945-1.2.2 -mptbase-vmware fix
1 | diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c |
2 | index ba931be..5169ecc 100644 |
3 | --- a/arch/powerpc/platforms/powermac/feature.c |
4 | +++ b/arch/powerpc/platforms/powermac/feature.c |
5 | @@ -2565,6 +2565,8 @@ static void __init probe_uninorth(void) |
6 | |
7 | /* Locate core99 Uni-N */ |
8 | uninorth_node = of_find_node_by_name(NULL, "uni-n"); |
9 | + uninorth_maj = 1; |
10 | + |
11 | /* Locate G5 u3 */ |
12 | if (uninorth_node == NULL) { |
13 | uninorth_node = of_find_node_by_name(NULL, "u3"); |
14 | @@ -2575,8 +2577,10 @@ static void __init probe_uninorth(void) |
15 | uninorth_node = of_find_node_by_name(NULL, "u4"); |
16 | uninorth_maj = 4; |
17 | } |
18 | - if (uninorth_node == NULL) |
19 | + if (uninorth_node == NULL) { |
20 | + uninorth_maj = 0; |
21 | return; |
22 | + } |
23 | |
24 | addrp = of_get_property(uninorth_node, "reg", NULL); |
25 | if (addrp == NULL) |
26 | @@ -3029,3 +3033,8 @@ void pmac_resume_agp_for_card(struct pci_dev *dev) |
27 | pmac_agp_resume(pmac_agp_bridge); |
28 | } |
29 | EXPORT_SYMBOL(pmac_resume_agp_for_card); |
30 | + |
31 | +int pmac_get_uninorth_variant(void) |
32 | +{ |
33 | + return uninorth_maj; |
34 | +} |
35 | diff --git a/arch/x86_64/mm/pageattr.c b/arch/x86_64/mm/pageattr.c |
36 | index eff3b22..7770e10 100644 |
37 | --- a/arch/x86_64/mm/pageattr.c |
38 | +++ b/arch/x86_64/mm/pageattr.c |
39 | @@ -207,7 +207,7 @@ int change_page_attr_addr(unsigned long address, int numpages, pgprot_t prot) |
40 | if (__pa(address) < KERNEL_TEXT_SIZE) { |
41 | unsigned long addr2; |
42 | pgprot_t prot2; |
43 | - addr2 = __START_KERNEL_map + __pa(address); |
44 | + addr2 = __START_KERNEL_map + __pa(address) - phys_base; |
45 | /* Make sure the kernel mappings stay executable */ |
46 | prot2 = pte_pgprot(pte_mkexec(pfn_pte(0, prot))); |
47 | err = __change_page_attr(addr2, pfn, prot2, |
48 | diff --git a/drivers/macintosh/smu.c b/drivers/macintosh/smu.c |
49 | index d409f67..1ebe7a3 100644 |
50 | --- a/drivers/macintosh/smu.c |
51 | +++ b/drivers/macintosh/smu.c |
52 | @@ -85,6 +85,7 @@ struct smu_device { |
53 | u32 cmd_buf_abs; /* command buffer absolute */ |
54 | struct list_head cmd_list; |
55 | struct smu_cmd *cmd_cur; /* pending command */ |
56 | + int broken_nap; |
57 | struct list_head cmd_i2c_list; |
58 | struct smu_i2c_cmd *cmd_i2c_cur; /* pending i2c command */ |
59 | struct timer_list i2c_timer; |
60 | @@ -135,6 +136,19 @@ static void smu_start_cmd(void) |
61 | fend = faddr + smu->cmd_buf->length + 2; |
62 | flush_inval_dcache_range(faddr, fend); |
63 | |
64 | + |
65 | + /* We also disable NAP mode for the duration of the command |
66 | + * on U3 based machines. |
67 | + * This is slightly racy as it can be written back to 1 by a sysctl |
68 | + * but that never happens in practice. There seem to be an issue with |
69 | + * U3 based machines such as the iMac G5 where napping for the |
70 | + * whole duration of the command prevents the SMU from fetching it |
71 | + * from memory. This might be related to the strange i2c based |
72 | + * mechanism the SMU uses to access memory. |
73 | + */ |
74 | + if (smu->broken_nap) |
75 | + powersave_nap = 0; |
76 | + |
77 | /* This isn't exactly a DMA mapping here, I suspect |
78 | * the SMU is actually communicating with us via i2c to the |
79 | * northbridge or the CPU to access RAM. |
80 | @@ -211,6 +225,10 @@ static irqreturn_t smu_db_intr(int irq, void *arg) |
81 | misc = cmd->misc; |
82 | mb(); |
83 | cmd->status = rc; |
84 | + |
85 | + /* Re-enable NAP mode */ |
86 | + if (smu->broken_nap) |
87 | + powersave_nap = 1; |
88 | bail: |
89 | /* Start next command if any */ |
90 | smu_start_cmd(); |
91 | @@ -461,7 +479,7 @@ int __init smu_init (void) |
92 | if (np == NULL) |
93 | return -ENODEV; |
94 | |
95 | - printk(KERN_INFO "SMU driver %s %s\n", VERSION, AUTHOR); |
96 | + printk(KERN_INFO "SMU: Driver %s %s\n", VERSION, AUTHOR); |
97 | |
98 | if (smu_cmdbuf_abs == 0) { |
99 | printk(KERN_ERR "SMU: Command buffer not allocated !\n"); |
100 | @@ -533,6 +551,11 @@ int __init smu_init (void) |
101 | goto fail; |
102 | } |
103 | |
104 | + /* U3 has an issue with NAP mode when issuing SMU commands */ |
105 | + smu->broken_nap = pmac_get_uninorth_variant() < 4; |
106 | + if (smu->broken_nap) |
107 | + printk(KERN_INFO "SMU: using NAP mode workaround\n"); |
108 | + |
109 | sys_ctrler = SYS_CTRLER_SMU; |
110 | return 0; |
111 | |
112 | diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c |
113 | index 2c6116f..2b28a24 100644 |
114 | --- a/drivers/scsi/sd.c |
115 | +++ b/drivers/scsi/sd.c |
116 | @@ -901,6 +901,7 @@ static void sd_rw_intr(struct scsi_cmnd * SCpnt) |
117 | unsigned int xfer_size = SCpnt->request_bufflen; |
118 | unsigned int good_bytes = result ? 0 : xfer_size; |
119 | u64 start_lba = SCpnt->request->sector; |
120 | + u64 end_lba = SCpnt->request->sector + (xfer_size / 512); |
121 | u64 bad_lba; |
122 | struct scsi_sense_hdr sshdr; |
123 | int sense_valid = 0; |
124 | @@ -939,26 +940,23 @@ static void sd_rw_intr(struct scsi_cmnd * SCpnt) |
125 | goto out; |
126 | if (xfer_size <= SCpnt->device->sector_size) |
127 | goto out; |
128 | - switch (SCpnt->device->sector_size) { |
129 | - case 256: |
130 | + if (SCpnt->device->sector_size < 512) { |
131 | + /* only legitimate sector_size here is 256 */ |
132 | start_lba <<= 1; |
133 | - break; |
134 | - case 512: |
135 | - break; |
136 | - case 1024: |
137 | - start_lba >>= 1; |
138 | - break; |
139 | - case 2048: |
140 | - start_lba >>= 2; |
141 | - break; |
142 | - case 4096: |
143 | - start_lba >>= 3; |
144 | - break; |
145 | - default: |
146 | - /* Print something here with limiting frequency. */ |
147 | - goto out; |
148 | - break; |
149 | + end_lba <<= 1; |
150 | + } else { |
151 | + /* be careful ... don't want any overflows */ |
152 | + u64 factor = SCpnt->device->sector_size / 512; |
153 | + do_div(start_lba, factor); |
154 | + do_div(end_lba, factor); |
155 | } |
156 | + |
157 | + if (bad_lba < start_lba || bad_lba >= end_lba) |
158 | + /* the bad lba was reported incorrectly, we have |
159 | + * no idea where the error is |
160 | + */ |
161 | + goto out; |
162 | + |
163 | /* This computation should always be done in terms of |
164 | * the resolution of the device's medium. |
165 | */ |
166 | diff --git a/fs/nfs/write.c b/fs/nfs/write.c |
167 | index a2a4865..331a5bb 100644 |
168 | --- a/fs/nfs/write.c |
169 | +++ b/fs/nfs/write.c |
170 | @@ -717,6 +717,17 @@ int nfs_flush_incompatible(struct file *file, struct page *page) |
171 | } |
172 | |
173 | /* |
174 | + * If the page cache is marked as unsafe or invalid, then we can't rely on |
175 | + * the PageUptodate() flag. In this case, we will need to turn off |
176 | + * write optimisations that depend on the page contents being correct. |
177 | + */ |
178 | +static int nfs_write_pageuptodate(struct page *page, struct inode *inode) |
179 | +{ |
180 | + return PageUptodate(page) && |
181 | + !(NFS_I(inode)->cache_validity & (NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA)); |
182 | +} |
183 | + |
184 | +/* |
185 | * Update and possibly write a cached page of an NFS file. |
186 | * |
187 | * XXX: Keep an eye on generic_file_read to make sure it doesn't do bad |
188 | @@ -737,10 +748,13 @@ int nfs_updatepage(struct file *file, struct page *page, |
189 | (long long)(page_offset(page) +offset)); |
190 | |
191 | /* If we're not using byte range locks, and we know the page |
192 | - * is entirely in cache, it may be more efficient to avoid |
193 | - * fragmenting write requests. |
194 | + * is up to date, it may be more efficient to extend the write |
195 | + * to cover the entire page in order to avoid fragmentation |
196 | + * inefficiencies. |
197 | */ |
198 | - if (PageUptodate(page) && inode->i_flock == NULL && !(file->f_mode & O_SYNC)) { |
199 | + if (nfs_write_pageuptodate(page, inode) && |
200 | + inode->i_flock == NULL && |
201 | + !(file->f_mode & O_SYNC)) { |
202 | count = max(count + offset, nfs_page_length(page)); |
203 | offset = 0; |
204 | } |
205 | diff --git a/include/asm-powerpc/pmac_feature.h b/include/asm-powerpc/pmac_feature.h |
206 | index 26bcb0a..877c35a 100644 |
207 | --- a/include/asm-powerpc/pmac_feature.h |
208 | +++ b/include/asm-powerpc/pmac_feature.h |
209 | @@ -392,6 +392,14 @@ extern u32 __iomem *uninorth_base; |
210 | #define UN_BIS(r,v) (UN_OUT((r), UN_IN(r) | (v))) |
211 | #define UN_BIC(r,v) (UN_OUT((r), UN_IN(r) & ~(v))) |
212 | |
213 | +/* Uninorth variant: |
214 | + * |
215 | + * 0 = not uninorth |
216 | + * 1 = U1.x or U2.x |
217 | + * 3 = U3 |
218 | + * 4 = U4 |
219 | + */ |
220 | +extern int pmac_get_uninorth_variant(void); |
221 | |
222 | #endif /* __ASM_POWERPC_PMAC_FEATURE_H */ |
223 | #endif /* __KERNEL__ */ |
224 | diff --git a/include/linux/ktime.h b/include/linux/ktime.h |
225 | index dae7143..15a0229 100644 |
226 | --- a/include/linux/ktime.h |
227 | +++ b/include/linux/ktime.h |
228 | @@ -289,6 +289,8 @@ static inline ktime_t ktime_add_us(const ktime_t kt, const u64 usec) |
229 | return ktime_add_ns(kt, usec * 1000); |
230 | } |
231 | |
232 | +extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs); |
233 | + |
234 | /* |
235 | * The resolution of the clocks. The resolution value is returned in |
236 | * the clock_getres() system call to give application programmers an |
237 | diff --git a/kernel/futex.c b/kernel/futex.c |
238 | index b658a9a..0c55a58 100644 |
239 | --- a/kernel/futex.c |
240 | +++ b/kernel/futex.c |
241 | @@ -2063,7 +2063,7 @@ asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val, |
242 | |
243 | t = timespec_to_ktime(ts); |
244 | if (cmd == FUTEX_WAIT) |
245 | - t = ktime_add(ktime_get(), t); |
246 | + t = ktime_add_safe(ktime_get(), t); |
247 | tp = &t; |
248 | } |
249 | /* |
250 | diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c |
251 | index f938c23..bba74b6 100644 |
252 | --- a/kernel/futex_compat.c |
253 | +++ b/kernel/futex_compat.c |
254 | @@ -175,7 +175,7 @@ asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val, |
255 | |
256 | t = timespec_to_ktime(ts); |
257 | if (cmd == FUTEX_WAIT) |
258 | - t = ktime_add(ktime_get(), t); |
259 | + t = ktime_add_safe(ktime_get(), t); |
260 | tp = &t; |
261 | } |
262 | if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE) |
263 | diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c |
264 | index ee8d0ac..2ee0497 100644 |
265 | --- a/kernel/hrtimer.c |
266 | +++ b/kernel/hrtimer.c |
267 | @@ -301,6 +301,24 @@ unsigned long ktime_divns(const ktime_t kt, s64 div) |
268 | } |
269 | #endif /* BITS_PER_LONG >= 64 */ |
270 | |
271 | +/* |
272 | + * Add two ktime values and do a safety check for overflow: |
273 | + */ |
274 | + |
275 | +ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs) |
276 | +{ |
277 | + ktime_t res = ktime_add(lhs, rhs); |
278 | + |
279 | + /* |
280 | + * We use KTIME_SEC_MAX here, the maximum timeout which we can |
281 | + * return to user space in a timespec: |
282 | + */ |
283 | + if (res.tv64 < 0 || res.tv64 < lhs.tv64 || res.tv64 < rhs.tv64) |
284 | + res = ktime_set(KTIME_SEC_MAX, 0); |
285 | + |
286 | + return res; |
287 | +} |
288 | + |
289 | /* High resolution timer related functions */ |
290 | #ifdef CONFIG_HIGH_RES_TIMERS |
291 | |
292 | @@ -658,13 +676,7 @@ hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval) |
293 | */ |
294 | orun++; |
295 | } |
296 | - timer->expires = ktime_add(timer->expires, interval); |
297 | - /* |
298 | - * Make sure, that the result did not wrap with a very large |
299 | - * interval. |
300 | - */ |
301 | - if (timer->expires.tv64 < 0) |
302 | - timer->expires = ktime_set(KTIME_SEC_MAX, 0); |
303 | + timer->expires = ktime_add_safe(timer->expires, interval); |
304 | |
305 | return orun; |
306 | } |
307 | @@ -815,7 +827,7 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) |
308 | new_base = switch_hrtimer_base(timer, base); |
309 | |
310 | if (mode == HRTIMER_MODE_REL) { |
311 | - tim = ktime_add(tim, new_base->get_time()); |
312 | + tim = ktime_add_safe(tim, new_base->get_time()); |
313 | /* |
314 | * CONFIG_TIME_LOW_RES is a temporary way for architectures |
315 | * to signal that they simply return xtime in |
316 | @@ -824,16 +836,8 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode) |
317 | * timeouts. This will go away with the GTOD framework. |
318 | */ |
319 | #ifdef CONFIG_TIME_LOW_RES |
320 | - tim = ktime_add(tim, base->resolution); |
321 | + tim = ktime_add_safe(tim, base->resolution); |
322 | #endif |
323 | - /* |
324 | - * Careful here: User space might have asked for a |
325 | - * very long sleep, so the add above might result in a |
326 | - * negative number, which enqueues the timer in front |
327 | - * of the queue. |
328 | - */ |
329 | - if (tim.tv64 < 0) |
330 | - tim.tv64 = KTIME_MAX; |
331 | } |
332 | timer->expires = tim; |
333 | |
334 | diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c |
335 | index f1a73f0..7279484 100644 |
336 | --- a/kernel/irq/chip.c |
337 | +++ b/kernel/irq/chip.c |
338 | @@ -246,6 +246,17 @@ static unsigned int default_startup(unsigned int irq) |
339 | } |
340 | |
341 | /* |
342 | + * default shutdown function |
343 | + */ |
344 | +static void default_shutdown(unsigned int irq) |
345 | +{ |
346 | + struct irq_desc *desc = irq_desc + irq; |
347 | + |
348 | + desc->chip->mask(irq); |
349 | + desc->status |= IRQ_MASKED; |
350 | +} |
351 | + |
352 | +/* |
353 | * Fixup enable/disable function pointers |
354 | */ |
355 | void irq_chip_set_defaults(struct irq_chip *chip) |
356 | @@ -256,8 +267,15 @@ void irq_chip_set_defaults(struct irq_chip *chip) |
357 | chip->disable = default_disable; |
358 | if (!chip->startup) |
359 | chip->startup = default_startup; |
360 | + /* |
361 | + * We use chip->disable, when the user provided its own. When |
362 | + * we have default_disable set for chip->disable, then we need |
363 | + * to use default_shutdown, otherwise the irq line is not |
364 | + * disabled on free_irq(): |
365 | + */ |
366 | if (!chip->shutdown) |
367 | - chip->shutdown = chip->disable; |
368 | + chip->shutdown = chip->disable != default_disable ? |
369 | + chip->disable : default_shutdown; |
370 | if (!chip->name) |
371 | chip->name = chip->typename; |
372 | if (!chip->end) |
373 | diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c |
374 | index 7a15afb..00c9e25 100644 |
375 | --- a/kernel/posix-timers.c |
376 | +++ b/kernel/posix-timers.c |
377 | @@ -765,9 +765,11 @@ common_timer_set(struct k_itimer *timr, int flags, |
378 | /* SIGEV_NONE timers are not queued ! See common_timer_get */ |
379 | if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) { |
380 | /* Setup correct expiry time for relative timers */ |
381 | - if (mode == HRTIMER_MODE_REL) |
382 | - timer->expires = ktime_add(timer->expires, |
383 | - timer->base->get_time()); |
384 | + if (mode == HRTIMER_MODE_REL) { |
385 | + timer->expires = |
386 | + ktime_add_safe(timer->expires, |
387 | + timer->base->get_time()); |
388 | + } |
389 | return 0; |
390 | } |
391 | |
392 | diff --git a/mm/memory.c b/mm/memory.c |
393 | index f82b359..51a8691 100644 |
394 | --- a/mm/memory.c |
395 | +++ b/mm/memory.c |
396 | @@ -981,6 +981,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
397 | int i; |
398 | unsigned int vm_flags; |
399 | |
400 | + if (len <= 0) |
401 | + return 0; |
402 | /* |
403 | * Require read or write permissions. |
404 | * If 'force' is set, we only require the "MAY" flags. |
405 | diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c |
406 | index 70c5b7d..09b902d 100644 |
407 | --- a/net/netfilter/nf_conntrack_proto_tcp.c |
408 | +++ b/net/netfilter/nf_conntrack_proto_tcp.c |
409 | @@ -135,7 +135,7 @@ enum tcp_bit_set { |
410 | * CLOSE_WAIT: ACK seen (after FIN) |
411 | * LAST_ACK: FIN seen (after FIN) |
412 | * TIME_WAIT: last ACK seen |
413 | - * CLOSE: closed connection |
414 | + * CLOSE: closed connection (RST) |
415 | * |
416 | * LISTEN state is not used. |
417 | * |
418 | @@ -834,8 +834,21 @@ static int tcp_packet(struct nf_conn *conntrack, |
419 | case TCP_CONNTRACK_SYN_SENT: |
420 | if (old_state < TCP_CONNTRACK_TIME_WAIT) |
421 | break; |
422 | - if ((conntrack->proto.tcp.seen[!dir].flags & |
423 | - IP_CT_TCP_FLAG_CLOSE_INIT) |
424 | + /* RFC 1122: "When a connection is closed actively, |
425 | + * it MUST linger in TIME-WAIT state for a time 2xMSL |
426 | + * (Maximum Segment Lifetime). However, it MAY accept |
427 | + * a new SYN from the remote TCP to reopen the connection |
428 | + * directly from TIME-WAIT state, if..." |
429 | + * We ignore the conditions because we are in the |
430 | + * TIME-WAIT state anyway. |
431 | + * |
432 | + * Handle aborted connections: we and the server |
433 | + * think there is an existing connection but the client |
434 | + * aborts it and starts a new one. |
435 | + */ |
436 | + if (((conntrack->proto.tcp.seen[dir].flags |
437 | + | conntrack->proto.tcp.seen[!dir].flags) |
438 | + & IP_CT_TCP_FLAG_CLOSE_INIT) |
439 | || (conntrack->proto.tcp.last_dir == dir |
440 | && conntrack->proto.tcp.last_index == TCP_RST_SET)) { |
441 | /* Attempt to reopen a closed/aborted connection. |
442 | @@ -850,16 +863,23 @@ static int tcp_packet(struct nf_conn *conntrack, |
443 | case TCP_CONNTRACK_IGNORE: |
444 | /* Ignored packets: |
445 | * |
446 | + * Our connection entry may be out of sync, so ignore |
447 | + * packets which may signal the real connection between |
448 | + * the client and the server. |
449 | + * |
450 | * a) SYN in ORIGINAL |
451 | * b) SYN/ACK in REPLY |
452 | * c) ACK in reply direction after initial SYN in original. |
453 | + * |
454 | + * If the ignored packet is invalid, the receiver will send |
455 | + * a RST we'll catch below. |
456 | */ |
457 | if (index == TCP_SYNACK_SET |
458 | && conntrack->proto.tcp.last_index == TCP_SYN_SET |
459 | && conntrack->proto.tcp.last_dir != dir |
460 | && ntohl(th->ack_seq) == |
461 | conntrack->proto.tcp.last_end) { |
462 | - /* This SYN/ACK acknowledges a SYN that we earlier |
463 | + /* b) This SYN/ACK acknowledges a SYN that we earlier |
464 | * ignored as invalid. This means that the client and |
465 | * the server are both in sync, while the firewall is |
466 | * not. We kill this session and block the SYN/ACK so |
467 | @@ -884,7 +904,7 @@ static int tcp_packet(struct nf_conn *conntrack, |
468 | write_unlock_bh(&tcp_lock); |
469 | if (LOG_INVALID(IPPROTO_TCP)) |
470 | nf_log_packet(pf, 0, skb, NULL, NULL, NULL, |
471 | - "nf_ct_tcp: invalid packed ignored "); |
472 | + "nf_ct_tcp: invalid packet ignored "); |
473 | return NF_ACCEPT; |
474 | case TCP_CONNTRACK_MAX: |
475 | /* Invalid packet */ |
476 | @@ -938,8 +958,7 @@ static int tcp_packet(struct nf_conn *conntrack, |
477 | |
478 | conntrack->proto.tcp.state = new_state; |
479 | if (old_state != new_state |
480 | - && (new_state == TCP_CONNTRACK_FIN_WAIT |
481 | - || new_state == TCP_CONNTRACK_CLOSE)) |
482 | + && new_state == TCP_CONNTRACK_FIN_WAIT) |
483 | conntrack->proto.tcp.seen[dir].flags |= IP_CT_TCP_FLAG_CLOSE_INIT; |
484 | timeout = conntrack->proto.tcp.retrans >= nf_ct_tcp_max_retrans |
485 | && *tcp_timeouts[new_state] > nf_ct_tcp_timeout_max_retrans |