On Thu, 2013-04-04 at 12:45 +0300, Or Gerlitz wrote: > On 04/04/2013 10:24, Nicholas A. Bellinger wrote: > > > +#define ISER_RECV_DATA_SEG_LEN 8192 > > +#define ISER_RX_PAYLOAD_SIZE (ISER_HEADERS_LEN + ISER_RECV_DATA_SEG_LEN) > > [...] > > +#define ISER_RX_PAD_SIZE (16384 - (ISER_RX_PAYLOAD_SIZE + \ > > + sizeof(u64) + sizeof(struct ib_sge))) > > We're eating here too much ram for the pad, you need 8K + something, so > the pad can count down > from 12K and not 16K which means each such element will consume three > pages and not four. > Hmm, IIRC this larger pad was originally required after bumping the ISER_RECV_DATA_SEG_LEN value for handling incoming ImmediateData and Unsolicited Data-OUT.. Will try using 12k here and see what happens.. Also, ISER_RECV_DATA_SEG_LEN will need to be enforced as the largest MaxRecvDataSegmentLength negotiated during iser login to prevent the initiator from exceeding the hardcoded value.. > > +struct iser_rx_desc { > > + struct iser_hdr iser_header; > > + struct iscsi_hdr iscsi_header; > > + char data[ISER_RECV_DATA_SEG_LEN]; > > + u64 dma_addr; > > + struct ib_sge rx_sg; > > + char pad[ISER_RX_PAD_SIZE]; > > +} __packed; > > + > > +struct isert_rx_desc { > > + struct isert_conn *desc_conn; > > + struct work_struct desc_work; > > + struct iser_rx_desc desc; > > +} __packed; > > You have way enough room in the pad field of struct iser_rx_desc to > place there the two fields > added by struct isert_rx_desc (and you only use struct iser_rx_desc from > within isert_rx_desc) --> any reason > not to unify them? > This is left-over cruft from the per isert_rx_desc dispatch into process context.. Dropping this now. --nab -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html