Re: [ 068/103] SUNRPC: fix races on PipeFS UMOUNT notifications
On Tue, Jul 23, 2013 at 10:30:57PM +, Myklebust, Trond wrote: > On Tue, 2013-07-23 at 15:26 -0700, Greg Kroah-Hartman wrote: > > 3.10-stable review patch. If anyone has any objections, please let me know. > > > > Again, please drop this patch and 67/103 for now. We'll get back to > whether or not this should be stable material later. Ick, sorry, I thought I had dropped all of the patches you told me to already, sorry about this. Now really dropped :) greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[ 068/103] SUNRPC: fix races on PipeFS UMOUNT notifications
3.10-stable review patch. If anyone has any objections, please let me know. -- From: Stanislav Kinsbursky commit adb6fa7ffe9031857ec14b8aab75c9ab65556cbc upstream. CPU#0 CPU#1 - - rpc_kill_sb sn->pipefs_sb = NULLrpc_release_client (UMOUNT_EVENT) rpc_free_auth rpc_pipefs_event rpc_get_client_for_event !atomic_inc_not_zero(cl_count) atomic_inc(cl_count) rpc_free_client rpc_clnt_remove_pipedir To fix this, this patch does the following: 1) Calls RPC_PIPEFS_UMOUNT notification with sn->pipefs_sb_lock being held. 2) Removes SUNRPC client from the list AFTER pipes destroying. 3) Doesn't hold RPC client on notification: if client in the list, then it can't be destroyed while sn->pipefs_sb_lock in hold by notification caller. Signed-off-by: Stanislav Kinsbursky Signed-off-by: Trond Myklebust Signed-off-by: Greg Kroah-Hartman --- net/sunrpc/clnt.c |5 + net/sunrpc/rpc_pipe.c |2 +- 2 files changed, 2 insertions(+), 5 deletions(-) --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -236,8 +236,6 @@ static struct rpc_clnt *rpc_get_client_f continue; if (rpc_clnt_skip_event(clnt, event)) continue; - if (atomic_inc_not_zero(>cl_count) == 0) - continue; spin_unlock(>rpc_client_lock); return clnt; } @@ -254,7 +252,6 @@ static int rpc_pipefs_event(struct notif while ((clnt = rpc_get_client_for_event(sb->s_fs_info, event))) { error = __rpc_pipefs_event(clnt, event, sb); - rpc_release_client(clnt); if (error) break; } @@ -641,8 +638,8 @@ rpc_free_client(struct rpc_clnt *clnt) rcu_dereference(clnt->cl_xprt)->servername); if (clnt->cl_parent != clnt) rpc_release_client(clnt->cl_parent); - rpc_unregister_client(clnt); rpc_clnt_remove_pipedir(clnt); + rpc_unregister_client(clnt); rpc_free_iostats(clnt->cl_metrics); kfree(clnt->cl_principal); clnt->cl_metrics = NULL; --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -1165,12 +1165,12 @@ static void rpc_kill_sb(struct super_blo goto out; } sn->pipefs_sb = NULL; - mutex_unlock(>pipefs_sb_lock); dprintk("RPC: sending pipefs UMOUNT notification for net %p%s\n", net, NET_NAME(net)); blocking_notifier_call_chain(_pipefs_notifier_list, RPC_PIPEFS_UMOUNT, sb); + mutex_unlock(>pipefs_sb_lock); put_net(net); out: kill_litter_super(sb); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [ 068/103] SUNRPC: fix races on PipeFS UMOUNT notifications
On Tue, 2013-07-23 at 15:26 -0700, Greg Kroah-Hartman wrote: > 3.10-stable review patch. If anyone has any objections, please let me know. > Again, please drop this patch and 67/103 for now. We'll get back to whether or not this should be stable material later. -- Trond Myklebust Linux NFS client maintainer NetApp trond.mykleb...@netapp.com www.netapp.com N�r��yb�X��ǧv�^�){.n�+{zX����ܨ}���Ơz�:+v���zZ+��+zf���h���~i���z��w���?�&�)ߢf��^jǫy�m��@A�a��� 0��h���i
Re: [ 068/103] SUNRPC: fix races on PipeFS UMOUNT notifications
On Tue, 2013-07-23 at 15:26 -0700, Greg Kroah-Hartman wrote: 3.10-stable review patch. If anyone has any objections, please let me know. Again, please drop this patch and 67/103 for now. We'll get back to whether or not this should be stable material later. -- Trond Myklebust Linux NFS client maintainer NetApp trond.mykleb...@netapp.com www.netapp.com N�r��yb�X��ǧv�^�){.n�+{zX����ܨ}���Ơz�j:+v���zZ+��+zf���h���~i���z��w���?��)ߢf��^jǫy�m��@A�a��� 0��h���i
[ 068/103] SUNRPC: fix races on PipeFS UMOUNT notifications
3.10-stable review patch. If anyone has any objections, please let me know. -- From: Stanislav Kinsbursky skinsbur...@parallels.com commit adb6fa7ffe9031857ec14b8aab75c9ab65556cbc upstream. CPU#0 CPU#1 - - rpc_kill_sb sn-pipefs_sb = NULLrpc_release_client (UMOUNT_EVENT) rpc_free_auth rpc_pipefs_event rpc_get_client_for_event !atomic_inc_not_zero(cl_count) skip the client atomic_inc(cl_count) rpc_free_client rpc_clnt_remove_pipedir skip client dir removing To fix this, this patch does the following: 1) Calls RPC_PIPEFS_UMOUNT notification with sn-pipefs_sb_lock being held. 2) Removes SUNRPC client from the list AFTER pipes destroying. 3) Doesn't hold RPC client on notification: if client in the list, then it can't be destroyed while sn-pipefs_sb_lock in hold by notification caller. Signed-off-by: Stanislav Kinsbursky skinsbur...@parallels.com Signed-off-by: Trond Myklebust trond.mykleb...@netapp.com Signed-off-by: Greg Kroah-Hartman gre...@linuxfoundation.org --- net/sunrpc/clnt.c |5 + net/sunrpc/rpc_pipe.c |2 +- 2 files changed, 2 insertions(+), 5 deletions(-) --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -236,8 +236,6 @@ static struct rpc_clnt *rpc_get_client_f continue; if (rpc_clnt_skip_event(clnt, event)) continue; - if (atomic_inc_not_zero(clnt-cl_count) == 0) - continue; spin_unlock(sn-rpc_client_lock); return clnt; } @@ -254,7 +252,6 @@ static int rpc_pipefs_event(struct notif while ((clnt = rpc_get_client_for_event(sb-s_fs_info, event))) { error = __rpc_pipefs_event(clnt, event, sb); - rpc_release_client(clnt); if (error) break; } @@ -641,8 +638,8 @@ rpc_free_client(struct rpc_clnt *clnt) rcu_dereference(clnt-cl_xprt)-servername); if (clnt-cl_parent != clnt) rpc_release_client(clnt-cl_parent); - rpc_unregister_client(clnt); rpc_clnt_remove_pipedir(clnt); + rpc_unregister_client(clnt); rpc_free_iostats(clnt-cl_metrics); kfree(clnt-cl_principal); clnt-cl_metrics = NULL; --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -1165,12 +1165,12 @@ static void rpc_kill_sb(struct super_blo goto out; } sn-pipefs_sb = NULL; - mutex_unlock(sn-pipefs_sb_lock); dprintk(RPC: sending pipefs UMOUNT notification for net %p%s\n, net, NET_NAME(net)); blocking_notifier_call_chain(rpc_pipefs_notifier_list, RPC_PIPEFS_UMOUNT, sb); + mutex_unlock(sn-pipefs_sb_lock); put_net(net); out: kill_litter_super(sb); -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [ 068/103] SUNRPC: fix races on PipeFS UMOUNT notifications
On Tue, Jul 23, 2013 at 10:30:57PM +, Myklebust, Trond wrote: On Tue, 2013-07-23 at 15:26 -0700, Greg Kroah-Hartman wrote: 3.10-stable review patch. If anyone has any objections, please let me know. Again, please drop this patch and 67/103 for now. We'll get back to whether or not this should be stable material later. Ick, sorry, I thought I had dropped all of the patches you told me to already, sorry about this. Now really dropped :) greg k-h -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/