* to maintain cache coherency.
         */
        if (call->server) {
-               trace_afs_server(call->server,
+               trace_afs_server(call->server->debug_id,
                                 refcount_read(&call->server->ref),
                                 atomic_read(&call->server->active),
                                 afs_server_trace_callback);
 
        call->iter = &call->def_iter;
 
        o = atomic_inc_return(&net->nr_outstanding_calls);
-       trace_afs_call(call, afs_call_trace_alloc, 1, o,
+       trace_afs_call(call->debug_id, afs_call_trace_alloc, 1, o,
                       __builtin_return_address(0));
        return call;
 }
 void afs_put_call(struct afs_call *call)
 {
        struct afs_net *net = call->net;
+       unsigned int debug_id = call->debug_id;
        bool zero;
        int r, o;
 
        zero = __refcount_dec_and_test(&call->ref, &r);
        o = atomic_read(&net->nr_outstanding_calls);
-       trace_afs_call(call, afs_call_trace_put, r - 1, o,
+       trace_afs_call(debug_id, afs_call_trace_put, r - 1, o,
                       __builtin_return_address(0));
 
        if (zero) {
                afs_put_addrlist(call->alist);
                kfree(call->request);
 
-               trace_afs_call(call, afs_call_trace_free, 0, o,
+               trace_afs_call(call->debug_id, afs_call_trace_free, 0, o,
                               __builtin_return_address(0));
                kfree(call);
 
 
        __refcount_inc(&call->ref, &r);
 
-       trace_afs_call(call, why, r + 1,
+       trace_afs_call(call->debug_id, why, r + 1,
                       atomic_read(&call->net->nr_outstanding_calls),
                       __builtin_return_address(0));
        return call;
        call->need_attention = true;
 
        if (__refcount_inc_not_zero(&call->ref, &r)) {
-               trace_afs_call(call, afs_call_trace_wake, r + 1,
+               trace_afs_call(call->debug_id, afs_call_trace_wake, r + 1,
                               atomic_read(&call->net->nr_outstanding_calls),
                               __builtin_return_address(0));
 
 
        server->rtt = UINT_MAX;
 
        afs_inc_servers_outstanding(net);
-       trace_afs_server(server, 1, 1, afs_server_trace_alloc);
+       trace_afs_server(server->debug_id, 1, 1, afs_server_trace_alloc);
        _leave(" = %p", server);
        return server;
 
 struct afs_server *afs_get_server(struct afs_server *server,
                                  enum afs_server_trace reason)
 {
+       unsigned int a;
        int r;
 
        __refcount_inc(&server->ref, &r);
-       trace_afs_server(server, r + 1, atomic_read(&server->active), reason);
+       a = atomic_read(&server->active);
+       trace_afs_server(server->debug_id, r + 1, a, reason);
        return server;
 }
 
                return NULL;
 
        a = atomic_inc_return(&server->active);
-       trace_afs_server(server, r + 1, a, reason);
+       trace_afs_server(server->debug_id, r + 1, a, reason);
        return server;
 }
 
        __refcount_inc(&server->ref, &r);
        a = atomic_inc_return(&server->active);
 
-       trace_afs_server(server, r + 1, a, reason);
+       trace_afs_server(server->debug_id, r + 1, a, reason);
        return server;
 }
 
 void afs_put_server(struct afs_net *net, struct afs_server *server,
                    enum afs_server_trace reason)
 {
+       unsigned int a, debug_id = server->debug_id;
        bool zero;
        int r;
 
        if (!server)
                return;
 
+       a = atomic_inc_return(&server->active);
        zero = __refcount_dec_and_test(&server->ref, &r);
-       trace_afs_server(server, r - 1, atomic_read(&server->active), reason);
+       trace_afs_server(debug_id, r - 1, a, reason);
        if (unlikely(zero))
                __afs_put_server(net, server);
 }
 {
        struct afs_server *server = container_of(rcu, struct afs_server, rcu);
 
-       trace_afs_server(server, refcount_read(&server->ref),
+       trace_afs_server(server->debug_id, refcount_read(&server->ref),
                         atomic_read(&server->active), afs_server_trace_free);
        afs_put_addrlist(rcu_access_pointer(server->addresses));
        kfree(server);
 
                active = atomic_read(&server->active);
                if (active == 0) {
-                       trace_afs_server(server, refcount_read(&server->ref),
+                       trace_afs_server(server->debug_id, refcount_read(&server->ref),
                                         active, afs_server_trace_gc);
                        next = rcu_dereference_protected(
                                server->uuid_next, lockdep_is_held(&net->fs_lock.lock));
                _debug("manage %pU %u", &server->uuid, active);
 
                if (purging) {
-                       trace_afs_server(server, refcount_read(&server->ref),
+                       trace_afs_server(server->debug_id, refcount_read(&server->ref),
                                         active, afs_server_trace_purging);
                        if (active != 0)
                                pr_notice("Can't purge s=%08x\n", server->debug_id);
 
        _enter("");
 
-       trace_afs_server(server, refcount_read(&server->ref),
+       trace_afs_server(server->debug_id, refcount_read(&server->ref),
                         atomic_read(&server->active),
                         afs_server_trace_update);
 
 
            );
 
 TRACE_EVENT(afs_call,
-           TP_PROTO(struct afs_call *call, enum afs_call_trace op,
+           TP_PROTO(unsigned int call_debug_id, enum afs_call_trace op,
                     int ref, int outstanding, const void *where),
 
-           TP_ARGS(call, op, ref, outstanding, where),
+           TP_ARGS(call_debug_id, op, ref, outstanding, where),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               call            )
                             ),
 
            TP_fast_assign(
-                   __entry->call = call->debug_id;
+                   __entry->call = call_debug_id;
                    __entry->op = op;
                    __entry->ref = ref;
                    __entry->outstanding = outstanding;
            );
 
 TRACE_EVENT(afs_server,
-           TP_PROTO(struct afs_server *server, int ref, int active,
+           TP_PROTO(unsigned int server_debug_id, int ref, int active,
                     enum afs_server_trace reason),
 
-           TP_ARGS(server, ref, active, reason),
+           TP_ARGS(server_debug_id, ref, active, reason),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               server          )
                             ),
 
            TP_fast_assign(
-                   __entry->server = server->debug_id;
+                   __entry->server = server_debug_id;
                    __entry->ref = ref;
                    __entry->active = active;
                    __entry->reason = reason;