mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 23:54:04 +08:00
b97f85259f
This patch changes that we don't ack each message. Lowcomms will take care about to send an ack back after a bulk of messages was processed. Currently it's only when the whole receive buffer was processed, there might better positions to send an ack back but only the lowcomms implementation know when there are more data to receive. This patch has also disadvantages that we might retransmit more on errors, however this is a very rare case. Tested with make_panic on gfs2 with three nodes by running: trace-cmd record -p function -l 'dlm_send_ack' sleep 100 and trace-cmd report | wc -l Before patch: - 20548 - 21376 - 21398 After patch: - 18338 - 20679 - 19949 Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
53 lines
1.8 KiB
C
53 lines
1.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/******************************************************************************
|
|
*******************************************************************************
|
|
**
|
|
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
** Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
|
|
**
|
|
**
|
|
*******************************************************************************
|
|
******************************************************************************/
|
|
|
|
#ifndef __LOWCOMMS_DOT_H__
|
|
#define __LOWCOMMS_DOT_H__
|
|
|
|
#include "dlm_internal.h"
|
|
|
|
#define DLM_MIDCOMMS_OPT_LEN sizeof(struct dlm_opts)
|
|
#define DLM_MAX_APP_BUFSIZE (DLM_MAX_SOCKET_BUFSIZE - \
|
|
DLM_MIDCOMMS_OPT_LEN)
|
|
|
|
#define CONN_HASH_SIZE 32
|
|
|
|
/* This is deliberately very simple because most clusters have simple
|
|
* sequential nodeids, so we should be able to go straight to a connection
|
|
* struct in the array
|
|
*/
|
|
static inline int nodeid_hash(int nodeid)
|
|
{
|
|
return nodeid & (CONN_HASH_SIZE-1);
|
|
}
|
|
|
|
/* switch to check if dlm is running */
|
|
extern int dlm_allow_conn;
|
|
|
|
int dlm_lowcomms_start(void);
|
|
void dlm_lowcomms_shutdown(void);
|
|
void dlm_lowcomms_stop(void);
|
|
void dlm_lowcomms_exit(void);
|
|
int dlm_lowcomms_close(int nodeid);
|
|
struct dlm_msg *dlm_lowcomms_new_msg(int nodeid, int len, gfp_t allocation,
|
|
char **ppc, void (*cb)(struct dlm_mhandle *mh),
|
|
struct dlm_mhandle *mh);
|
|
void dlm_lowcomms_commit_msg(struct dlm_msg *msg);
|
|
void dlm_lowcomms_put_msg(struct dlm_msg *msg);
|
|
int dlm_lowcomms_resend_msg(struct dlm_msg *msg);
|
|
int dlm_lowcomms_connect_node(int nodeid);
|
|
int dlm_lowcomms_nodes_set_mark(int nodeid, unsigned int mark);
|
|
int dlm_lowcomms_addr(int nodeid, struct sockaddr_storage *addr, int len);
|
|
void dlm_midcomms_receive_done(int nodeid);
|
|
|
|
#endif /* __LOWCOMMS_DOT_H__ */
|
|
|