[OracleOSS] [TitleIndex] [WordIndex]

OCFS2/DLM

##

Packet Name

1.2

1.4

2.6.30

Todo

Status

Dissected results

1

dlm_vote_msg

existed

expired

expired

None

Done

dissected_vote_msg

2

dlm_response_msg

existed

expired

expired

None

Done

dissected_fs_response

3

dlm_query_join_response

existed

updated

same as 1.4

commit fb4b067b980166f7f39d86a4fc71b066b039bba6

Done

dissected_query_join_response

4

dlm_query_join_request

existed

updated

same as 1.4

commit 6e85b0cbc5c47d7148f706f4dedf88b500f8e0ab

Done

dissected_query_join_request

5

dlm_deref_lockres

existed

same as 1.2

same as 1.2

commit c5221b26bf83815476264e6554c408a181958924

Done

dissected_deref_lockres

6

dlm_master_requery

existed

same as 1.2

same as 1.2

commit c0f7d19bfe510dbd9438e2c4e24e7ccde189d8c5

Done

dissected_master_requery

7

dlm_migrate_request

existed

same as 1.2

same as 1.2

commit 1342071d31b5c17790a109c5373bc5b38f9660c0

Done

dissected_migrate_request

8

dlm_migratable_lockres

existed

same as 1.2

same as 1.2

commit b1970242f30db3d3581415848dd9fa278506ad76

Done

dissected_migratable_lockres

9

dlm_master_request

existed

same as 1.2

same as 1.2

None

Done

dissected_master_request

10

dlm_assert_master

existed

same as 1.2

same as 1.2

None

Done

dissected_assert_master

11

dlm_convert_lock

existed

same as 1.2

same as 1.2

None

Done

dissected_convert_lock

12

dlm_proxy_ast

existed

same as 1.2

same as 1.2

None

Done

dissected_proxy_ast

13

dlm_unlock_lock

existed

same as 1.2

same as 1.2

None

Done

dissected_unlock_lock

14

dlm_assert_joined

existed

same as 1.2

same as 1.2

None

Done

dissected_assert_join

15

dlm_cancel_join

existed

same as 1.2

same as 1.2

None

Done

dissected_cancel_join

16

dlm_exit_domain

existed

same as 1.2

same as 1.2

None

Done

dissected_exit_domain

17

dlm_lock_request

existed

same as 1.2

same as 1.2

None

Done

dissected_lock_request

18

dlm_reco_data_done

existed

same as 1.2

same as 1.2

None

Done

dissected_reco_data_done

19

dlm_begin_reco

existed

same as 1.2

same as 1.2

None

Done

dissected_begin_reco

20

dlm_finalize_reco

existed

same as 1.2

same as 1.2

None

Done

dissected_finalize_reco

21

dlm_create_lock

existed

same as 1.2

same as 1.2

None

Done

dissected_create_lock

Packets layout

dlm_vote_msg

#define OCFS2_MESSAGE_TYPE_VOTE     (0x1)
#define OCFS2_MESSAGE_TYPE_RESPONSE (0x2)
struct ocfs2_msg_hdr
{
        __be32 h_response_id; /* used to lookup message handle on sending
                            * node. */
        __be32 h_request;
        __be64 h_blkno;
        __be32 h_generation;
        __be32 h_node_num;    /* node sending this particular message. */
};

/* OCFS2_MAX_FILENAME_LEN is 255 characters, but we want to align this
 * for the network. */
#define OCFS2_VOTE_FILENAME_LEN 256
struct ocfs2_vote_msg
{
        struct ocfs2_msg_hdr v_hdr;
        union {
                __be32 v_generic1;
                __be32 v_orphaned_slot; /* Used during delete votes */
                __be32 v_nlink;         /* Used during unlink votes */
        } md1;                          /* Message type dependant 1 */
        __be32 v_unlink_namelen;
        __be64 v_unlink_parent;
        u8  v_unlink_dirent[OCFS2_VOTE_FILENAME_LEN];
};

dlm_response_msg

#define OCFS2_MESSAGE_TYPE_VOTE     (0x1)
#define OCFS2_MESSAGE_TYPE_RESPONSE (0x2)
struct ocfs2_msg_hdr
{
        __be32 h_response_id; /* used to lookup message handle on sending
                            * node. */
        __be32 h_request;
        __be64 h_blkno;
        __be32 h_generation;
        __be32 h_node_num;    /* node sending this particular message. */
};

/* Responses are given these values to maintain backwards
 * compatibility with older ocfs2 versions */
#define OCFS2_RESPONSE_OK               (0)
#define OCFS2_RESPONSE_BUSY             (-16)
#define OCFS2_RESPONSE_BAD_MSG          (-22)

struct ocfs2_response_msg
{
        struct ocfs2_msg_hdr r_hdr;
        __be32 r_response;
        __be32 r_orphaned_slot;
};

dlm_query_join_response

enum dlm_query_join_response {
        JOIN_DISALLOW = 0,
        JOIN_OK,
        JOIN_OK_NO_MAP,
};

enum dlm_query_join_response_code {
        JOIN_DISALLOW = 0,
        JOIN_OK,
        JOIN_OK_NO_MAP,
        JOIN_PROTOCOL_MISMATCH,
};

struct dlm_query_join_packet {
        u8 code;        /* Response code.  dlm_minor and fs_minor
                           are only valid if this is JOIN_OK */
        u8 dlm_minor;   /* The minor version of the protocol the
                           dlm is speaking. */
        u8 fs_minor;    /* The minor version of the protocol the
                           filesystem is speaking. */
        u8 reserved;
};

union dlm_query_join_response {
        u32 intval;
        struct dlm_query_join_packet packet;
};

dlm_query_join_request

#define BITS_PER_BYTE 8
#define BITS_TO_BYTES(bits) \
        (((bits)+BITS_PER_BYTE-1)/BITS_PER_BYTE) 

struct dlm_query_join_request
{
        u8 node_idx;
        u8 pad1[2];
        u8 name_len;
        u8 domain[O2NM_MAX_NAME_LEN];
        u8 node_map[BITS_TO_BYTES(O2NM_MAX_NODES)];
};

#define BITS_PER_BYTE 8
#define BITS_TO_BYTES(bits) (((bits)+BITS_PER_BYTE-1)/BITS_PER_BYTE)

struct dlm_query_join_request
{
        u8 node_idx;
        u8 pad1[2];
        u8 name_len;
        struct dlm_protocol_version dlm_proto;
        struct dlm_protocol_version fs_proto;
        u8 domain[O2NM_MAX_NAME_LEN];
        u8 node_map[BITS_TO_BYTES(O2NM_MAX_NODES)];
};

dlm_deref_lockres

struct dlm_deref_lockres
{
        u32 pad1;
        u16 pad2;
        u8 node_idx;
        u8 namelen;

        u8 name[O2NM_MAX_NAME_LEN];
};

dlm_master_requery

struct dlm_master_requery
{
        u8 pad1;
        u8 pad2;
        u8 node_idx;
        u8 namelen;
        __be32 pad3;
        u8 name[O2NM_MAX_NAME_LEN];
};

dlm_migrate_request

struct dlm_migrate_request
{
        u8 master;
        u8 new_master;
        u8 namelen;
        u8 pad1;
        __be32 pad2;
        u8 name[O2NM_MAX_NAME_LEN];
};


dlm_migratable_lockres

struct dlm_migratable_lock
{
        __be64 cookie;

        /* these 3 are just padding for the in-memory structure, but
         * list and flags are actually used when sent over the wire */
        __be16 pad1;
        u8 list;  // 0=granted, 1=converting, 2=blocked
        u8 flags;

        s8 type;
        s8 convert_type;
        s8 highest_blocked;
        u8 node;
};  // 16 bytes

#define DLM_LOCKID_NAME_MAX    32
#define DLM_LVB_LEN  64

/*
 * We would like to get one whole lockres into a single network
 * message whenever possible.  Generally speaking, there will be
 * at most one dlm_lock on a lockres for each node in the cluster,
 * plus (infrequently) any additional locks coming in from userdlm.
 *
 * struct _dlm_lockres_page
 * {
 *      dlm_migratable_lockres mres;
 *      dlm_migratable_lock ml[DLM_MAX_MIGRATABLE_LOCKS];
 *      u8 pad[DLM_MIG_LOCKRES_RESERVED];
 * };
 *
 * from ../cluster/tcp.h
 *    NET_MAX_PAYLOAD_BYTES  (4096 - sizeof(net_msg))
 *    (roughly 4080 bytes)
 * and sizeof(dlm_migratable_lockres) = 112 bytes
 * and sizeof(dlm_migratable_lock) = 16 bytes
 *
 * Choosing DLM_MAX_MIGRATABLE_LOCKS=240 and
 * DLM_MIG_LOCKRES_RESERVED=128 means we have this:
 *
 *  (DLM_MAX_MIGRATABLE_LOCKS * sizeof(dlm_migratable_lock)) +
 *     sizeof(dlm_migratable_lockres) + DLM_MIG_LOCKRES_RESERVED =
 *        NET_MAX_PAYLOAD_BYTES
 *  (240 * 16) + 112 + 128 = 4080
 *
 * So a lockres would need more than 240 locks before it would
 * use more than one network packet to recover.  Not too bad.
 */
#define DLM_MAX_MIGRATABLE_LOCKS   240

struct dlm_migratable_lockres
{
        u8 master;
        u8 lockname_len;
        u8 num_locks;    // locks sent in this structure
        u8 flags;
        __be32 total_locks; // locks to be sent for this migration cookie
        __be64 mig_cookie;  // cookie for this lockres migration
                         // or zero if not needed
        // 16 bytes
        u8 lockname[DLM_LOCKID_NAME_MAX];
        // 48 bytes
        u8 lvb[DLM_LVB_LEN];
        // 112 bytes
        struct dlm_migratable_lock ml[0];  // 16 bytes each, begins at byte 112
};

dlm_master_request

struct dlm_master_request
{
        u8 node_idx;
        u8 namelen;
        __be16 pad1;
        __be32 flags;

        u8 name[O2NM_MAX_NAME_LEN];
};

dlm_assert_master

#define DLM_ASSERT_RESPONSE_REASSERT       0x00000001
#define DLM_ASSERT_RESPONSE_MASTERY_REF    0x00000002


#define DLM_ASSERT_MASTER_MLE_CLEANUP      0x00000001
#define DLM_ASSERT_MASTER_REQUERY          0x00000002
#define DLM_ASSERT_MASTER_FINISH_MIGRATION 0x00000004
struct dlm_assert_master
{
        u8 node_idx;
        u8 namelen;
        __be16 pad1;
        __be32 flags;

        u8 name[O2NM_MAX_NAME_LEN];
};

dlm_convert_lock

struct dlm_convert_lock
{
        __be64 cookie;

        __be32 flags;
        u8 pad1;
        u8 node_idx;
        s8 requested_type;
        u8 namelen;

        u8 name[O2NM_MAX_NAME_LEN];

        s8 lvb[0];
};

dlm_proxy_ast

struct dlm_proxy_ast
{
        __be64 cookie;

        __be32 flags;
        u8 node_idx;
        u8 type;
        u8 blocked_type;
        u8 namelen;

        u8 name[O2NM_MAX_NAME_LEN];

        s8 lvb[0];
};

dlm_unlock_lock

struct dlm_unlock_lock
{
        __be64 cookie;

        __be32 flags;
        __be16 pad1;
        u8 node_idx;
        u8 namelen;

        u8 name[O2NM_MAX_NAME_LEN];

        s8 lvb[0];
};

dlm_assert_joined

struct dlm_assert_joined
{
        u8 node_idx;
        u8 pad1[2];
        u8 name_len;
        u8 domain[O2NM_MAX_NAME_LEN];
};

dlm_cancel_join

struct dlm_cancel_join
{
        u8 node_idx;
        u8 pad1[2];
        u8 name_len;
        u8 domain[O2NM_MAX_NAME_LEN];
};

dlm_exit_domain

struct dlm_exit_domain
{
        u8 node_idx;
        u8 pad1[3];
};

dlm_lock_request

struct dlm_lock_request
{
        u8 node_idx;
        u8 dead_node;
        __be16 pad1;
        __be32 pad2;
};

dissected_lock_request

Magic: Request (0xfa55)
Len: 8
Type: Lock Request (515)
Sys Status: 0
Status: 0
Key: 0x2b592523
Num: 62
Payload: 0002000000000000
Node Index: 0
Dead Node: 2

dlm_reco_data_done

struct dlm_reco_data_done
{
        u8 node_idx;
        u8 dead_node;
        __be16 pad1;
        __be32 pad2;

        /* unused for now */
        /* eventually we can use this to attempt
         * lvb recovery based on each node's info */
        u8 reco_lvb[DLM_LVB_LEN];
};

dlm_begin_reco

struct dlm_begin_reco
{
        u8 node_idx;
        u8 dead_node;
        __be16 pad1;
        __be32 pad2;
};

dlm_finalize_reco

struct dlm_finalize_reco
{
        u8 node_idx;
        u8 dead_node;
        u8 flags;
        u8 pad1;
        __be32 pad2;
};

dlm_create_lock

struct dlm_create_lock
{
    __be64 cookie;
    __be32 flags;
    u8 pad1;
    u8 node_idx;
    s8 requested_type;
    u8 namelen;
    u8 name[O2NM_MAX_NAME_LEN];
};
 

dissected_vote_msg

*ocfs2-1.2 only

Magic: Request (0xfa55)
Len: 296
Type: FS Vote (1)
Sys Status: 0
Status: 0
Key: 0x2ee4b1b1
Num: 19115971
Payload1: 000018390000000200000000000B5480956C43F200000002
Payload2: 000000000000000E000000000000D0876376757472616365
Payload3: 2E6C6F672E30000000000000000000000000000000000000
Payload4: 000000000000000000000000000000000000000000000000
Payload5: 000000000000000000000000000000000000000000000000
Payload6: 000000000000000000000000000000000000000000000000

dissected_fs_response

Magic: Request (0xfa55)
Len: 32
Type: FS Response (2)
Sys Status: 0
Status: 0
Key: 0x2ee4b1b1
Num: 139018356
Payload1: 000018390000000000000000000B5480956C43F200000001
Payload2: 0000000000000000

dissected_query_join_response

Magic: Response (0xfa56)
Len: 0
Type: Query Join (510)
Pad: 0x0000
Sys Status: 0
Status: 1
Key: 0x666c6172
Num: 0

Magic: Response (0xfa56)
Len: 0
Type: Query Join (510)
Pad: 0x0000
Sys Status: 0
Status: 16777216
Key: 0x666c6172
Num: 0

dissected_query_join_request

Magic: Request (0xfa55)
Len: 100
Type: Query Join (510)
Sys Status: 0
Status: 0
Key: 0x666c6172
Num: 0
Payload: 010000204638443537463936413141323441334339423542...
Node Index: 1
Domain Namelen: 32
Domain Name: F8D57F96A1A24A3C9B5B19FEBE96895C

Magic: Request (0xfa55)
Len: 104
Type: Query Join (510)
Sys Status: 0
Status: 0
Key: 0x666c6172
Num: 0
Payload1: 070000200100010041383938443037334636323434453945
Payload2: 424542303537423446343745463631410000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Payload4: C00000000000000000000000000000000000000000000000
Payload5: 0000000000000000
Node Index: 7
Domain Namelen: 32
DLM Protocol: 1.0
FS Protocol: 1.0
Domain Name: A898D073F6244E9EBEB057B4F47EF61A
Node Map: 0000001100000000000000000000000000000000000000000000000000000000
Node Map: 0000000000000000000000000000000000000000000000000000000000000000
Node Map: 0000000000000000000000000000000000000000000000000000000000000000
Node Map: 0000000000000000000000000000000000000000000000000000000000000000

dissected_deref_lockres

Magic: Request (0xfa55)
Len: 72
Type: Deref Lockres (507)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 000000000000071F4D303030303030303030303030303030
Payload2: 303030303032346464303166313635000000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Node Index: 7
Namelen: 31
Name: M0000000000000000000024dd01f165

dissected_master_requery

Magic: Request (0xfa55)
Len: 72
Type: Master Requery (514)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 0000060900000000245245434F5645525900000000000000
Payload2: 000000000000000000000000000000000000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Node Index: 6
Namelen: 9
Name: $RECOVERY

dissected_migratable_lockres

Magic: Request (0xfa55)
Len: 144
Type: Migrate Lockres (509)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 031F02060000000200000000000000004F30303030303030
Payload2: 303030303030303030313761303039303030303030303000
Payload3: 000000000000000000000000000000000000000000000000
Payload4: 000000000000000000000000000000000000000000000000
Payload5: 00000000000000000000000000000000060000000000001B
Payload6: 0000000003FFFF0607000000000007CD0000000003FFFF07
Master: 3
Lockname Length: 31
Lock Num: 2
Migres Flags: 0x06
Total Locks: 2
Migres Cookie: 0x0000000000000000
Lockname: O000000000000000017a00900000000
LVB1: 303030303030303030313761303039303030303030303000
LVB2: 000000000000000000000000000000000000000000000000
LVB3: 00000000000000000000000000000000
Locks: 0, 0x0000000000000000, 0, 0x00, 0, 0, 0
Locks: 27, 0x0000000000000000, 0, 0x00, 0, 0, 0

dissected_migrate_request

Magic: Request (0xfa55)
Len: 72
Type: Migrate Request (508)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 03061F00000000004F303030303030303030303030303030
Payload2: 303137613030393030303030303030000000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Master: 3
New Master: 6
Namelen: 31
Name: O000000000000000017a00900000000

dissected_master_request

Magic: Request (0xfa55)
Len: 72
Type: Master Request (500)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 071F00000000000053303030303030303030303030303030
Payload2: 303030303030323030303030303030000000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Node Index: 7
Namelen: 31
Name: S000000000000000000000200000000

dissected_assert_master

Magic: Request (0xfa55)
Len: 72
Type: Assert Master (502)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 061F00000000000153303030303030303030303030303030
Payload2: 303030303030323030303030303030000000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Node Index: 6
Namelen: 31
Assert Master Flags: cleanup (0x00000001)
Name: S000000000000000000000200000000

dissected_convert_lock

Magic: Request (0xfa55)
Len: 80
Type: Convert Lock (504)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 07000000000007C6000004000007001F5330303030303030
Payload2: 303030303030303030303030303032303030303030303000
Payload3: 000000000000000000000000000000000000000000000000
Payload4: 0000000000000000
Cookie: 0x07000000000007c6 (7:1990)
Flags: 0x00000400: 0000 0000 0000 0000 0000 0100 0000 0000 = convert
Node Index: 7
Requested Type: NL: No lock (0)
Namelen: 31
Name: S000000000000000000000200000000

dissected_proxy_ast

Magic: Request (0xfa55)
Len: 80
Type: Proxy AST (505)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 07000000000007C6000000000600001F5330303030303030
Payload2: 303030303030303030303030303032303030303030303000
Payload3: 000000000000000000000000000000000000000000000000
Payload4: 0000000000000000
Cookie: 0x07000000000007c6 (7:1990)
Flags: 0x00000000: 0000 0000 0000 0000 0000 0000 0000 0000 =
Node Index: 6
AST Type: AST (0)
Blocked Locktype: NL: No lock (0)
Namelen: 31
Name: S000000000000000000000200000000

dissected_unlock_lock

Magic: Request (0xfa55)
Len: 80
Type: Unlock Lock (506)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 0300000000000001000000000000031F5330303030303030
Payload2: 303030303030303030303030303032303030303030303000
Payload3: 000000000000000000000000000000000000000000000000
Payload4: 0000000000000000
Cookie: 0x0300000000000001 (3:1)
Flags: 0x00000000: 0000 0000 0000 0000 0000 0000 0000 0000 =
Node Index: 3
Namelen: 31
Name: S000000000000000000000200000000

dissected_assert_join

Magic: Request (0xfa55)
Len: 68
Type: Assert Join (511)
Sys Status: 0
Status: 0
Key: 0x666c6172
Num: 0
Payload1: 070000204138393844303733463632343445394542454230
Payload2: 353742344634374546363141000000000000000000000000
Payload3: 0000000000000000000000000000000000000000
Node Index: 7
Domain Namelen: 32
Domain Name: A898D073F6244E9EBEB057B4F47EF61A

dissected_cancel_join

Magic: Request (0xfa55)
Len: 68
Type: Cancel Join (512)
Sys Status: 0
Status: 0
Key: 0x666c6172
Num: 0
Payload1: 040000204135324446354644343138423443354338344436
Payload2: 363337443537363745343438000000000000000000000000
Payload3: 0000000000000000000000000000000000000000
Node Index: 4
Domain Namelen: 32
Domain Name: A52DF5FD418B4C5C84D6637D5767E448

dissected_exit_domain

Magic: Request (0xfa55)
Len: 4
Type: Exit Domain (513)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 03000000
Node Index: 3

dissected_begin_reco

Magic: Request (0xfa55)
Len: 8
Type: Begin Reovery (517)
Sys Status: 0
Status: 0
Key: 0x2b592523
Num: 61
Payload: 0002000000000000
Node Index: 0
Dead Node: 2

dissected_finalize_reco

Magic: Request (0xfa55)
Len: 8
Type: Finalize Recovery (518)
Sys Status: 0
Status: 0
Key: 0x2b592523
Num: 63
Payload1: 0002000000000000
Node Index: 0
Dead Node: 2
Finalize Recovery Flags: Unknown (0x00000000)

dissected_reco_data_done

Magic: Request (0xfa55)
Len: 72
Type: Recovery Data Done (516)
Sys Status: 0
Status: 0
Key: 0x2b592523
Num: 96
Payload1: 010200000000000000000000000000000000000000000000
Payload2: 000000000000000000000000000000000000000000000000
Payload3: 000000000000000000000000000000000000000000000000
Node Index: 1
Dead Node: 2

dissected_create_lock

Magic: Request (0xfa55)
Len: 80
Type: Create Lock (503)
Sys Status: 0
Status: 0
Key: 0x74e320eb
Num: 0
Payload1: 07000000000007C6000000000007051F5330303030303030
Payload2: 303030303030303030303030303032303030303030303000
Payload3: 000000000000000000000000000000000000000000000000
Payload4: 0000000000000000
Cookie: 0x07000000000007c6 (7:1990)
Flags: 0x00000000: 0000 0000 0000 0000 0000 0000 0000 0000 =
Node Index: 7
Requested Type: EX: Exclusive (5)
Namelen: 31
Name: S000000000000000000000200000000


2012-11-08 13:01