mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
4798cbbfbd
This patch reworks the current receive handling of dlm. As I tried to change the send handling to fix reorder issues I took a look into the receive handling and simplified it, it works as the following: Each connection has a preallocated receive buffer with a minimum length of 4096. On receive, the upper layer protocol will process all dlm message until there is not enough data anymore. If there exists "leftover" data at the end of the receive buffer because the dlm message wasn't fully received it will be copied to the begin of the preallocated receive buffer. Next receive more data will be appended to the previous "leftover" data and processing will begin again. This will remove a lot of code of the current mechanism. Inside the processing functionality we will ensure with a memmove() that the dlm message should be memory aligned. To have a dlm message always started at the beginning of the buffer will reduce some amount of memmove() calls because src and dest pointers are the same. The cluster attribute "buffer_size" becomes a new meaning, it's now the size of application layer receive buffer size. If this is changed during runtime the receive buffer will be reallocated. It's important that the receive buffer size has at minimum the size of the maximum possible dlm message size otherwise the received message cannot be placed inside the receive buffer size. Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
56 lines
1.4 KiB
C
56 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/******************************************************************************
|
|
*******************************************************************************
|
|
**
|
|
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
** Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
|
|
**
|
|
**
|
|
*******************************************************************************
|
|
******************************************************************************/
|
|
|
|
#ifndef __CONFIG_DOT_H__
|
|
#define __CONFIG_DOT_H__
|
|
|
|
#define DEFAULT_BUFFER_SIZE 4096
|
|
|
|
struct dlm_config_node {
|
|
int nodeid;
|
|
int weight;
|
|
int new;
|
|
uint32_t comm_seq;
|
|
};
|
|
|
|
#define DLM_MAX_ADDR_COUNT 3
|
|
|
|
struct dlm_config_info {
|
|
int ci_tcp_port;
|
|
int ci_buffer_size;
|
|
int ci_rsbtbl_size;
|
|
int ci_recover_timer;
|
|
int ci_toss_secs;
|
|
int ci_scan_secs;
|
|
int ci_log_debug;
|
|
int ci_log_info;
|
|
int ci_protocol;
|
|
int ci_mark;
|
|
int ci_timewarn_cs;
|
|
int ci_waitwarn_us;
|
|
int ci_new_rsb_count;
|
|
int ci_recover_callbacks;
|
|
char ci_cluster_name[DLM_LOCKSPACE_LEN];
|
|
};
|
|
|
|
extern struct dlm_config_info dlm_config;
|
|
|
|
int dlm_config_init(void);
|
|
void dlm_config_exit(void);
|
|
int dlm_config_nodes(char *lsname, struct dlm_config_node **nodes_out,
|
|
int *count_out);
|
|
int dlm_comm_seq(int nodeid, uint32_t *seq);
|
|
void dlm_comm_mark(int nodeid, unsigned int *mark);
|
|
int dlm_our_nodeid(void);
|
|
int dlm_our_addr(struct sockaddr_storage *addr, int num);
|
|
|
|
#endif /* __CONFIG_DOT_H__ */
|
|
|