Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/intel/e1000e/param.c drivers/net/wireless/iwlwifi/iwl-agn-rx.c drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c drivers/net/wireless/iwlwifi/iwl-trans.h Resolved the iwlwifi conflict with mainline using 3-way diff posted by John Linville and Stephen Rothwell. In 'net' we added a bug fix to make iwlwifi report a more accurate skb->truesize but this conflicted with RX path changes that happened meanwhile in net-next. In e1000e a conflict arose in the validation code for settings of adapter->itr. 'net-next' had more sophisticated logic so that logic was used. Signed-off-by: David S. Miller <davem@davemloft.net>
Šī revīzija ir iekļauta:
@@ -176,16 +176,22 @@ rpc_setup_pipedir(struct rpc_clnt *clnt, const char *dir_name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __rpc_pipefs_event(struct rpc_clnt *clnt, unsigned long event,
|
||||
struct super_block *sb)
|
||||
static inline int rpc_clnt_skip_event(struct rpc_clnt *clnt, unsigned long event)
|
||||
{
|
||||
if (((event == RPC_PIPEFS_MOUNT) && clnt->cl_dentry) ||
|
||||
((event == RPC_PIPEFS_UMOUNT) && !clnt->cl_dentry))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __rpc_clnt_handle_event(struct rpc_clnt *clnt, unsigned long event,
|
||||
struct super_block *sb)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
int err = 0;
|
||||
|
||||
switch (event) {
|
||||
case RPC_PIPEFS_MOUNT:
|
||||
if (clnt->cl_program->pipe_dir_name == NULL)
|
||||
break;
|
||||
dentry = rpc_setup_pipedir_sb(sb, clnt,
|
||||
clnt->cl_program->pipe_dir_name);
|
||||
BUG_ON(dentry == NULL);
|
||||
@@ -208,6 +214,20 @@ static int __rpc_pipefs_event(struct rpc_clnt *clnt, unsigned long event,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __rpc_pipefs_event(struct rpc_clnt *clnt, unsigned long event,
|
||||
struct super_block *sb)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
for (;; clnt = clnt->cl_parent) {
|
||||
if (!rpc_clnt_skip_event(clnt, event))
|
||||
error = __rpc_clnt_handle_event(clnt, event, sb);
|
||||
if (error || clnt == clnt->cl_parent)
|
||||
break;
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
static struct rpc_clnt *rpc_get_client_for_event(struct net *net, int event)
|
||||
{
|
||||
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
@@ -215,10 +235,12 @@ static struct rpc_clnt *rpc_get_client_for_event(struct net *net, int event)
|
||||
|
||||
spin_lock(&sn->rpc_client_lock);
|
||||
list_for_each_entry(clnt, &sn->all_clients, cl_clients) {
|
||||
if (((event == RPC_PIPEFS_MOUNT) && clnt->cl_dentry) ||
|
||||
((event == RPC_PIPEFS_UMOUNT) && !clnt->cl_dentry))
|
||||
if (clnt->cl_program->pipe_dir_name == NULL)
|
||||
break;
|
||||
if (rpc_clnt_skip_event(clnt, event))
|
||||
continue;
|
||||
if (atomic_inc_not_zero(&clnt->cl_count) == 0)
|
||||
continue;
|
||||
atomic_inc(&clnt->cl_count);
|
||||
spin_unlock(&sn->rpc_client_lock);
|
||||
return clnt;
|
||||
}
|
||||
@@ -257,6 +279,14 @@ void rpc_clients_notifier_unregister(void)
|
||||
return rpc_pipefs_notifier_unregister(&rpc_clients_block);
|
||||
}
|
||||
|
||||
static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename)
|
||||
{
|
||||
clnt->cl_nodelen = strlen(nodename);
|
||||
if (clnt->cl_nodelen > UNX_MAXNODENAME)
|
||||
clnt->cl_nodelen = UNX_MAXNODENAME;
|
||||
memcpy(clnt->cl_nodename, nodename, clnt->cl_nodelen);
|
||||
}
|
||||
|
||||
static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, struct rpc_xprt *xprt)
|
||||
{
|
||||
const struct rpc_program *program = args->program;
|
||||
@@ -337,10 +367,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, stru
|
||||
}
|
||||
|
||||
/* save the nodename */
|
||||
clnt->cl_nodelen = strlen(init_utsname()->nodename);
|
||||
if (clnt->cl_nodelen > UNX_MAXNODENAME)
|
||||
clnt->cl_nodelen = UNX_MAXNODENAME;
|
||||
memcpy(clnt->cl_nodename, init_utsname()->nodename, clnt->cl_nodelen);
|
||||
rpc_clnt_set_nodename(clnt, utsname()->nodename);
|
||||
rpc_register_client(clnt);
|
||||
return clnt;
|
||||
|
||||
@@ -499,6 +526,7 @@ rpc_clone_client(struct rpc_clnt *clnt)
|
||||
err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name);
|
||||
if (err != 0)
|
||||
goto out_no_path;
|
||||
rpc_clnt_set_nodename(new, utsname()->nodename);
|
||||
if (new->cl_auth)
|
||||
atomic_inc(&new->cl_auth->au_count);
|
||||
atomic_inc(&clnt->cl_count);
|
||||
|
@@ -1126,19 +1126,20 @@ rpc_fill_super(struct super_block *sb, void *data, int silent)
|
||||
return -ENOMEM;
|
||||
dprintk("RPC: sending pipefs MOUNT notification for net %p%s\n", net,
|
||||
NET_NAME(net));
|
||||
sn->pipefs_sb = sb;
|
||||
err = blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
|
||||
RPC_PIPEFS_MOUNT,
|
||||
sb);
|
||||
if (err)
|
||||
goto err_depopulate;
|
||||
sb->s_fs_info = get_net(net);
|
||||
sn->pipefs_sb = sb;
|
||||
return 0;
|
||||
|
||||
err_depopulate:
|
||||
blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
|
||||
RPC_PIPEFS_UMOUNT,
|
||||
sb);
|
||||
sn->pipefs_sb = NULL;
|
||||
__rpc_depopulate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF);
|
||||
return err;
|
||||
}
|
||||
|
@@ -75,19 +75,20 @@ static struct pernet_operations sunrpc_net_ops = {
|
||||
static int __init
|
||||
init_sunrpc(void)
|
||||
{
|
||||
int err = register_rpc_pipefs();
|
||||
int err = rpc_init_mempool();
|
||||
if (err)
|
||||
goto out;
|
||||
err = rpc_init_mempool();
|
||||
if (err)
|
||||
goto out2;
|
||||
err = rpcauth_init_module();
|
||||
if (err)
|
||||
goto out3;
|
||||
goto out2;
|
||||
|
||||
cache_initialize();
|
||||
|
||||
err = register_pernet_subsys(&sunrpc_net_ops);
|
||||
if (err)
|
||||
goto out3;
|
||||
|
||||
err = register_rpc_pipefs();
|
||||
if (err)
|
||||
goto out4;
|
||||
#ifdef RPC_DEBUG
|
||||
@@ -98,11 +99,11 @@ init_sunrpc(void)
|
||||
return 0;
|
||||
|
||||
out4:
|
||||
rpcauth_remove_module();
|
||||
unregister_pernet_subsys(&sunrpc_net_ops);
|
||||
out3:
|
||||
rpc_destroy_mempool();
|
||||
rpcauth_remove_module();
|
||||
out2:
|
||||
unregister_rpc_pipefs();
|
||||
rpc_destroy_mempool();
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user