dlm for 4.10
This set fixes error reporting for dlm sockets, removes the unbound property on the dlm callback workqueue to improve performance, and includes a couple trivial changes. -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJYTwosAAoJEDgbc8f8gGmqqHUQAKj+/z+kIrMp5MJEhzriMLpP wKIZa9bkmcm+BuLLf7EOwmaYx374HCq4oNNY7DJT0bE9rbFLwx9zgOvdoIjJFU3V mSvhyH8FeyueNyZHZdXmA1JZCGbuCeS36cxseaeS14+ANE/cQFlOHW5ihvLAmmnR fyV/38IjbDl33pTVf2YU5G232csicNMM8xR+1+ctrhd6CREdbY8Nf4TYVjNLHAsD r3FsuzScv1+p1LuczEhFP/Nl0YcVpH3EzSgOY67WRSQlSMyrfdnVvJkgwSIZkhpp XwW++ZBFq3B5Et1YgrFtTECrvMOb3hvoejtKTeTPq3tWoOvgweml1brtO8rVN85U brdTn3blKE7oyh+0ITdENLKXsWB5+qe1afNN51qO+MZyXKCR6uct+SjSI+zelet8 jKqxP1bQCxbnvPfF/pWVGujDE4Cb6qoeCrFSoJ/VpC/JcKxxLB7p06yflY5Ztokr yWnPiBSEz7M7+lRF/HKmJ2PZKwdZwyrrRWtCyRXPPD29kg4pG46oxjqU9iEp3R9F hDCt/AiqQWWQuhU0RZ910h2ce1y9oSyQSAbVqfmqNYZMk6UeO+0X9+kxl5fSeIWT bjO+LsZqz8QQG33XYADs+5dSRK9Lmh5roR6j7QKlVJUsB+RbBhkDSMArh+jSCQap 61L10OPKaN97m6TNXfVw =4ZWQ -----END PGP SIGNATURE----- Merge tag 'dlm-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm Pull dlm fixes from David Teigland: "This set fixes error reporting for dlm sockets, removes the unbound property on the dlm callback workqueue to improve performance, and includes a couple trivial changes" * tag 'dlm-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm: dlm: fix error return code in sctp_accept_from_sock() dlm: don't specify WQ_UNBOUND for the ast callback workqueue dlm: remove lock_sock to avoid scheduling while atomic dlm: don't save callbacks after accept dlm: audit and remove any unnecessary uses of module.h dlm: make genl_ops const
This commit is contained in:
commit
19d37ce2a7
|
@ -268,7 +268,7 @@ void dlm_callback_work(struct work_struct *work)
|
||||||
int dlm_callback_start(struct dlm_ls *ls)
|
int dlm_callback_start(struct dlm_ls *ls)
|
||||||
{
|
{
|
||||||
ls->ls_callback_wq = alloc_workqueue("dlm_callback",
|
ls->ls_callback_wq = alloc_workqueue("dlm_callback",
|
||||||
WQ_UNBOUND | WQ_MEM_RECLAIM, 0);
|
WQ_HIGHPRI | WQ_MEM_RECLAIM, 0);
|
||||||
if (!ls->ls_callback_wq) {
|
if (!ls->ls_callback_wq) {
|
||||||
log_print("can't start dlm_callback workqueue");
|
log_print("can't start dlm_callback workqueue");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/init.h>
|
||||||
#include <linux/configfs.h>
|
#include <linux/configfs.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/in.h>
|
#include <linux/in.h>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include <linux/pagemap.h>
|
#include <linux/pagemap.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/module.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
* This is the main header file to be included in each DLM source file.
|
* This is the main header file to be included in each DLM source file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include "dlm_internal.h"
|
#include "dlm_internal.h"
|
||||||
#include "lockspace.h"
|
#include "lockspace.h"
|
||||||
#include "member.h"
|
#include "member.h"
|
||||||
|
|
|
@ -519,29 +519,25 @@ out:
|
||||||
/* Note: sk_callback_lock must be locked before calling this function. */
|
/* Note: sk_callback_lock must be locked before calling this function. */
|
||||||
static void save_callbacks(struct connection *con, struct sock *sk)
|
static void save_callbacks(struct connection *con, struct sock *sk)
|
||||||
{
|
{
|
||||||
lock_sock(sk);
|
|
||||||
con->orig_data_ready = sk->sk_data_ready;
|
con->orig_data_ready = sk->sk_data_ready;
|
||||||
con->orig_state_change = sk->sk_state_change;
|
con->orig_state_change = sk->sk_state_change;
|
||||||
con->orig_write_space = sk->sk_write_space;
|
con->orig_write_space = sk->sk_write_space;
|
||||||
con->orig_error_report = sk->sk_error_report;
|
con->orig_error_report = sk->sk_error_report;
|
||||||
release_sock(sk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void restore_callbacks(struct connection *con, struct sock *sk)
|
static void restore_callbacks(struct connection *con, struct sock *sk)
|
||||||
{
|
{
|
||||||
write_lock_bh(&sk->sk_callback_lock);
|
write_lock_bh(&sk->sk_callback_lock);
|
||||||
lock_sock(sk);
|
|
||||||
sk->sk_user_data = NULL;
|
sk->sk_user_data = NULL;
|
||||||
sk->sk_data_ready = con->orig_data_ready;
|
sk->sk_data_ready = con->orig_data_ready;
|
||||||
sk->sk_state_change = con->orig_state_change;
|
sk->sk_state_change = con->orig_state_change;
|
||||||
sk->sk_write_space = con->orig_write_space;
|
sk->sk_write_space = con->orig_write_space;
|
||||||
sk->sk_error_report = con->orig_error_report;
|
sk->sk_error_report = con->orig_error_report;
|
||||||
release_sock(sk);
|
|
||||||
write_unlock_bh(&sk->sk_callback_lock);
|
write_unlock_bh(&sk->sk_callback_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make a socket active */
|
/* Make a socket active */
|
||||||
static void add_sock(struct socket *sock, struct connection *con)
|
static void add_sock(struct socket *sock, struct connection *con, bool save_cb)
|
||||||
{
|
{
|
||||||
struct sock *sk = sock->sk;
|
struct sock *sk = sock->sk;
|
||||||
|
|
||||||
|
@ -549,7 +545,7 @@ static void add_sock(struct socket *sock, struct connection *con)
|
||||||
con->sock = sock;
|
con->sock = sock;
|
||||||
|
|
||||||
sk->sk_user_data = con;
|
sk->sk_user_data = con;
|
||||||
if (!test_bit(CF_IS_OTHERCON, &con->flags))
|
if (save_cb)
|
||||||
save_callbacks(con, sk);
|
save_callbacks(con, sk);
|
||||||
/* Install a data_ready callback */
|
/* Install a data_ready callback */
|
||||||
sk->sk_data_ready = lowcomms_data_ready;
|
sk->sk_data_ready = lowcomms_data_ready;
|
||||||
|
@ -806,7 +802,7 @@ static int tcp_accept_from_sock(struct connection *con)
|
||||||
newcon->othercon = othercon;
|
newcon->othercon = othercon;
|
||||||
othercon->sock = newsock;
|
othercon->sock = newsock;
|
||||||
newsock->sk->sk_user_data = othercon;
|
newsock->sk->sk_user_data = othercon;
|
||||||
add_sock(newsock, othercon);
|
add_sock(newsock, othercon, false);
|
||||||
addcon = othercon;
|
addcon = othercon;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -819,7 +815,10 @@ static int tcp_accept_from_sock(struct connection *con)
|
||||||
else {
|
else {
|
||||||
newsock->sk->sk_user_data = newcon;
|
newsock->sk->sk_user_data = newcon;
|
||||||
newcon->rx_action = receive_from_sock;
|
newcon->rx_action = receive_from_sock;
|
||||||
add_sock(newsock, newcon);
|
/* accept copies the sk after we've saved the callbacks, so we
|
||||||
|
don't want to save them a second time or comm errors will
|
||||||
|
result in calling sk_error_report recursively. */
|
||||||
|
add_sock(newsock, newcon, false);
|
||||||
addcon = newcon;
|
addcon = newcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -880,7 +879,8 @@ static int sctp_accept_from_sock(struct connection *con)
|
||||||
}
|
}
|
||||||
|
|
||||||
make_sockaddr(&prim.ssp_addr, 0, &addr_len);
|
make_sockaddr(&prim.ssp_addr, 0, &addr_len);
|
||||||
if (addr_to_nodeid(&prim.ssp_addr, &nodeid)) {
|
ret = addr_to_nodeid(&prim.ssp_addr, &nodeid);
|
||||||
|
if (ret) {
|
||||||
unsigned char *b = (unsigned char *)&prim.ssp_addr;
|
unsigned char *b = (unsigned char *)&prim.ssp_addr;
|
||||||
|
|
||||||
log_print("reject connect from unknown addr");
|
log_print("reject connect from unknown addr");
|
||||||
|
@ -919,7 +919,7 @@ static int sctp_accept_from_sock(struct connection *con)
|
||||||
newcon->othercon = othercon;
|
newcon->othercon = othercon;
|
||||||
othercon->sock = newsock;
|
othercon->sock = newsock;
|
||||||
newsock->sk->sk_user_data = othercon;
|
newsock->sk->sk_user_data = othercon;
|
||||||
add_sock(newsock, othercon);
|
add_sock(newsock, othercon, false);
|
||||||
addcon = othercon;
|
addcon = othercon;
|
||||||
} else {
|
} else {
|
||||||
printk("Extra connection from node %d attempted\n", nodeid);
|
printk("Extra connection from node %d attempted\n", nodeid);
|
||||||
|
@ -930,7 +930,7 @@ static int sctp_accept_from_sock(struct connection *con)
|
||||||
} else {
|
} else {
|
||||||
newsock->sk->sk_user_data = newcon;
|
newsock->sk->sk_user_data = newcon;
|
||||||
newcon->rx_action = receive_from_sock;
|
newcon->rx_action = receive_from_sock;
|
||||||
add_sock(newsock, newcon);
|
add_sock(newsock, newcon, false);
|
||||||
addcon = newcon;
|
addcon = newcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1058,7 +1058,7 @@ static void sctp_connect_to_sock(struct connection *con)
|
||||||
sock->sk->sk_user_data = con;
|
sock->sk->sk_user_data = con;
|
||||||
con->rx_action = receive_from_sock;
|
con->rx_action = receive_from_sock;
|
||||||
con->connect_action = sctp_connect_to_sock;
|
con->connect_action = sctp_connect_to_sock;
|
||||||
add_sock(sock, con);
|
add_sock(sock, con, true);
|
||||||
|
|
||||||
/* Bind to all addresses. */
|
/* Bind to all addresses. */
|
||||||
if (sctp_bind_addrs(con, 0))
|
if (sctp_bind_addrs(con, 0))
|
||||||
|
@ -1146,7 +1146,7 @@ static void tcp_connect_to_sock(struct connection *con)
|
||||||
sock->sk->sk_user_data = con;
|
sock->sk->sk_user_data = con;
|
||||||
con->rx_action = receive_from_sock;
|
con->rx_action = receive_from_sock;
|
||||||
con->connect_action = tcp_connect_to_sock;
|
con->connect_action = tcp_connect_to_sock;
|
||||||
add_sock(sock, con);
|
add_sock(sock, con, true);
|
||||||
|
|
||||||
/* Bind to our cluster-known address connecting to avoid
|
/* Bind to our cluster-known address connecting to avoid
|
||||||
routing problems */
|
routing problems */
|
||||||
|
@ -1366,7 +1366,7 @@ static int tcp_listen_for_all(void)
|
||||||
|
|
||||||
sock = tcp_create_listen_sock(con, dlm_local_addr[0]);
|
sock = tcp_create_listen_sock(con, dlm_local_addr[0]);
|
||||||
if (sock) {
|
if (sock) {
|
||||||
add_sock(sock, con);
|
add_sock(sock, con, true);
|
||||||
result = 0;
|
result = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include "dlm_internal.h"
|
#include "dlm_internal.h"
|
||||||
#include "lockspace.h"
|
#include "lockspace.h"
|
||||||
#include "lock.h"
|
#include "lock.h"
|
||||||
|
|
|
@ -65,7 +65,7 @@ static int user_cmd(struct sk_buff *skb, struct genl_info *info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct genl_ops dlm_nl_ops[] = {
|
static const struct genl_ops dlm_nl_ops[] = {
|
||||||
{
|
{
|
||||||
.cmd = DLM_CMD_HELLO,
|
.cmd = DLM_CMD_HELLO,
|
||||||
.doit = user_cmd,
|
.doit = user_cmd,
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include <linux/miscdevice.h>
|
#include <linux/miscdevice.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
|
|
Loading…
Reference in New Issue