]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/dlm/util.c
arm: imx6: defconfig: update tx6 defconfigs
[karo-tx-linux.git] / fs / dlm / util.c
index 963889cf674063fb5591cc0ab7b933afb06b24b5..e36520af7cc0e75f8eab5ca649cf8b01a64ad674 100644 (file)
@@ -1,7 +1,7 @@
 /******************************************************************************
 *******************************************************************************
 **
-**  Copyright (C) 2005 Red Hat, Inc.  All rights reserved.
+**  Copyright (C) 2005-2008 Red Hat, Inc.  All rights reserved.
 **
 **  This copyrighted material is made available to anyone wishing to use,
 **  modify, copy, or redistribute it subject to the terms and conditions
 #include "rcom.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)
 {
        hd->h_version           = cpu_to_le32(hd->h_version);
@@ -30,11 +38,54 @@ static void header_in(struct dlm_header *hd)
        hd->h_length            = le16_to_cpu(hd->h_length);
 }
 
-void dlm_message_out(struct dlm_message *ms)
+/* higher errno values are inconsistent across architectures, so select
+   one set of values for on the wire */
+
+static int to_dlm_errno(int err)
 {
-       struct dlm_header *hd = (struct dlm_header *) ms;
+       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;
+}
 
-       header_out(hd);
+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)
+{
+       header_out(&ms->m_header);
 
        ms->m_type              = cpu_to_le32(ms->m_type);
        ms->m_nodeid            = cpu_to_le32(ms->m_nodeid);
@@ -53,14 +104,12 @@ void dlm_message_out(struct dlm_message *ms)
        ms->m_rqmode            = cpu_to_le32(ms->m_rqmode);
        ms->m_bastmode          = cpu_to_le32(ms->m_bastmode);
        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)
 {
-       struct dlm_header *hd = (struct dlm_header *) ms;
-
-       header_in(hd);
+       header_in(&ms->m_header);
 
        ms->m_type              = le32_to_cpu(ms->m_type);
        ms->m_nodeid            = le32_to_cpu(ms->m_nodeid);
@@ -79,87 +128,27 @@ void dlm_message_in(struct dlm_message *ms)
        ms->m_rqmode            = le32_to_cpu(ms->m_rqmode);
        ms->m_bastmode          = le32_to_cpu(ms->m_bastmode);
        ms->m_asts              = le32_to_cpu(ms->m_asts);
-       ms->m_result            = le32_to_cpu(ms->m_result);
-}
-
-static void rcom_lock_out(struct rcom_lock *rl)
-{
-       rl->rl_ownpid           = cpu_to_le32(rl->rl_ownpid);
-       rl->rl_lkid             = cpu_to_le32(rl->rl_lkid);
-       rl->rl_remid            = cpu_to_le32(rl->rl_remid);
-       rl->rl_parent_lkid      = cpu_to_le32(rl->rl_parent_lkid);
-       rl->rl_parent_remid     = cpu_to_le32(rl->rl_parent_remid);
-       rl->rl_exflags          = cpu_to_le32(rl->rl_exflags);
-       rl->rl_flags            = cpu_to_le32(rl->rl_flags);
-       rl->rl_lvbseq           = cpu_to_le32(rl->rl_lvbseq);
-       rl->rl_result           = cpu_to_le32(rl->rl_result);
-       rl->rl_wait_type        = cpu_to_le16(rl->rl_wait_type);
-       rl->rl_namelen          = cpu_to_le16(rl->rl_namelen);
-}
-
-static void rcom_lock_in(struct rcom_lock *rl)
-{
-       rl->rl_ownpid           = le32_to_cpu(rl->rl_ownpid);
-       rl->rl_lkid             = le32_to_cpu(rl->rl_lkid);
-       rl->rl_remid            = le32_to_cpu(rl->rl_remid);
-       rl->rl_parent_lkid      = le32_to_cpu(rl->rl_parent_lkid);
-       rl->rl_parent_remid     = le32_to_cpu(rl->rl_parent_remid);
-       rl->rl_exflags          = le32_to_cpu(rl->rl_exflags);
-       rl->rl_flags            = le32_to_cpu(rl->rl_flags);
-       rl->rl_lvbseq           = le32_to_cpu(rl->rl_lvbseq);
-       rl->rl_result           = le32_to_cpu(rl->rl_result);
-       rl->rl_wait_type        = le16_to_cpu(rl->rl_wait_type);
-       rl->rl_namelen          = le16_to_cpu(rl->rl_namelen);
-}
-
-static void rcom_config_out(struct rcom_config *rf)
-{
-       rf->rf_lvblen           = cpu_to_le32(rf->rf_lvblen);
-       rf->rf_lsflags          = cpu_to_le32(rf->rf_lsflags);
-}
-
-static void rcom_config_in(struct rcom_config *rf)
-{
-       rf->rf_lvblen           = le32_to_cpu(rf->rf_lvblen);
-       rf->rf_lsflags          = le32_to_cpu(rf->rf_lsflags);
+       ms->m_result            = from_dlm_errno(le32_to_cpu(ms->m_result));
 }
 
 void dlm_rcom_out(struct dlm_rcom *rc)
 {
-       struct dlm_header *hd = (struct dlm_header *) rc;
-       int type = rc->rc_type;
-
-       header_out(hd);
+       header_out(&rc->rc_header);
 
        rc->rc_type             = cpu_to_le32(rc->rc_type);
        rc->rc_result           = cpu_to_le32(rc->rc_result);
        rc->rc_id               = cpu_to_le64(rc->rc_id);
        rc->rc_seq              = cpu_to_le64(rc->rc_seq);
        rc->rc_seq_reply        = cpu_to_le64(rc->rc_seq_reply);
-
-       if (type == DLM_RCOM_LOCK)
-               rcom_lock_out((struct rcom_lock *) rc->rc_buf);
-
-       else if (type == DLM_RCOM_STATUS_REPLY)
-               rcom_config_out((struct rcom_config *) rc->rc_buf);
 }
 
 void dlm_rcom_in(struct dlm_rcom *rc)
 {
-       struct dlm_header *hd = (struct dlm_header *) rc;
-
-       header_in(hd);
+       header_in(&rc->rc_header);
 
        rc->rc_type             = le32_to_cpu(rc->rc_type);
        rc->rc_result           = le32_to_cpu(rc->rc_result);
        rc->rc_id               = le64_to_cpu(rc->rc_id);
        rc->rc_seq              = le64_to_cpu(rc->rc_seq);
        rc->rc_seq_reply        = le64_to_cpu(rc->rc_seq_reply);
-
-       if (rc->rc_type == DLM_RCOM_LOCK)
-               rcom_lock_in((struct rcom_lock *) rc->rc_buf);
-
-       else if (rc->rc_type == DLM_RCOM_STATUS_REPLY)
-               rcom_config_in((struct rcom_config *) rc->rc_buf);
 }
-