mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
dlm: handle port as __be16 network byte order
This patch handles the DLM listen port setting internally as byte order as it is a value that is used as network byte on the wire. The user space still sets this value as host byte order for configfs as we don't break UAPI here. Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
7138c79034
commit
f92a5be571
@ -73,7 +73,7 @@ const struct rhashtable_params dlm_rhash_rsb_params = {
|
||||
|
||||
struct dlm_cluster {
|
||||
struct config_group group;
|
||||
unsigned int cl_tcp_port;
|
||||
__be16 cl_tcp_port;
|
||||
unsigned int cl_buffer_size;
|
||||
unsigned int cl_rsbtbl_size;
|
||||
unsigned int cl_recover_timer;
|
||||
@ -132,6 +132,45 @@ static ssize_t cluster_cluster_name_store(struct config_item *item,
|
||||
|
||||
CONFIGFS_ATTR(cluster_, cluster_name);
|
||||
|
||||
static ssize_t cluster_tcp_port_show(struct config_item *item, char *buf)
|
||||
{
|
||||
return sprintf(buf, "%u\n", be16_to_cpu(dlm_config.ci_tcp_port));
|
||||
}
|
||||
|
||||
static int dlm_check_zero_and_dlm_running(unsigned int x)
|
||||
{
|
||||
if (!x)
|
||||
return -EINVAL;
|
||||
|
||||
if (dlm_lowcomms_is_running())
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t cluster_tcp_port_store(struct config_item *item,
|
||||
const char *buf, size_t len)
|
||||
{
|
||||
int rc;
|
||||
u16 x;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
rc = kstrtou16(buf, 0, &x);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = dlm_check_zero_and_dlm_running(x);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
dlm_config.ci_tcp_port = cpu_to_be16(x);
|
||||
return len;
|
||||
}
|
||||
|
||||
CONFIGFS_ATTR(cluster_, tcp_port);
|
||||
|
||||
static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
|
||||
int *info_field, int (*check_cb)(unsigned int x),
|
||||
const char *buf, size_t len)
|
||||
@ -191,17 +230,6 @@ static int dlm_check_protocol_and_dlm_running(unsigned int x)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dlm_check_zero_and_dlm_running(unsigned int x)
|
||||
{
|
||||
if (!x)
|
||||
return -EINVAL;
|
||||
|
||||
if (dlm_lowcomms_is_running())
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dlm_check_zero(unsigned int x)
|
||||
{
|
||||
if (!x)
|
||||
@ -218,7 +246,6 @@ static int dlm_check_buffer_size(unsigned int x)
|
||||
return 0;
|
||||
}
|
||||
|
||||
CLUSTER_ATTR(tcp_port, dlm_check_zero_and_dlm_running);
|
||||
CLUSTER_ATTR(buffer_size, dlm_check_buffer_size);
|
||||
CLUSTER_ATTR(rsbtbl_size, dlm_check_zero);
|
||||
CLUSTER_ATTR(recover_timer, dlm_check_zero);
|
||||
@ -982,7 +1009,7 @@ int dlm_our_addr(struct sockaddr_storage *addr, int num)
|
||||
#define DEFAULT_CLUSTER_NAME ""
|
||||
|
||||
struct dlm_config_info dlm_config = {
|
||||
.ci_tcp_port = DEFAULT_TCP_PORT,
|
||||
.ci_tcp_port = cpu_to_be16(DEFAULT_TCP_PORT),
|
||||
.ci_buffer_size = DLM_MAX_SOCKET_BUFSIZE,
|
||||
.ci_rsbtbl_size = DEFAULT_RSBTBL_SIZE,
|
||||
.ci_recover_timer = DEFAULT_RECOVER_TIMER,
|
||||
|
@ -29,7 +29,7 @@ extern const struct rhashtable_params dlm_rhash_rsb_params;
|
||||
#define DLM_PROTO_SCTP 1
|
||||
|
||||
struct dlm_config_info {
|
||||
int ci_tcp_port;
|
||||
__be16 ci_tcp_port;
|
||||
int ci_buffer_size;
|
||||
int ci_rsbtbl_size;
|
||||
int ci_recover_timer;
|
||||
|
@ -660,18 +660,18 @@ static void add_sock(struct socket *sock, struct connection *con)
|
||||
|
||||
/* Add the port number to an IPv6 or 4 sockaddr and return the address
|
||||
length */
|
||||
static void make_sockaddr(struct sockaddr_storage *saddr, uint16_t port,
|
||||
static void make_sockaddr(struct sockaddr_storage *saddr, __be16 port,
|
||||
int *addr_len)
|
||||
{
|
||||
saddr->ss_family = dlm_local_addr[0].ss_family;
|
||||
if (saddr->ss_family == AF_INET) {
|
||||
struct sockaddr_in *in4_addr = (struct sockaddr_in *)saddr;
|
||||
in4_addr->sin_port = cpu_to_be16(port);
|
||||
in4_addr->sin_port = port;
|
||||
*addr_len = sizeof(struct sockaddr_in);
|
||||
memset(&in4_addr->sin_zero, 0, sizeof(in4_addr->sin_zero));
|
||||
} else {
|
||||
struct sockaddr_in6 *in6_addr = (struct sockaddr_in6 *)saddr;
|
||||
in6_addr->sin6_port = cpu_to_be16(port);
|
||||
in6_addr->sin6_port = port;
|
||||
*addr_len = sizeof(struct sockaddr_in6);
|
||||
}
|
||||
memset((char *)saddr + *addr_len, 0, sizeof(struct sockaddr_storage) - *addr_len);
|
||||
@ -1121,7 +1121,7 @@ static void writequeue_entry_complete(struct writequeue_entry *e, int completed)
|
||||
/*
|
||||
* sctp_bind_addrs - bind a SCTP socket to all our addresses
|
||||
*/
|
||||
static int sctp_bind_addrs(struct socket *sock, uint16_t port)
|
||||
static int sctp_bind_addrs(struct socket *sock, __be16 port)
|
||||
{
|
||||
struct sockaddr_storage localaddr;
|
||||
struct sockaddr *addr = (struct sockaddr *)&localaddr;
|
||||
|
Loading…
Reference in New Issue
Block a user