}
 }
 
+static void set_global_id(struct ceph_auth_client *ac, u64 global_id)
+{
+       dout("%s global_id %llu\n", __func__, global_id);
+
+       if (!global_id)
+               pr_err("got zero global_id\n");
+
+       if (ac->global_id && global_id != ac->global_id)
+               pr_err("global_id changed from %llu to %llu\n", ac->global_id,
+                      global_id);
+
+       ac->global_id = global_id;
+}
+
 /*
  * setup, teardown.
  */
 
        payload_end = payload + payload_len;
 
-       if (global_id && ac->global_id != global_id) {
-               dout(" set global_id %lld -> %lld\n", ac->global_id, global_id);
-               ac->global_id = global_id;
-       }
-
        if (ac->negotiating) {
                /* server does not support our protocols? */
                if (!protocol && result < 0) {
 
        ret = ac->ops->handle_reply(ac, result, payload, payload_end,
                                    NULL, NULL, NULL, NULL);
-       if (ret == -EAGAIN)
+       if (ret == -EAGAIN) {
                ret = build_request(ac, true, reply_buf, reply_len);
-       else if (ret)
+               goto out;
+       } else if (ret) {
                pr_err("auth protocol '%s' mauth authentication failed: %d\n",
                       ceph_auth_proto_name(ac->protocol), result);
+               goto out;
+       }
+
+       set_global_id(ac, global_id);
 
 out:
        mutex_unlock(&ac->mutex);
        int ret;
 
        mutex_lock(&ac->mutex);
-       if (global_id && ac->global_id != global_id) {
-               dout("%s global_id %llu -> %llu\n", __func__, ac->global_id,
-                    global_id);
-               ac->global_id = global_id;
-       }
-
        ret = ac->ops->handle_reply(ac, 0, reply, reply + reply_len,
                                    session_key, session_key_len,
                                    con_secret, con_secret_len);
+       if (!ret)
+               set_global_id(ac, global_id);
        mutex_unlock(&ac->mutex);
        return ret;
 }