IB/iser: Use atomic allocations
authorOr Gerlitz <ogerlitz@voltaire.com>
Mon, 8 Feb 2010 13:20:43 +0000 (13:20 +0000)
committerRoland Dreier <rolandd@cisco.com>
Wed, 24 Feb 2010 17:41:12 +0000 (09:41 -0800)
Two minor flows in iSER's data path still use allocations; move them
to be atomic as a preperation step towards moving to use libiscsi
passthrough mode.

Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/iser/iser_initiator.c
drivers/infiniband/ulp/iser/iser_memory.c

index 3be3a13..e27eb87 100644 (file)
@@ -373,7 +373,7 @@ int iser_send_data_out(struct iscsi_conn *conn,
        iser_dbg("%s itt %d dseg_len %d offset %d\n",
                 __func__,(int)itt,(int)data_seg_len,(int)buf_offset);
 
-       tx_desc = kmem_cache_zalloc(ig.desc_cache, GFP_NOIO);
+       tx_desc = kmem_cache_zalloc(ig.desc_cache, GFP_ATOMIC);
        if (tx_desc == NULL) {
                iser_err("Failed to alloc desc for post dataout\n");
                return -ENOMEM;
index 5e32e8f..fb88d68 100644 (file)
@@ -53,10 +53,10 @@ static int iser_start_rdma_unaligned_sg(struct iscsi_iser_task *iser_task,
        unsigned long  cmd_data_len = data->data_len;
 
        if (cmd_data_len > ISER_KMALLOC_THRESHOLD)
-               mem = (void *)__get_free_pages(GFP_NOIO,
+               mem = (void *)__get_free_pages(GFP_ATOMIC,
                      ilog2(roundup_pow_of_two(cmd_data_len)) - PAGE_SHIFT);
        else
-               mem = kmalloc(cmd_data_len, GFP_NOIO);
+               mem = kmalloc(cmd_data_len, GFP_ATOMIC);
 
        if (mem == NULL) {
                iser_err("Failed to allocate mem size %d %d for copying sglist\n",