libibumad: fix return value for RMPP handling
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 3 Mar 2009 00:50:59 +0000 (00:50 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 3 Mar 2009 00:50:59 +0000 (00:50 +0000)
Return ENOSPC if the user provided buffer is smaller than the MAD to retrieve from the kernel.  This allows processing of MADs > 256 bytes.

Problem was found by running the saquery ib-diag with RMPP used to return fabric topology information.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1999 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

ulp/libibumad/include/infiniband/umad.h
ulp/libibumad/src/umad.cpp

index d4b1836..032a349 100644 (file)
@@ -53,6 +53,7 @@ typedef unsigned __int64      uint64_t;
 #define EWOULDBLOCK    11\r
 #define ENOMEM         12\r
 #define EINVAL         22\r
+#define ENOSPC         28\r
 #define ETIMEDOUT      110\r
 \r
 #define UMAD_MAX_DEVICES       20\r
index 45efdcb..1471cfe 100644 (file)
@@ -596,10 +596,14 @@ int umad_recv(int portid, void *umad, int *length, int timeout_ms)
 \r
        if (mad->Length <= (UINT32) *length) {\r
                port->pending = FALSE;\r
+               hr = (HRESULT) mad->Id;\r
+       } else {\r
+               errno = ENOSPC;\r
+               hr = -ENOSPC;\r
        }\r
 \r
        *length = mad->Length;\r
-       return (int) mad->Id;\r
+       return hr;\r
 }\r
 \r
 __declspec(dllexport)\r