diff options
Diffstat (limited to 'net/irda/irttp.c')
| -rw-r--r-- | net/irda/irttp.c | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/net/irda/irttp.c b/net/irda/irttp.c index 285761e77d9..f6054f9ccbe 100644 --- a/net/irda/irttp.c +++ b/net/irda/irttp.c @@ -550,22 +550,30 @@ EXPORT_SYMBOL(irttp_close_tsap);   */  int irttp_udata_request(struct tsap_cb *self, struct sk_buff *skb)  { +	int ret; +  	IRDA_ASSERT(self != NULL, return -1;);  	IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);  	IRDA_ASSERT(skb != NULL, return -1;);  	IRDA_DEBUG(4, "%s()\n", __func__); +	/* Take shortcut on zero byte packets */ +	if (skb->len == 0) { +		ret = 0; +		goto err; +	} +  	/* Check that nothing bad happens */ -	if ((skb->len == 0) || (!self->connected)) { -		IRDA_DEBUG(1, "%s(), No data, or not connected\n", -			   __func__); +	if (!self->connected) { +		IRDA_WARNING("%s(), Not connected\n", __func__); +		ret = -ENOTCONN;  		goto err;  	}  	if (skb->len > self->max_seg_size) { -		IRDA_DEBUG(1, "%s(), UData is too large for IrLAP!\n", -			   __func__); +		IRDA_ERROR("%s(), UData is too large for IrLAP!\n", __func__); +		ret = -EMSGSIZE;  		goto err;  	} @@ -576,7 +584,7 @@ int irttp_udata_request(struct tsap_cb *self, struct sk_buff *skb)  err:  	dev_kfree_skb(skb); -	return -1; +	return ret;  }  EXPORT_SYMBOL(irttp_udata_request); @@ -599,9 +607,15 @@ int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb)  	IRDA_DEBUG(2, "%s() : queue len = %d\n", __func__,  		   skb_queue_len(&self->tx_queue)); +	/* Take shortcut on zero byte packets */ +	if (skb->len == 0) { +		ret = 0; +		goto err; +	} +  	/* Check that nothing bad happens */ -	if ((skb->len == 0) || (!self->connected)) { -		IRDA_WARNING("%s: No data, or not connected\n", __func__); +	if (!self->connected) { +		IRDA_WARNING("%s: Not connected\n", __func__);  		ret = -ENOTCONN;  		goto err;  	}  |