From 07692320e1cc793b936b2de1dde47dc2a98181f2 Mon Sep 17 00:00:00 2001 From: Haiyang Zhang Date: Thu, 1 Sep 2011 12:19:47 -0700 Subject: [PATCH] --- yaml --- r: 268137 b: refs/heads/master c: 669c1fc61679f7e85f467c852bfe7b6c9dd75d25 h: refs/heads/master i: 268135: 1b9b9bf9d7a0a0d66db38c4614a4a86ef81c1b3a v: v3 --- [refs] | 2 +- trunk/drivers/staging/hv/rndis_filter.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index acc78f3d668a..067a6b26b3ee 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bf769375c9175b29fe72b10394888e0090c6b133 +refs/heads/master: 669c1fc61679f7e85f467c852bfe7b6c9dd75d25 diff --git a/trunk/drivers/staging/hv/rndis_filter.c b/trunk/drivers/staging/hv/rndis_filter.c index 20e673d9e4b8..b32534507d4e 100644 --- a/trunk/drivers/staging/hv/rndis_filter.c +++ b/trunk/drivers/staging/hv/rndis_filter.c @@ -323,6 +323,7 @@ static void rndis_filter_receive_data(struct rndis_device *dev, { struct rndis_packet *rndis_pkt; u32 data_offset; + int i; rndis_pkt = &msg->msg.pkt; @@ -338,6 +339,15 @@ static void rndis_filter_receive_data(struct rndis_device *dev, pkt->page_buf[0].offset += data_offset; pkt->page_buf[0].len -= data_offset; + /* Drop the 0th page, if rndis data go beyond page boundary */ + if (pkt->page_buf[0].offset >= PAGE_SIZE) { + pkt->page_buf[1].offset = pkt->page_buf[0].offset - PAGE_SIZE; + pkt->page_buf[1].len -= pkt->page_buf[1].offset; + pkt->page_buf_cnt--; + for (i = 0; i < pkt->page_buf_cnt; i++) + pkt->page_buf[i] = pkt->page_buf[i+1]; + } + pkt->is_data_pkt = true; netvsc_recv_callback(dev->net_dev->dev, pkt);