fs: dlm: add union in dlm header for lockspace id
authorAlexander Aring <aahringo@redhat.com>
Fri, 21 May 2021 19:08:45 +0000 (15:08 -0400)
committerDavid Teigland <teigland@redhat.com>
Tue, 25 May 2021 14:22:20 +0000 (09:22 -0500)
This patch adds union inside the lockspace id to handle it also for
another use case for a different dlm command.

Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/dlm_internal.h
fs/dlm/lock.c
fs/dlm/rcom.c
fs/dlm/util.c

index e8dc5f4..8f59809 100644 (file)
@@ -380,7 +380,10 @@ static inline int rsb_flag(struct dlm_rsb *r, enum rsb_flags flag)
 
 struct dlm_header {
        uint32_t                h_version;
-       uint32_t                h_lockspace;
+       union {
+               /* for DLM_MSG and DLM_RCOM */
+               uint32_t        h_lockspace;
+       } u;
        uint32_t                h_nodeid;       /* nodeid of sender */
        uint16_t                h_length;
        uint8_t                 h_cmd;          /* DLM_MSG, DLM_RCOM */
index b625ce9..c502c06 100644 (file)
@@ -3544,7 +3544,7 @@ static int _create_message(struct dlm_ls *ls, int mb_len,
        ms = (struct dlm_message *) mb;
 
        ms->m_header.h_version = (DLM_HEADER_MAJOR | DLM_HEADER_MINOR);
-       ms->m_header.h_lockspace = ls->ls_global_id;
+       ms->m_header.u.h_lockspace = ls->ls_global_id;
        ms->m_header.h_nodeid = dlm_our_nodeid();
        ms->m_header.h_length = mb_len;
        ms->m_header.h_cmd = DLM_MSG;
@@ -5038,16 +5038,16 @@ void dlm_receive_buffer(union dlm_packet *p, int nodeid)
 
        if (hd->h_nodeid != nodeid) {
                log_print("invalid h_nodeid %d from %d lockspace %x",
-                         hd->h_nodeid, nodeid, hd->h_lockspace);
+                         hd->h_nodeid, nodeid, hd->u.h_lockspace);
                return;
        }
 
-       ls = dlm_find_lockspace_global(hd->h_lockspace);
+       ls = dlm_find_lockspace_global(hd->u.h_lockspace);
        if (!ls) {
                if (dlm_config.ci_log_debug) {
                        printk_ratelimited(KERN_DEBUG "dlm: invalid lockspace "
                                "%u from %d cmd %d type %d\n",
-                               hd->h_lockspace, nodeid, hd->h_cmd, type);
+                               hd->u.h_lockspace, nodeid, hd->h_cmd, type);
                }
 
                if (hd->h_cmd == DLM_RCOM && type == DLM_RCOM_STATUS)
index 6f653a3..7c1a06b 100644 (file)
@@ -35,7 +35,7 @@ static void _create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
        rc = (struct dlm_rcom *) mb;
 
        rc->rc_header.h_version = (DLM_HEADER_MAJOR | DLM_HEADER_MINOR);
-       rc->rc_header.h_lockspace = ls->ls_global_id;
+       rc->rc_header.u.h_lockspace = ls->ls_global_id;
        rc->rc_header.h_nodeid = dlm_our_nodeid();
        rc->rc_header.h_length = mb_len;
        rc->rc_header.h_cmd = DLM_RCOM;
@@ -508,7 +508,7 @@ int dlm_send_ls_not_ready(int nodeid, struct dlm_rcom *rc_in)
        rc = (struct dlm_rcom *) mb;
 
        rc->rc_header.h_version = (DLM_HEADER_MAJOR | DLM_HEADER_MINOR);
-       rc->rc_header.h_lockspace = rc_in->rc_header.h_lockspace;
+       rc->rc_header.u.h_lockspace = rc_in->rc_header.u.h_lockspace;
        rc->rc_header.h_nodeid = dlm_our_nodeid();
        rc->rc_header.h_length = mb_len;
        rc->rc_header.h_cmd = DLM_RCOM;
index 74a8c5b..58acbcc 100644 (file)
@@ -23,7 +23,8 @@
 void header_out(struct dlm_header *hd)
 {
        hd->h_version           = cpu_to_le32(hd->h_version);
-       hd->h_lockspace         = cpu_to_le32(hd->h_lockspace);
+       /* does it for others u32 in union as well */
+       hd->u.h_lockspace       = cpu_to_le32(hd->u.h_lockspace);
        hd->h_nodeid            = cpu_to_le32(hd->h_nodeid);
        hd->h_length            = cpu_to_le16(hd->h_length);
 }
@@ -31,7 +32,8 @@ void header_out(struct dlm_header *hd)
 void header_in(struct dlm_header *hd)
 {
        hd->h_version           = le32_to_cpu(hd->h_version);
-       hd->h_lockspace         = le32_to_cpu(hd->h_lockspace);
+       /* does it for others u32 in union as well */
+       hd->u.h_lockspace       = le32_to_cpu(hd->u.h_lockspace);
        hd->h_nodeid            = le32_to_cpu(hd->h_nodeid);
        hd->h_length            = le16_to_cpu(hd->h_length);
 }