libceph: make ceph_pr_addr take an struct ceph_entity_addr pointer
GCC9 is throwing a lot of warnings about unaligned accesses by callers of ceph_pr_addr. All of the current callers are passing a pointer to the sockaddr inside struct ceph_entity_addr. Fix it to take a pointer to a struct ceph_entity_addr instead, and then have the function make a copy of the sockaddr before printing it. Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Ilya Dryomov <idryomov@gmail.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
cede185b1b
commit
b726ec972c
|
@ -37,7 +37,7 @@ static int mdsmap_show(struct seq_file *s, void *p)
|
||||||
struct ceph_entity_addr *addr = &mdsmap->m_info[i].addr;
|
struct ceph_entity_addr *addr = &mdsmap->m_info[i].addr;
|
||||||
int state = mdsmap->m_info[i].state;
|
int state = mdsmap->m_info[i].state;
|
||||||
seq_printf(s, "\tmds%d\t%s\t(%s)\n", i,
|
seq_printf(s, "\tmds%d\t%s\t(%s)\n", i,
|
||||||
ceph_pr_addr(&addr->in_addr),
|
ceph_pr_addr(addr),
|
||||||
ceph_mds_state_name(state));
|
ceph_mds_state_name(state));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -205,7 +205,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
|
||||||
|
|
||||||
dout("mdsmap_decode %d/%d %lld mds%d.%d %s %s\n",
|
dout("mdsmap_decode %d/%d %lld mds%d.%d %s %s\n",
|
||||||
i+1, n, global_id, mds, inc,
|
i+1, n, global_id, mds, inc,
|
||||||
ceph_pr_addr(&addr.in_addr),
|
ceph_pr_addr(&addr),
|
||||||
ceph_mds_state_name(state));
|
ceph_mds_state_name(state));
|
||||||
|
|
||||||
if (mds < 0 || state <= 0)
|
if (mds < 0 || state <= 0)
|
||||||
|
|
|
@ -323,7 +323,8 @@ struct ceph_connection {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
extern const char *ceph_pr_addr(const struct sockaddr_storage *ss);
|
extern const char *ceph_pr_addr(const struct ceph_entity_addr *addr);
|
||||||
|
|
||||||
extern int ceph_parse_ips(const char *c, const char *end,
|
extern int ceph_parse_ips(const char *c, const char *end,
|
||||||
struct ceph_entity_addr *addr,
|
struct ceph_entity_addr *addr,
|
||||||
int max_count, int *count);
|
int max_count, int *count);
|
||||||
|
|
|
@ -271,7 +271,7 @@ static int decode_locker(void **p, void *end, struct ceph_locker *locker)
|
||||||
|
|
||||||
dout("%s %s%llu cookie %s addr %s\n", __func__,
|
dout("%s %s%llu cookie %s addr %s\n", __func__,
|
||||||
ENTITY_NAME(locker->id.name), locker->id.cookie,
|
ENTITY_NAME(locker->id.name), locker->id.cookie,
|
||||||
ceph_pr_addr(&locker->info.addr.in_addr));
|
ceph_pr_addr(&locker->info.addr));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ static int monmap_show(struct seq_file *s, void *p)
|
||||||
|
|
||||||
seq_printf(s, "\t%s%lld\t%s\n",
|
seq_printf(s, "\t%s%lld\t%s\n",
|
||||||
ENTITY_NAME(inst->name),
|
ENTITY_NAME(inst->name),
|
||||||
ceph_pr_addr(&inst->addr.in_addr));
|
ceph_pr_addr(&inst->addr));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ static int osdmap_show(struct seq_file *s, void *p)
|
||||||
char sb[64];
|
char sb[64];
|
||||||
|
|
||||||
seq_printf(s, "osd%d\t%s\t%3d%%\t(%s)\t%3d%%\n",
|
seq_printf(s, "osd%d\t%s\t%3d%%\t(%s)\t%3d%%\n",
|
||||||
i, ceph_pr_addr(&addr->in_addr),
|
i, ceph_pr_addr(addr),
|
||||||
((map->osd_weight[i]*100) >> 16),
|
((map->osd_weight[i]*100) >> 16),
|
||||||
ceph_osdmap_state_str(sb, sizeof(sb), state),
|
ceph_osdmap_state_str(sb, sizeof(sb), state),
|
||||||
((ceph_get_primary_affinity(map, i)*100) >> 16));
|
((ceph_get_primary_affinity(map, i)*100) >> 16));
|
||||||
|
|
|
@ -186,17 +186,18 @@ static atomic_t addr_str_seq = ATOMIC_INIT(0);
|
||||||
|
|
||||||
static struct page *zero_page; /* used in certain error cases */
|
static struct page *zero_page; /* used in certain error cases */
|
||||||
|
|
||||||
const char *ceph_pr_addr(const struct sockaddr_storage *ss)
|
const char *ceph_pr_addr(const struct ceph_entity_addr *addr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *s;
|
char *s;
|
||||||
struct sockaddr_in *in4 = (struct sockaddr_in *) ss;
|
struct sockaddr_storage ss = addr->in_addr; /* align */
|
||||||
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *) ss;
|
struct sockaddr_in *in4 = (struct sockaddr_in *)&ss;
|
||||||
|
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)&ss;
|
||||||
|
|
||||||
i = atomic_inc_return(&addr_str_seq) & ADDR_STR_COUNT_MASK;
|
i = atomic_inc_return(&addr_str_seq) & ADDR_STR_COUNT_MASK;
|
||||||
s = addr_str[i];
|
s = addr_str[i];
|
||||||
|
|
||||||
switch (ss->ss_family) {
|
switch (ss.ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
snprintf(s, MAX_ADDR_STR_LEN, "%pI4:%hu", &in4->sin_addr,
|
snprintf(s, MAX_ADDR_STR_LEN, "%pI4:%hu", &in4->sin_addr,
|
||||||
ntohs(in4->sin_port));
|
ntohs(in4->sin_port));
|
||||||
|
@ -209,7 +210,7 @@ const char *ceph_pr_addr(const struct sockaddr_storage *ss)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
snprintf(s, MAX_ADDR_STR_LEN, "(unknown sockaddr family %hu)",
|
snprintf(s, MAX_ADDR_STR_LEN, "(unknown sockaddr family %hu)",
|
||||||
ss->ss_family);
|
ss.ss_family);
|
||||||
}
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
@ -471,18 +472,18 @@ static int ceph_tcp_connect(struct ceph_connection *con)
|
||||||
|
|
||||||
set_sock_callbacks(sock, con);
|
set_sock_callbacks(sock, con);
|
||||||
|
|
||||||
dout("connect %s\n", ceph_pr_addr(&con->peer_addr.in_addr));
|
dout("connect %s\n", ceph_pr_addr(&con->peer_addr));
|
||||||
|
|
||||||
con_sock_state_connecting(con);
|
con_sock_state_connecting(con);
|
||||||
ret = sock->ops->connect(sock, (struct sockaddr *)&ss, sizeof(ss),
|
ret = sock->ops->connect(sock, (struct sockaddr *)&ss, sizeof(ss),
|
||||||
O_NONBLOCK);
|
O_NONBLOCK);
|
||||||
if (ret == -EINPROGRESS) {
|
if (ret == -EINPROGRESS) {
|
||||||
dout("connect %s EINPROGRESS sk_state = %u\n",
|
dout("connect %s EINPROGRESS sk_state = %u\n",
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr),
|
ceph_pr_addr(&con->peer_addr),
|
||||||
sock->sk->sk_state);
|
sock->sk->sk_state);
|
||||||
} else if (ret < 0) {
|
} else if (ret < 0) {
|
||||||
pr_err("connect %s error %d\n",
|
pr_err("connect %s error %d\n",
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr), ret);
|
ceph_pr_addr(&con->peer_addr), ret);
|
||||||
sock_release(sock);
|
sock_release(sock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -669,8 +670,7 @@ static void reset_connection(struct ceph_connection *con)
|
||||||
void ceph_con_close(struct ceph_connection *con)
|
void ceph_con_close(struct ceph_connection *con)
|
||||||
{
|
{
|
||||||
mutex_lock(&con->mutex);
|
mutex_lock(&con->mutex);
|
||||||
dout("con_close %p peer %s\n", con,
|
dout("con_close %p peer %s\n", con, ceph_pr_addr(&con->peer_addr));
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr));
|
|
||||||
con->state = CON_STATE_CLOSED;
|
con->state = CON_STATE_CLOSED;
|
||||||
|
|
||||||
con_flag_clear(con, CON_FLAG_LOSSYTX); /* so we retry next connect */
|
con_flag_clear(con, CON_FLAG_LOSSYTX); /* so we retry next connect */
|
||||||
|
@ -694,7 +694,7 @@ void ceph_con_open(struct ceph_connection *con,
|
||||||
struct ceph_entity_addr *addr)
|
struct ceph_entity_addr *addr)
|
||||||
{
|
{
|
||||||
mutex_lock(&con->mutex);
|
mutex_lock(&con->mutex);
|
||||||
dout("con_open %p %s\n", con, ceph_pr_addr(&addr->in_addr));
|
dout("con_open %p %s\n", con, ceph_pr_addr(addr));
|
||||||
|
|
||||||
WARN_ON(con->state != CON_STATE_CLOSED);
|
WARN_ON(con->state != CON_STATE_CLOSED);
|
||||||
con->state = CON_STATE_PREOPEN;
|
con->state = CON_STATE_PREOPEN;
|
||||||
|
@ -1788,7 +1788,7 @@ static int verify_hello(struct ceph_connection *con)
|
||||||
{
|
{
|
||||||
if (memcmp(con->in_banner, CEPH_BANNER, strlen(CEPH_BANNER))) {
|
if (memcmp(con->in_banner, CEPH_BANNER, strlen(CEPH_BANNER))) {
|
||||||
pr_err("connect to %s got bad banner\n",
|
pr_err("connect to %s got bad banner\n",
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr));
|
ceph_pr_addr(&con->peer_addr));
|
||||||
con->error_msg = "protocol error, bad banner";
|
con->error_msg = "protocol error, bad banner";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1898,7 +1898,7 @@ static int ceph_dns_resolve_name(const char *name, size_t namelen,
|
||||||
*ipend = end;
|
*ipend = end;
|
||||||
|
|
||||||
pr_info("resolve '%.*s' (ret=%d): %s\n", (int)(end - name), name,
|
pr_info("resolve '%.*s' (ret=%d): %s\n", (int)(end - name), name,
|
||||||
ret, ret ? "failed" : ceph_pr_addr(&addr->in_addr));
|
ret, ret ? "failed" : ceph_pr_addr(addr));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1981,7 +1981,7 @@ int ceph_parse_ips(const char *c, const char *end,
|
||||||
|
|
||||||
addr_set_port(&addr[i], port);
|
addr_set_port(&addr[i], port);
|
||||||
|
|
||||||
dout("parse_ips got %s\n", ceph_pr_addr(&addr[i].in_addr));
|
dout("parse_ips got %s\n", ceph_pr_addr(&addr[i]));
|
||||||
|
|
||||||
if (p == end)
|
if (p == end)
|
||||||
break;
|
break;
|
||||||
|
@ -2023,9 +2023,9 @@ static int process_banner(struct ceph_connection *con)
|
||||||
!(addr_is_blank(&con->actual_peer_addr) &&
|
!(addr_is_blank(&con->actual_peer_addr) &&
|
||||||
con->actual_peer_addr.nonce == con->peer_addr.nonce)) {
|
con->actual_peer_addr.nonce == con->peer_addr.nonce)) {
|
||||||
pr_warn("wrong peer, want %s/%d, got %s/%d\n",
|
pr_warn("wrong peer, want %s/%d, got %s/%d\n",
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr),
|
ceph_pr_addr(&con->peer_addr),
|
||||||
(int)le32_to_cpu(con->peer_addr.nonce),
|
(int)le32_to_cpu(con->peer_addr.nonce),
|
||||||
ceph_pr_addr(&con->actual_peer_addr.in_addr),
|
ceph_pr_addr(&con->actual_peer_addr),
|
||||||
(int)le32_to_cpu(con->actual_peer_addr.nonce));
|
(int)le32_to_cpu(con->actual_peer_addr.nonce));
|
||||||
con->error_msg = "wrong peer at address";
|
con->error_msg = "wrong peer at address";
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -2043,7 +2043,7 @@ static int process_banner(struct ceph_connection *con)
|
||||||
addr_set_port(&con->msgr->inst.addr, port);
|
addr_set_port(&con->msgr->inst.addr, port);
|
||||||
encode_my_addr(con->msgr);
|
encode_my_addr(con->msgr);
|
||||||
dout("process_banner learned my addr is %s\n",
|
dout("process_banner learned my addr is %s\n",
|
||||||
ceph_pr_addr(&con->msgr->inst.addr.in_addr));
|
ceph_pr_addr(&con->msgr->inst.addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2094,7 +2094,7 @@ static int process_connect(struct ceph_connection *con)
|
||||||
pr_err("%s%lld %s feature set mismatch,"
|
pr_err("%s%lld %s feature set mismatch,"
|
||||||
" my %llx < server's %llx, missing %llx\n",
|
" my %llx < server's %llx, missing %llx\n",
|
||||||
ENTITY_NAME(con->peer_name),
|
ENTITY_NAME(con->peer_name),
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr),
|
ceph_pr_addr(&con->peer_addr),
|
||||||
sup_feat, server_feat, server_feat & ~sup_feat);
|
sup_feat, server_feat, server_feat & ~sup_feat);
|
||||||
con->error_msg = "missing required protocol features";
|
con->error_msg = "missing required protocol features";
|
||||||
reset_connection(con);
|
reset_connection(con);
|
||||||
|
@ -2104,7 +2104,7 @@ static int process_connect(struct ceph_connection *con)
|
||||||
pr_err("%s%lld %s protocol version mismatch,"
|
pr_err("%s%lld %s protocol version mismatch,"
|
||||||
" my %d != server's %d\n",
|
" my %d != server's %d\n",
|
||||||
ENTITY_NAME(con->peer_name),
|
ENTITY_NAME(con->peer_name),
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr),
|
ceph_pr_addr(&con->peer_addr),
|
||||||
le32_to_cpu(con->out_connect.protocol_version),
|
le32_to_cpu(con->out_connect.protocol_version),
|
||||||
le32_to_cpu(con->in_reply.protocol_version));
|
le32_to_cpu(con->in_reply.protocol_version));
|
||||||
con->error_msg = "protocol version mismatch";
|
con->error_msg = "protocol version mismatch";
|
||||||
|
@ -2138,7 +2138,7 @@ static int process_connect(struct ceph_connection *con)
|
||||||
le32_to_cpu(con->in_reply.connect_seq));
|
le32_to_cpu(con->in_reply.connect_seq));
|
||||||
pr_err("%s%lld %s connection reset\n",
|
pr_err("%s%lld %s connection reset\n",
|
||||||
ENTITY_NAME(con->peer_name),
|
ENTITY_NAME(con->peer_name),
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr));
|
ceph_pr_addr(&con->peer_addr));
|
||||||
reset_connection(con);
|
reset_connection(con);
|
||||||
con_out_kvec_reset(con);
|
con_out_kvec_reset(con);
|
||||||
ret = prepare_write_connect(con);
|
ret = prepare_write_connect(con);
|
||||||
|
@ -2195,7 +2195,7 @@ static int process_connect(struct ceph_connection *con)
|
||||||
pr_err("%s%lld %s protocol feature mismatch,"
|
pr_err("%s%lld %s protocol feature mismatch,"
|
||||||
" my required %llx > server's %llx, need %llx\n",
|
" my required %llx > server's %llx, need %llx\n",
|
||||||
ENTITY_NAME(con->peer_name),
|
ENTITY_NAME(con->peer_name),
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr),
|
ceph_pr_addr(&con->peer_addr),
|
||||||
req_feat, server_feat, req_feat & ~server_feat);
|
req_feat, server_feat, req_feat & ~server_feat);
|
||||||
con->error_msg = "missing required protocol features";
|
con->error_msg = "missing required protocol features";
|
||||||
reset_connection(con);
|
reset_connection(con);
|
||||||
|
@ -2402,7 +2402,7 @@ static int read_partial_message(struct ceph_connection *con)
|
||||||
if ((s64)seq - (s64)con->in_seq < 1) {
|
if ((s64)seq - (s64)con->in_seq < 1) {
|
||||||
pr_info("skipping %s%lld %s seq %lld expected %lld\n",
|
pr_info("skipping %s%lld %s seq %lld expected %lld\n",
|
||||||
ENTITY_NAME(con->peer_name),
|
ENTITY_NAME(con->peer_name),
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr),
|
ceph_pr_addr(&con->peer_addr),
|
||||||
seq, con->in_seq + 1);
|
seq, con->in_seq + 1);
|
||||||
con->in_base_pos = -front_len - middle_len - data_len -
|
con->in_base_pos = -front_len - middle_len - data_len -
|
||||||
sizeof_footer(con);
|
sizeof_footer(con);
|
||||||
|
@ -2981,10 +2981,10 @@ static void ceph_con_workfn(struct work_struct *work)
|
||||||
static void con_fault(struct ceph_connection *con)
|
static void con_fault(struct ceph_connection *con)
|
||||||
{
|
{
|
||||||
dout("fault %p state %lu to peer %s\n",
|
dout("fault %p state %lu to peer %s\n",
|
||||||
con, con->state, ceph_pr_addr(&con->peer_addr.in_addr));
|
con, con->state, ceph_pr_addr(&con->peer_addr));
|
||||||
|
|
||||||
pr_warn("%s%lld %s %s\n", ENTITY_NAME(con->peer_name),
|
pr_warn("%s%lld %s %s\n", ENTITY_NAME(con->peer_name),
|
||||||
ceph_pr_addr(&con->peer_addr.in_addr), con->error_msg);
|
ceph_pr_addr(&con->peer_addr), con->error_msg);
|
||||||
con->error_msg = NULL;
|
con->error_msg = NULL;
|
||||||
|
|
||||||
WARN_ON(con->state != CON_STATE_CONNECTING &&
|
WARN_ON(con->state != CON_STATE_CONNECTING &&
|
||||||
|
|
|
@ -76,7 +76,7 @@ struct ceph_monmap *ceph_monmap_decode(void *p, void *end)
|
||||||
m->num_mon);
|
m->num_mon);
|
||||||
for (i = 0; i < m->num_mon; i++)
|
for (i = 0; i < m->num_mon; i++)
|
||||||
dout("monmap_decode mon%d is %s\n", i,
|
dout("monmap_decode mon%d is %s\n", i,
|
||||||
ceph_pr_addr(&m->mon_inst[i].addr.in_addr));
|
ceph_pr_addr(&m->mon_inst[i].addr));
|
||||||
return m;
|
return m;
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
|
@ -203,7 +203,7 @@ static void reopen_session(struct ceph_mon_client *monc)
|
||||||
{
|
{
|
||||||
if (!monc->hunting)
|
if (!monc->hunting)
|
||||||
pr_info("mon%d %s session lost, hunting for new mon\n",
|
pr_info("mon%d %s session lost, hunting for new mon\n",
|
||||||
monc->cur_mon, ceph_pr_addr(&monc->con.peer_addr.in_addr));
|
monc->cur_mon, ceph_pr_addr(&monc->con.peer_addr));
|
||||||
|
|
||||||
__close_session(monc);
|
__close_session(monc);
|
||||||
__open_session(monc);
|
__open_session(monc);
|
||||||
|
@ -1178,7 +1178,7 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
|
||||||
__resend_generic_request(monc);
|
__resend_generic_request(monc);
|
||||||
|
|
||||||
pr_info("mon%d %s session established\n", monc->cur_mon,
|
pr_info("mon%d %s session established\n", monc->cur_mon,
|
||||||
ceph_pr_addr(&monc->con.peer_addr.in_addr));
|
ceph_pr_addr(&monc->con.peer_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -4926,7 +4926,7 @@ static int decode_watcher(void **p, void *end, struct ceph_watch_item *item)
|
||||||
|
|
||||||
dout("%s %s%llu cookie %llu addr %s\n", __func__,
|
dout("%s %s%llu cookie %llu addr %s\n", __func__,
|
||||||
ENTITY_NAME(item->name), item->cookie,
|
ENTITY_NAME(item->name), item->cookie,
|
||||||
ceph_pr_addr(&item->addr.in_addr));
|
ceph_pr_addr(&item->addr));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue