/* iscsi_sw_tcp_recv - TCP receive in sendfile fashion @rd_desc: read descriptor @skb: socket buffer @offset: offset in skb @len: skb->len - offset  */
static int iscsi_sw_tcp_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len)
/* iscsi_sw_tcp_recv - TCP receive in sendfile fashion @rd_desc: read descriptor @skb: socket buffer @offset: offset in skb @len: skb->len - offset  */
static int iscsi_sw_tcp_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len)
{
	struct iscsi_conn *conn = rd_desc->arg.data;
	unsigned int consumed, total_consumed = 0;
	int status;
	ISCSI_SW_TCP_DBG(conn, "in %d bytes\n", skb->len - offset);
	do {
		status = 0;
		consumed = iscsi_tcp_recv_skb(conn, skb, offset, 0, &status);
		offset += consumed;
		total_consumed += consumed;
	} while (consumed != 0 && status != ISCSI_TCP_SKB_DONE);
	ISCSI_SW_TCP_DBG(conn, "read %d bytes status %d\n",
			 skb->len - offset, status);
	return total_consumed;
}