--- /dev/null
+diff -Naur base.linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.c linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.c
+--- base.linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.c 2010-09-09 16:57:15.000000000 -0400
++++ linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.c 2010-09-09 17:02:17.000000000 -0400
+@@ -586,18 +586,25 @@
+ iser_conn_terminate(ib_conn);
+ }
+
++static int iscsi_iser_slave_configure(struct scsi_device *sdev)
++{
++ blk_queue_dma_alignment(sdev->request_queue, 0);
++ return 0;
++}
++
+ static struct scsi_host_template iscsi_iser_sht = {
+ .module = THIS_MODULE,
+ .name = "iSCSI Initiator over iSER, v." DRV_VER,
+ .queuecommand = iscsi2_queuecommand,
+ .change_queue_depth = iscsi2_change_queue_depth,
+ .sg_tablesize = ISCSI_ISER_SG_TABLESIZE,
+- .max_sectors = 1024,
++ .max_sectors = 0xffff,
+ .cmd_per_lun = ISER_DEF_CMD_PER_LUN,
+ .eh_abort_handler = iscsi2_eh_abort,
+ .eh_device_reset_handler= iscsi2_eh_device_reset,
+ .eh_host_reset_handler= iscsi2_eh_target_reset,
+ .use_clustering = DISABLE_CLUSTERING,
++ .slave_configure = iscsi_iser_slave_configure,
+ .proc_name = "iscsi_iser",
+ .this_id = -1,
+ };
+diff -Naur base.linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.h linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.h
+--- base.linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.h 2010-09-09 16:57:15.000000000 -0400
++++ linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iscsi_iser.h 2010-09-09 17:03:17.000000000 -0400
+@@ -92,7 +92,8 @@
+ #define MASK_4K (~(SIZE_4K-1))
+
+ /* support upto 512KB in one RDMA */
+-#define ISCSI_ISER_SG_TABLESIZE (0x80000 >> SHIFT_4K)
++/* FMR space for 1 MB of 4k-page transfers, plus 1 if not page aligned */
++#define ISCSI_ISER_SG_TABLESIZE (((1<<20) >> SHIFT_4K) + 1)
+ #define ISER_DEF_CMD_PER_LUN 128
+
+ /* QP settings */
+diff -Naur base.linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iser_verbs.c linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iser_verbs.c
+--- base.linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iser_verbs.c 2010-09-09 16:57:15.000000000 -0400
++++ linux-2.6.18.x86_64/drivers/infiniband/ulp/iser/iser_verbs.c 2010-09-09 17:04:44.000000000 -0400
+@@ -137,7 +137,7 @@
+ device = ib_conn->device;
+
+ ib_conn->page_vec = kmalloc(sizeof(struct iser_page_vec) +
+- (sizeof(u64) * (ISCSI_ISER_SG_TABLESIZE +1)),
++ sizeof(u64) * ISCSI_ISER_SG_TABLESIZE,
+ GFP_KERNEL);
+ if (!ib_conn->page_vec) {
+ ret = -ENOMEM;
+@@ -146,9 +146,7 @@
+ ib_conn->page_vec->pages = (u64 *) (ib_conn->page_vec + 1);
+
+ params.page_shift = SHIFT_4K;
+- /* when the first/last SG element are not start/end *
+- * page aligned, the map whould be of N+1 pages */
+- params.max_pages_per_fmr = ISCSI_ISER_SG_TABLESIZE + 1;
++ params.max_pages_per_fmr = ISCSI_ISER_SG_TABLESIZE;
+ /* make the pool size twice the max number of SCSI commands *
+ * the ML is expected to queue, watermark for unmap at 50% */
+ params.pool_size = ISCSI_DEF_XMIT_CMDS_MAX * 2;
+diff -Naur base.linux-2.6.18.x86_64/include/scsi/libiscsi2.h linux-2.6.18.x86_64/include/scsi/libiscsi2.h
+--- base.linux-2.6.18.x86_64/include/scsi/libiscsi2.h 2010-09-09 16:57:35.000000000 -0400
++++ linux-2.6.18.x86_64/include/scsi/libiscsi2.h 2010-09-09 17:05:34.000000000 -0400
+@@ -43,7 +43,7 @@
+ struct iscsi_nopin;
+ struct device;
+
+-#define ISCSI_DEF_XMIT_CMDS_MAX 128 /* must be power of 2 */
++#define ISCSI_DEF_XMIT_CMDS_MAX 256 /* must be power of 2 */
+ #define ISCSI_MGMT_CMDS_MAX 15
+
+ #define ISCSI_DEF_CMD_PER_LUN 32