diff --git a/lnet/ChangeLog b/lnet/ChangeLog
index e5bfa57eb3901301c69091b5f5d6dbcb5b9f0ea3..dd608fd15b7ba58dda0ab275c2c92ad0e1f92f8f 100644
--- a/lnet/ChangeLog
+++ b/lnet/ChangeLog
@@ -17,6 +17,17 @@ Bugzilla   :
 Description: 
 Details    : 
 
+Severity   : major
+Bugzilla   : 15983
+Description: workaround for OOM from o2iblnd
+Details    : OFED needs allocate big chunk of memory for QP while creating
+             connection for o2iblnd, OOM can happen if no such a contiguous
+             memory chunk.
+             QP size is decided by concurrent_sends and max_fragments of
+             o2iblnd, now we permit user to specify smaller value for
+             concurrent_sends of o2iblnd(i.e: concurrent_sends=7), which
+             will decrease memory block size required by creating QP.
+
 Severity   : major
 Bugzilla   : 15093
 Description: Support Zerocopy receive of Chelsio device
diff --git a/lnet/klnds/o2iblnd/o2iblnd_modparams.c b/lnet/klnds/o2iblnd/o2iblnd_modparams.c
index 10edb5d43244f9eff6582a792d7a52461d7cc087..91c7520339bd9e0b357c4b0725791d2ffec555f6 100644
--- a/lnet/klnds/o2iblnd/o2iblnd_modparams.c
+++ b/lnet/klnds/o2iblnd/o2iblnd_modparams.c
@@ -316,8 +316,14 @@ kiblnd_tunables_init (void)
 
         if (*kiblnd_tunables.kib_concurrent_sends > IBLND_RX_MSGS)
                 *kiblnd_tunables.kib_concurrent_sends = IBLND_RX_MSGS;
-        if (*kiblnd_tunables.kib_concurrent_sends < IBLND_MSG_QUEUE_SIZE)
-                *kiblnd_tunables.kib_concurrent_sends = IBLND_MSG_QUEUE_SIZE;
+        if (*kiblnd_tunables.kib_concurrent_sends < IBLND_MSG_QUEUE_SIZE / 2)
+                *kiblnd_tunables.kib_concurrent_sends = IBLND_MSG_QUEUE_SIZE / 2;
+
+        if (*kiblnd_tunables.kib_concurrent_sends < IBLND_MSG_QUEUE_SIZE) {
+                CWARN("Concurrent sends %d is lower than message queue size: %d, "
+                      "performance may drop slightly.\n",
+                      *kiblnd_tunables.kib_concurrent_sends, IBLND_MSG_QUEUE_SIZE);
+        }
 
         return 0;
 }