afs_put_server(call->net, call->cm_server);
                afs_put_cb_interest(call->net, call->cbi);
                kfree(call->request);
-               kfree(call);
  
-               o = atomic_dec_return(&net->nr_outstanding_calls);
                trace_afs_call(call, afs_call_trace_free, 0, o,
                               __builtin_return_address(0));
+               kfree(call);
+ 
+               o = atomic_dec_return(&net->nr_outstanding_calls);
                if (o == 0)
 -                      wake_up_atomic_t(&net->nr_outstanding_calls);
 +                      wake_up_var(&net->nr_outstanding_calls);
        }
  }
  
 
  extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
                          unsigned int flags, struct timespec *timeout);
  extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg,
 -                        unsigned int vlen, unsigned int flags);
 +                        unsigned int vlen, unsigned int flags,
 +                        bool forbid_cmsg_compat);
 +
 +/* helpers which do the actual work for syscalls */
 +extern int __sys_recvfrom(int fd, void __user *ubuf, size_t size,
 +                        unsigned int flags, struct sockaddr __user *addr,
 +                        int __user *addr_len);
 +extern int __sys_sendto(int fd, void __user *buff, size_t len,
 +                      unsigned int flags, struct sockaddr __user *addr,
 +                      int addr_len);
 +extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,
 +                       int __user *upeer_addrlen, int flags);
 +extern int __sys_socket(int family, int type, int protocol);
 +extern int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen);
 +extern int __sys_connect(int fd, struct sockaddr __user *uservaddr,
 +                       int addrlen);
 +extern int __sys_listen(int fd, int backlog);
 +extern int __sys_getsockname(int fd, struct sockaddr __user *usockaddr,
 +                           int __user *usockaddr_len);
 +extern int __sys_getpeername(int fd, struct sockaddr __user *usockaddr,
 +                           int __user *usockaddr_len);
 +extern int __sys_socketpair(int family, int type, int protocol,
 +                          int __user *usockvec);
 +extern int __sys_shutdown(int fd, int how);
  
- 
+ extern struct ns_common *get_net_ns(struct ns_common *ns);
  #endif /* _LINUX_SOCKET_H */
 
        kfree(call->rxtx_buffer);
        kfree(call->rxtx_annotations);
        kmem_cache_free(rxrpc_call_jar, call);
 -              wake_up_atomic_t(&rxnet->nr_calls);
+       if (atomic_dec_and_test(&rxnet->nr_calls))
++              wake_up_var(&rxnet->nr_calls);
  }
  
  /*
        }
  
        write_unlock(&rxnet->call_lock);
 -      wait_on_atomic_t(&rxnet->nr_calls, atomic_t_wait, TASK_UNINTERRUPTIBLE);
+ 
+       atomic_dec(&rxnet->nr_calls);
++      wait_var_event(&rxnet->nr_calls, !atomic_read(&rxnet->nr_calls));
  }
 
        key_put(conn->params.key);
        key_put(conn->server_key);
        rxrpc_put_peer(conn->params.peer);
 -              wake_up_atomic_t(&conn->params.local->rxnet->nr_conns);
+ 
+       if (atomic_dec_and_test(&conn->params.local->rxnet->nr_conns))
++              wake_up_var(&conn->params.local->rxnet->nr_conns);
        rxrpc_put_local(conn->params.local);
  
        kfree(conn);
  
        ASSERT(list_empty(&rxnet->conn_proc_list));
  
 -      wait_on_atomic_t(&rxnet->nr_conns, atomic_t_wait, TASK_UNINTERRUPTIBLE);
+       /* We need to wait for the connections to be destroyed by RCU as they
+        * pin things that we still need to get rid of.
+        */
++      wait_var_event(&rxnet->nr_conns, !atomic_read(&rxnet->nr_conns));
        _leave("");
  }