diff options
| -rw-r--r-- | arch/ppc64/kernel/time.c | 2 | ||||
| -rw-r--r-- | arch/ppc64/mm/init.c | 3 | ||||
| -rw-r--r-- | drivers/char/drm/drm_vm.c | 3 | ||||
| -rw-r--r-- | drivers/char/drm/mga_drv.h | 2 | ||||
| -rw-r--r-- | drivers/char/drm/mga_state.c | 2 | ||||
| -rw-r--r-- | drivers/message/fusion/mptsas.c | 12 | ||||
| -rw-r--r-- | include/linux/hugetlb.h | 16 | ||||
| -rw-r--r-- | mm/hugetlb.c | 22 | ||||
| -rw-r--r-- | mm/memory.c | 14 | ||||
| -rw-r--r-- | net/dccp/ipv4.c | 2 | ||||
| -rw-r--r-- | net/dccp/output.c | 10 | ||||
| -rw-r--r-- | net/dccp/proto.c | 2 | ||||
| -rw-r--r-- | net/ipv4/tcp_output.c | 12 |
13 files changed, 49 insertions, 53 deletions
diff --git a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c index 9939c206afa4..b56c6a324e17 100644 --- a/arch/ppc64/kernel/time.c +++ b/arch/ppc64/kernel/time.c | |||
| @@ -870,7 +870,7 @@ void div128_by_32( unsigned long dividend_high, unsigned long dividend_low, | |||
| 870 | rb = ((ra + b) - (x * divisor)) << 32; | 870 | rb = ((ra + b) - (x * divisor)) << 32; |
| 871 | 871 | ||
| 872 | y = (rb + c)/divisor; | 872 | y = (rb + c)/divisor; |
| 873 | rc = ((rb + b) - (y * divisor)) << 32; | 873 | rc = ((rb + c) - (y * divisor)) << 32; |
| 874 | 874 | ||
| 875 | z = (rc + d)/divisor; | 875 | z = (rc + d)/divisor; |
| 876 | 876 | ||
diff --git a/arch/ppc64/mm/init.c b/arch/ppc64/mm/init.c index c2157c9c3acb..be64b157afce 100644 --- a/arch/ppc64/mm/init.c +++ b/arch/ppc64/mm/init.c | |||
| @@ -799,8 +799,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long ea, | |||
| 799 | if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) | 799 | if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) |
| 800 | local = 1; | 800 | local = 1; |
| 801 | 801 | ||
| 802 | __hash_page(ea, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep, | 802 | __hash_page(ea, 0, vsid, ptep, 0x300, local); |
| 803 | 0x300, local); | ||
| 804 | local_irq_restore(flags); | 803 | local_irq_restore(flags); |
| 805 | } | 804 | } |
| 806 | 805 | ||
diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c index ced4215e2275..39ea96e42c5b 100644 --- a/drivers/char/drm/drm_vm.c +++ b/drivers/char/drm/drm_vm.c | |||
| @@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma, | |||
| 148 | 148 | ||
| 149 | offset = address - vma->vm_start; | 149 | offset = address - vma->vm_start; |
| 150 | i = (unsigned long)map->handle + offset; | 150 | i = (unsigned long)map->handle + offset; |
| 151 | page = vmalloc_to_page((void *)i); | 151 | page = (map->type == _DRM_CONSISTENT) ? |
| 152 | virt_to_page((void *)i) : vmalloc_to_page((void *)i); | ||
| 152 | if (!page) | 153 | if (!page) |
| 153 | return NOPAGE_OOM; | 154 | return NOPAGE_OOM; |
| 154 | get_page(page); | 155 | get_page(page); |
diff --git a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h index b22fdbd4f830..6059c5a5b105 100644 --- a/drivers/char/drm/mga_drv.h +++ b/drivers/char/drm/mga_drv.h | |||
| @@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr) | |||
| 227 | #define MGA_EMIT_STATE( dev_priv, dirty ) \ | 227 | #define MGA_EMIT_STATE( dev_priv, dirty ) \ |
| 228 | do { \ | 228 | do { \ |
| 229 | if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ | 229 | if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ |
| 230 | if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) { \ | 230 | if ( dev_priv->chipset >= MGA_CARD_TYPE_G400 ) { \ |
| 231 | mga_g400_emit_state( dev_priv ); \ | 231 | mga_g400_emit_state( dev_priv ); \ |
| 232 | } else { \ | 232 | } else { \ |
| 233 | mga_g200_emit_state( dev_priv ); \ | 233 | mga_g200_emit_state( dev_priv ); \ |
diff --git a/drivers/char/drm/mga_state.c b/drivers/char/drm/mga_state.c index 05bbb4719376..6ac5e006226f 100644 --- a/drivers/char/drm/mga_state.c +++ b/drivers/char/drm/mga_state.c | |||
| @@ -53,7 +53,7 @@ static void mga_emit_clip_rect( drm_mga_private_t *dev_priv, | |||
| 53 | 53 | ||
| 54 | /* Force reset of DWGCTL on G400 (eliminates clip disable bit). | 54 | /* Force reset of DWGCTL on G400 (eliminates clip disable bit). |
| 55 | */ | 55 | */ |
| 56 | if (dev_priv->chipset == MGA_CARD_TYPE_G400) { | 56 | if (dev_priv->chipset >= MGA_CARD_TYPE_G400) { |
| 57 | DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, | 57 | DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, |
| 58 | MGA_LEN + MGA_EXEC, 0x80000000, | 58 | MGA_LEN + MGA_EXEC, 0x80000000, |
| 59 | MGA_DWGCTL, ctx->dwgctl, | 59 | MGA_DWGCTL, ctx->dwgctl, |
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 429820e48c69..7de19a84dc74 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
| @@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0) | |||
| 257 | printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); | 257 | printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); |
| 258 | printk("Target ID=0x%X\n", pg0->TargetID); | 258 | printk("Target ID=0x%X\n", pg0->TargetID); |
| 259 | printk("Bus=0x%X\n", pg0->Bus); | 259 | printk("Bus=0x%X\n", pg0->Bus); |
| 260 | printk("PhyNum=0x%X\n", pg0->PhyNum); | 260 | printk("Parent Phy Num=0x%X\n", pg0->PhyNum); |
| 261 | printk("AccessStatus=0x%X\n", le16_to_cpu(pg0->AccessStatus)); | 261 | printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus)); |
| 262 | printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); | 262 | printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); |
| 263 | printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); | 263 | printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); |
| 264 | printk("Physical Port=0x%X\n", pg0->PhysicalPort); | 264 | printk("Physical Port=0x%X\n", pg0->PhysicalPort); |
| @@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1) | |||
| 270 | printk("---- SAS EXPANDER PAGE 1 ------------\n"); | 270 | printk("---- SAS EXPANDER PAGE 1 ------------\n"); |
| 271 | 271 | ||
| 272 | printk("Physical Port=0x%X\n", pg1->PhysicalPort); | 272 | printk("Physical Port=0x%X\n", pg1->PhysicalPort); |
| 273 | printk("PHY Identifier=0x%X\n", pg1->Phy); | 273 | printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier); |
| 274 | printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); | 274 | printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); |
| 275 | printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); | 275 | printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); |
| 276 | printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); | 276 | printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); |
| @@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, | |||
| 604 | mptsas_print_expander_pg1(buffer); | 604 | mptsas_print_expander_pg1(buffer); |
| 605 | 605 | ||
| 606 | /* save config data */ | 606 | /* save config data */ |
| 607 | phy_info->phy_id = buffer->Phy; | 607 | phy_info->phy_id = buffer->PhyIdentifier; |
| 608 | phy_info->port_id = buffer->PhysicalPort; | 608 | phy_info->port_id = buffer->PhysicalPort; |
| 609 | phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; | 609 | phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; |
| 610 | phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; | 610 | phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; |
| @@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index) | |||
| 825 | mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, | 825 | mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, |
| 826 | (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << | 826 | (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << |
| 827 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); | 827 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); |
| 828 | port_info->phy_info[i].identify.phy_id = | ||
| 829 | port_info->phy_info[i].phy_id; | ||
| 828 | handle = port_info->phy_info[i].identify.handle; | 830 | handle = port_info->phy_info[i].identify.handle; |
| 829 | 831 | ||
| 830 | if (port_info->phy_info[i].attached.handle) { | 832 | if (port_info->phy_info[i].attached.handle) { |
| @@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) | |||
| 881 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << | 883 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << |
| 882 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), | 884 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), |
| 883 | port_info->phy_info[i].identify.handle); | 885 | port_info->phy_info[i].identify.handle); |
| 886 | port_info->phy_info[i].identify.phy_id = | ||
| 887 | port_info->phy_info[i].phy_id; | ||
| 884 | } | 888 | } |
| 885 | 889 | ||
| 886 | if (port_info->phy_info[i].attached.handle) { | 890 | if (port_info->phy_info[i].attached.handle) { |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 42cb7d70f9ac..d664330d900e 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
| @@ -25,6 +25,8 @@ int is_hugepage_mem_enough(size_t); | |||
| 25 | unsigned long hugetlb_total_pages(void); | 25 | unsigned long hugetlb_total_pages(void); |
| 26 | struct page *alloc_huge_page(void); | 26 | struct page *alloc_huge_page(void); |
| 27 | void free_huge_page(struct page *); | 27 | void free_huge_page(struct page *); |
| 28 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
| 29 | unsigned long address, int write_access); | ||
| 28 | 30 | ||
| 29 | extern unsigned long max_huge_pages; | 31 | extern unsigned long max_huge_pages; |
| 30 | extern const unsigned long hugetlb_zero, hugetlb_infinity; | 32 | extern const unsigned long hugetlb_zero, hugetlb_infinity; |
| @@ -99,6 +101,7 @@ static inline unsigned long hugetlb_total_pages(void) | |||
| 99 | do { } while (0) | 101 | do { } while (0) |
| 100 | #define alloc_huge_page() ({ NULL; }) | 102 | #define alloc_huge_page() ({ NULL; }) |
| 101 | #define free_huge_page(p) ({ (void)(p); BUG(); }) | 103 | #define free_huge_page(p) ({ (void)(p); BUG(); }) |
| 104 | #define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; }) | ||
| 102 | 105 | ||
| 103 | #ifndef HPAGE_MASK | 106 | #ifndef HPAGE_MASK |
| 104 | #define HPAGE_MASK 0 /* Keep the compiler happy */ | 107 | #define HPAGE_MASK 0 /* Keep the compiler happy */ |
| @@ -155,24 +158,11 @@ static inline void set_file_hugepages(struct file *file) | |||
| 155 | { | 158 | { |
| 156 | file->f_op = &hugetlbfs_file_operations; | 159 | file->f_op = &hugetlbfs_file_operations; |
| 157 | } | 160 | } |
| 158 | |||
| 159 | static inline int valid_hugetlb_file_off(struct vm_area_struct *vma, | ||
| 160 | unsigned long address) | ||
| 161 | { | ||
| 162 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | ||
| 163 | loff_t file_off = address - vma->vm_start; | ||
| 164 | |||
| 165 | file_off += (vma->vm_pgoff << PAGE_SHIFT); | ||
| 166 | |||
| 167 | return (file_off < inode->i_size); | ||
| 168 | } | ||
| 169 | |||
| 170 | #else /* !CONFIG_HUGETLBFS */ | 161 | #else /* !CONFIG_HUGETLBFS */ |
| 171 | 162 | ||
| 172 | #define is_file_hugepages(file) 0 | 163 | #define is_file_hugepages(file) 0 |
| 173 | #define set_file_hugepages(file) BUG() | 164 | #define set_file_hugepages(file) BUG() |
| 174 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) | 165 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) |
| 175 | #define valid_hugetlb_file_off(vma, address) 0 | ||
| 176 | 166 | ||
| 177 | #endif /* !CONFIG_HUGETLBFS */ | 167 | #endif /* !CONFIG_HUGETLBFS */ |
| 178 | 168 | ||
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index a1b30d45459e..61d380678030 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -394,6 +394,28 @@ out: | |||
| 394 | return ret; | 394 | return ret; |
| 395 | } | 395 | } |
| 396 | 396 | ||
| 397 | /* | ||
| 398 | * On ia64 at least, it is possible to receive a hugetlb fault from a | ||
| 399 | * stale zero entry left in the TLB from earlier hardware prefetching. | ||
| 400 | * Low-level arch code should already have flushed the stale entry as | ||
| 401 | * part of its fault handling, but we do need to accept this minor fault | ||
| 402 | * and return successfully. Whereas the "normal" case is that this is | ||
| 403 | * an access to a hugetlb page which has been truncated off since mmap. | ||
| 404 | */ | ||
| 405 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
| 406 | unsigned long address, int write_access) | ||
| 407 | { | ||
| 408 | int ret = VM_FAULT_SIGBUS; | ||
| 409 | pte_t *pte; | ||
| 410 | |||
| 411 | spin_lock(&mm->page_table_lock); | ||
| 412 | pte = huge_pte_offset(mm, address); | ||
| 413 | if (pte && !pte_none(*pte)) | ||
| 414 | ret = VM_FAULT_MINOR; | ||
| 415 | spin_unlock(&mm->page_table_lock); | ||
| 416 | return ret; | ||
| 417 | } | ||
| 418 | |||
| 397 | int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, | 419 | int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, |
| 398 | struct page **pages, struct vm_area_struct **vmas, | 420 | struct page **pages, struct vm_area_struct **vmas, |
| 399 | unsigned long *position, int *length, int i) | 421 | unsigned long *position, int *length, int i) |
diff --git a/mm/memory.c b/mm/memory.c index 8c88b973abc5..1db40e935e55 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
| @@ -2045,18 +2045,8 @@ int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma, | |||
| 2045 | 2045 | ||
| 2046 | inc_page_state(pgfault); | 2046 | inc_page_state(pgfault); |
| 2047 | 2047 | ||
| 2048 | if (unlikely(is_vm_hugetlb_page(vma))) { | 2048 | if (unlikely(is_vm_hugetlb_page(vma))) |
| 2049 | if (valid_hugetlb_file_off(vma, address)) | 2049 | return hugetlb_fault(mm, vma, address, write_access); |
| 2050 | /* We get here only if there was a stale(zero) TLB entry | ||
| 2051 | * (because of HW prefetching). | ||
| 2052 | * Low-level arch code (if needed) should have already | ||
| 2053 | * purged the stale entry as part of this fault handling. | ||
| 2054 | * Here we just return. | ||
| 2055 | */ | ||
| 2056 | return VM_FAULT_MINOR; | ||
| 2057 | else | ||
| 2058 | return VM_FAULT_SIGBUS; /* mapping truncation does this. */ | ||
| 2059 | } | ||
| 2060 | 2050 | ||
| 2061 | /* | 2051 | /* |
| 2062 | * We need the page table lock to synchronize with kswapd | 2052 | * We need the page table lock to synchronize with kswapd |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index ae088d1347af..6298cf58ff9e 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -463,6 +463,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req, | |||
| 463 | if (skb != NULL) { | 463 | if (skb != NULL) { |
| 464 | const struct inet_request_sock *ireq = inet_rsk(req); | 464 | const struct inet_request_sock *ireq = inet_rsk(req); |
| 465 | 465 | ||
| 466 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
| 466 | err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, | 467 | err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, |
| 467 | ireq->rmt_addr, | 468 | ireq->rmt_addr, |
| 468 | ireq->opt); | 469 | ireq->opt); |
| @@ -647,6 +648,7 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code) | |||
| 647 | if (skb != NULL) { | 648 | if (skb != NULL) { |
| 648 | const struct inet_sock *inet = inet_sk(sk); | 649 | const struct inet_sock *inet = inet_sk(sk); |
| 649 | 650 | ||
| 651 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
| 650 | err = ip_build_and_send_pkt(skb, sk, | 652 | err = ip_build_and_send_pkt(skb, sk, |
| 651 | inet->saddr, inet->daddr, NULL); | 653 | inet->saddr, inet->daddr, NULL); |
| 652 | if (err == NET_XMIT_CN) | 654 | if (err == NET_XMIT_CN) |
diff --git a/net/dccp/output.c b/net/dccp/output.c index 4786bdcddcc9..29250749f16f 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c | |||
| @@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
| 62 | 62 | ||
| 63 | skb->h.raw = skb_push(skb, dccp_header_size); | 63 | skb->h.raw = skb_push(skb, dccp_header_size); |
| 64 | dh = dccp_hdr(skb); | 64 | dh = dccp_hdr(skb); |
| 65 | /* | 65 | |
| 66 | * Data packets are not cloned as they are never retransmitted | 66 | if (!skb->sk) |
| 67 | */ | ||
| 68 | if (skb_cloned(skb)) | ||
| 69 | skb_set_owner_w(skb, sk); | 67 | skb_set_owner_w(skb, sk); |
| 70 | 68 | ||
| 71 | /* Build DCCP header and checksum it. */ | 69 | /* Build DCCP header and checksum it. */ |
| @@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
| 102 | 100 | ||
| 103 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); | 101 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); |
| 104 | 102 | ||
| 103 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
| 105 | err = ip_queue_xmit(skb, 0); | 104 | err = ip_queue_xmit(skb, 0); |
| 106 | if (err <= 0) | 105 | if (err <= 0) |
| 107 | return err; | 106 | return err; |
| @@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo) | |||
| 243 | 242 | ||
| 244 | err = dccp_transmit_skb(sk, skb); | 243 | err = dccp_transmit_skb(sk, skb); |
| 245 | ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len); | 244 | ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len); |
| 246 | } | 245 | } else |
| 246 | kfree_skb(skb); | ||
| 247 | 247 | ||
| 248 | return err; | 248 | return err; |
| 249 | } | 249 | } |
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index a1cfd0e9e3bc..a021c3422f67 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
| @@ -402,8 +402,6 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
| 402 | * This bug was _quickly_ found & fixed by just looking at an OSTRA | 402 | * This bug was _quickly_ found & fixed by just looking at an OSTRA |
| 403 | * generated callgraph 8) -acme | 403 | * generated callgraph 8) -acme |
| 404 | */ | 404 | */ |
| 405 | if (rc != 0) | ||
| 406 | goto out_discard; | ||
| 407 | out_release: | 405 | out_release: |
| 408 | release_sock(sk); | 406 | release_sock(sk); |
| 409 | return rc ? : len; | 407 | return rc ? : len; |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 7114031fdc70..b907456a79f4 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -435,17 +435,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss | |||
| 435 | int nsize, old_factor; | 435 | int nsize, old_factor; |
| 436 | u16 flags; | 436 | u16 flags; |
| 437 | 437 | ||
| 438 | if (unlikely(len >= skb->len)) { | 438 | BUG_ON(len > skb->len); |
| 439 | if (net_ratelimit()) { | ||
| 440 | printk(KERN_DEBUG "TCP: seg_size=%u, mss=%u, seq=%u, " | ||
| 441 | "end_seq=%u, skb->len=%u.\n", len, mss_now, | ||
| 442 | TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq, | ||
| 443 | skb->len); | ||
| 444 | WARN_ON(1); | ||
| 445 | } | ||
| 446 | return 0; | ||
| 447 | } | ||
| 448 | |||
| 449 | nsize = skb_headlen(skb) - len; | 439 | nsize = skb_headlen(skb) - len; |
| 450 | if (nsize < 0) | 440 | if (nsize < 0) |
| 451 | nsize = 0; | 441 | nsize = 0; |
