[ofa-general] [PATCH] IB/core: return immediate error when registering zero length buffer

Eli Cohen eli at mellanox.co.il
Sun Jul 27 05:13:59 PDT 2008


Registering a zero length buffer is meaningless so check this at
ib_umem_get() and return immediately with error if that is the case.
If we don't do this, we get an inconsistent behaviour. For example,
if we register a buffer whose start address is not page aligned, we
will end up registering one page, while if the address is page
aligned, we will have zero pages -- the reason for this comes from
the following statement:

npages = PAGE_ALIGN(size + umem->offset) >> PAGE_SHIFT;

Problem found by: Ronni Zimmermann <ronniz at mellanox.co.il>
Signed-off-by: Eli Cohen <eli at mellanox.co.il>
---
 drivers/infiniband/core/umem.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index 6f7c096..2541ef8 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -89,6 +89,9 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
 	int i;
 	DEFINE_DMA_ATTRS(attrs);
 
+	if (!size)
+		return ERR_PTR(-ENOMEM);
+
 	if (dmasync)
 		dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
 
-- 
1.5.6




More information about the general mailing list