|
@@ -14,6 +14,14 @@
|
|
#include "rcom.h"
|
|
#include "rcom.h"
|
|
#include "util.h"
|
|
#include "util.h"
|
|
|
|
|
|
|
|
+#define DLM_ERRNO_EDEADLK 35
|
|
|
|
+#define DLM_ERRNO_EBADR 53
|
|
|
|
+#define DLM_ERRNO_EBADSLT 57
|
|
|
|
+#define DLM_ERRNO_EPROTO 71
|
|
|
|
+#define DLM_ERRNO_EOPNOTSUPP 95
|
|
|
|
+#define DLM_ERRNO_ETIMEDOUT 110
|
|
|
|
+#define DLM_ERRNO_EINPROGRESS 115
|
|
|
|
+
|
|
static void header_out(struct dlm_header *hd)
|
|
static void header_out(struct dlm_header *hd)
|
|
{
|
|
{
|
|
hd->h_version = cpu_to_le32(hd->h_version);
|
|
hd->h_version = cpu_to_le32(hd->h_version);
|
|
@@ -30,6 +38,51 @@ static void header_in(struct dlm_header *hd)
|
|
hd->h_length = le16_to_cpu(hd->h_length);
|
|
hd->h_length = le16_to_cpu(hd->h_length);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* higher errno values are inconsistent across architectures, so select
|
|
|
|
+ one set of values for on the wire */
|
|
|
|
+
|
|
|
|
+static int to_dlm_errno(int err)
|
|
|
|
+{
|
|
|
|
+ switch (err) {
|
|
|
|
+ case -EDEADLK:
|
|
|
|
+ return -DLM_ERRNO_EDEADLK;
|
|
|
|
+ case -EBADR:
|
|
|
|
+ return -DLM_ERRNO_EBADR;
|
|
|
|
+ case -EBADSLT:
|
|
|
|
+ return -DLM_ERRNO_EBADSLT;
|
|
|
|
+ case -EPROTO:
|
|
|
|
+ return -DLM_ERRNO_EPROTO;
|
|
|
|
+ case -EOPNOTSUPP:
|
|
|
|
+ return -DLM_ERRNO_EOPNOTSUPP;
|
|
|
|
+ case -ETIMEDOUT:
|
|
|
|
+ return -DLM_ERRNO_ETIMEDOUT;
|
|
|
|
+ case -EINPROGRESS:
|
|
|
|
+ return -DLM_ERRNO_EINPROGRESS;
|
|
|
|
+ }
|
|
|
|
+ return err;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int from_dlm_errno(int err)
|
|
|
|
+{
|
|
|
|
+ switch (err) {
|
|
|
|
+ case -DLM_ERRNO_EDEADLK:
|
|
|
|
+ return -EDEADLK;
|
|
|
|
+ case -DLM_ERRNO_EBADR:
|
|
|
|
+ return -EBADR;
|
|
|
|
+ case -DLM_ERRNO_EBADSLT:
|
|
|
|
+ return -EBADSLT;
|
|
|
|
+ case -DLM_ERRNO_EPROTO:
|
|
|
|
+ return -EPROTO;
|
|
|
|
+ case -DLM_ERRNO_EOPNOTSUPP:
|
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
+ case -DLM_ERRNO_ETIMEDOUT:
|
|
|
|
+ return -ETIMEDOUT;
|
|
|
|
+ case -DLM_ERRNO_EINPROGRESS:
|
|
|
|
+ return -EINPROGRESS;
|
|
|
|
+ }
|
|
|
|
+ return err;
|
|
|
|
+}
|
|
|
|
+
|
|
void dlm_message_out(struct dlm_message *ms)
|
|
void dlm_message_out(struct dlm_message *ms)
|
|
{
|
|
{
|
|
struct dlm_header *hd = (struct dlm_header *) ms;
|
|
struct dlm_header *hd = (struct dlm_header *) ms;
|
|
@@ -53,7 +106,7 @@ void dlm_message_out(struct dlm_message *ms)
|
|
ms->m_rqmode = cpu_to_le32(ms->m_rqmode);
|
|
ms->m_rqmode = cpu_to_le32(ms->m_rqmode);
|
|
ms->m_bastmode = cpu_to_le32(ms->m_bastmode);
|
|
ms->m_bastmode = cpu_to_le32(ms->m_bastmode);
|
|
ms->m_asts = cpu_to_le32(ms->m_asts);
|
|
ms->m_asts = cpu_to_le32(ms->m_asts);
|
|
- ms->m_result = cpu_to_le32(ms->m_result);
|
|
|
|
|
|
+ ms->m_result = cpu_to_le32(to_dlm_errno(ms->m_result));
|
|
}
|
|
}
|
|
|
|
|
|
void dlm_message_in(struct dlm_message *ms)
|
|
void dlm_message_in(struct dlm_message *ms)
|
|
@@ -79,7 +132,7 @@ void dlm_message_in(struct dlm_message *ms)
|
|
ms->m_rqmode = le32_to_cpu(ms->m_rqmode);
|
|
ms->m_rqmode = le32_to_cpu(ms->m_rqmode);
|
|
ms->m_bastmode = le32_to_cpu(ms->m_bastmode);
|
|
ms->m_bastmode = le32_to_cpu(ms->m_bastmode);
|
|
ms->m_asts = le32_to_cpu(ms->m_asts);
|
|
ms->m_asts = le32_to_cpu(ms->m_asts);
|
|
- ms->m_result = le32_to_cpu(ms->m_result);
|
|
|
|
|
|
+ ms->m_result = from_dlm_errno(le32_to_cpu(ms->m_result));
|
|
}
|
|
}
|
|
|
|
|
|
static void rcom_lock_out(struct rcom_lock *rl)
|
|
static void rcom_lock_out(struct rcom_lock *rl)
|