libceph, ceph: move mdsmap.h to fs/ceph
[linux-block.git] / fs / ceph / mds_client.c
index 615db141b6c4b54362815910a1ab13c470dffe8c..86c8b68598524fd8266135863d95647673cf00ac 100644 (file)
@@ -411,6 +411,7 @@ static int parse_reply_info_readdir(void **p, void *end,
                                    u64 features)
 {
        struct ceph_mds_reply_info_parsed *info = &req->r_reply_info;
+       struct ceph_client *cl = req->r_mdsc->fsc->client;
        u32 num, i = 0;
        int err;
 
@@ -433,7 +434,7 @@ static int parse_reply_info_readdir(void **p, void *end,
        BUG_ON(!info->dir_entries);
        if ((unsigned long)(info->dir_entries + num) >
            (unsigned long)info->dir_entries + info->dir_buf_size) {
-               pr_err("dir contents are larger than expected\n");
+               pr_err_client(cl, "dir contents are larger than expected\n");
                WARN_ON(1);
                goto bad;
        }
@@ -454,7 +455,7 @@ static int parse_reply_info_readdir(void **p, void *end,
                ceph_decode_need(p, end, _name_len, bad);
                _name = *p;
                *p += _name_len;
-               dout("parsed dir dname '%.*s'\n", _name_len, _name);
+               doutc(cl, "parsed dir dname '%.*s'\n", _name_len, _name);
 
                if (info->hash_order)
                        rde->raw_hash = ceph_str_hash(ci->i_dir_layout.dl_dir_hash,
@@ -514,8 +515,8 @@ static int parse_reply_info_readdir(void **p, void *end,
                rde->is_nokey = false;
                err = ceph_fname_to_usr(&fname, &tname, &oname, &rde->is_nokey);
                if (err) {
-                       pr_err("%s unable to decode %.*s, got %d\n", __func__,
-                              _name_len, _name, err);
+                       pr_err_client(cl, "unable to decode %.*s, got %d\n",
+                                     _name_len, _name, err);
                        goto out_bad;
                }
                rde->name = oname.name;
@@ -539,7 +540,7 @@ done:
 bad:
        err = -EIO;
 out_bad:
-       pr_err("problem parsing dir contents %d\n", err);
+       pr_err_client(cl, "problem parsing dir contents %d\n", err);
        return err;
 }
 
@@ -570,10 +571,11 @@ bad:
 static int ceph_parse_deleg_inos(void **p, void *end,
                                 struct ceph_mds_session *s)
 {
+       struct ceph_client *cl = s->s_mdsc->fsc->client;
        u32 sets;
 
        ceph_decode_32_safe(p, end, sets, bad);
-       dout("got %u sets of delegated inodes\n", sets);
+       doutc(cl, "got %u sets of delegated inodes\n", sets);
        while (sets--) {
                u64 start, len;
 
@@ -582,8 +584,9 @@ static int ceph_parse_deleg_inos(void **p, void *end,
 
                /* Don't accept a delegation of system inodes */
                if (start < CEPH_INO_SYSTEM_BASE) {
-                       pr_warn_ratelimited("ceph: ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n",
-                                       start, len);
+                       pr_warn_ratelimited_client(cl,
+                               "ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n",
+                               start, len);
                        continue;
                }
                while (len--) {
@@ -591,10 +594,10 @@ static int ceph_parse_deleg_inos(void **p, void *end,
                                            DELEGATED_INO_AVAILABLE,
                                            GFP_KERNEL);
                        if (!err) {
-                               dout("added delegated inode 0x%llx\n",
-                                    start - 1);
+                               doutc(cl, "added delegated inode 0x%llx\n", start - 1);
                        } else if (err == -EBUSY) {
-                               pr_warn("MDS delegated inode 0x%llx more than once.\n",
+                               pr_warn_client(cl,
+                                       "MDS delegated inode 0x%llx more than once.\n",
                                        start - 1);
                        } else {
                                return err;
@@ -744,6 +747,7 @@ static int parse_reply_info(struct ceph_mds_session *s, struct ceph_msg *msg,
                            struct ceph_mds_request *req, u64 features)
 {
        struct ceph_mds_reply_info_parsed *info = &req->r_reply_info;
+       struct ceph_client *cl = s->s_mdsc->fsc->client;
        void *p, *end;
        u32 len;
        int err;
@@ -783,7 +787,7 @@ static int parse_reply_info(struct ceph_mds_session *s, struct ceph_msg *msg,
 bad:
        err = -EIO;
 out_bad:
-       pr_err("mds parse_reply err %d\n", err);
+       pr_err_client(cl, "mds parse_reply err %d\n", err);
        ceph_msg_dump(msg);
        return err;
 }
@@ -830,7 +834,8 @@ static void destroy_reply_info(struct ceph_mds_reply_info_parsed *info)
  */
 int ceph_wait_on_conflict_unlink(struct dentry *dentry)
 {
-       struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
+       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
+       struct ceph_client *cl = fsc->client;
        struct dentry *pdentry = dentry->d_parent;
        struct dentry *udentry, *found = NULL;
        struct ceph_dentry_info *di;
@@ -855,14 +860,14 @@ int ceph_wait_on_conflict_unlink(struct dentry *dentry)
                        goto next;
 
                if (!test_bit(CEPH_DENTRY_ASYNC_UNLINK_BIT, &di->flags))
-                       pr_warn("%s dentry %p:%pd async unlink bit is not set\n",
-                               __func__, dentry, dentry);
+                       pr_warn_client(cl, "dentry %p:%pd async unlink bit is not set\n",
+                                      dentry, dentry);
 
                if (!d_same_name(udentry, pdentry, &dname))
                        goto next;
 
+               found = dget_dlock(udentry);
                spin_unlock(&udentry->d_lock);
-               found = dget(udentry);
                break;
 next:
                spin_unlock(&udentry->d_lock);
@@ -872,8 +877,8 @@ next:
        if (likely(!found))
                return 0;
 
-       dout("%s dentry %p:%pd conflict with old %p:%pd\n", __func__,
-            dentry, dentry, found, found);
+       doutc(cl, "dentry %p:%pd conflict with old %p:%pd\n", dentry, dentry,
+             found, found);
 
        err = wait_on_bit(&di->flags, CEPH_DENTRY_ASYNC_UNLINK_BIT,
                          TASK_KILLABLE);
@@ -957,6 +962,7 @@ static int __verify_registered_session(struct ceph_mds_client *mdsc,
 static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
                                                 int mds)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_session *s;
 
        if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_FENCE_IO)
@@ -973,7 +979,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
                int newmax = 1 << get_count_order(mds + 1);
                struct ceph_mds_session **sa;
 
-               dout("%s: realloc to %d\n", __func__, newmax);
+               doutc(cl, "realloc to %d\n", newmax);
                sa = kcalloc(newmax, sizeof(void *), GFP_NOFS);
                if (!sa)
                        goto fail_realloc;
@@ -986,7 +992,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
                mdsc->max_sessions = newmax;
        }
 
-       dout("%s: mds%d\n", __func__, mds);
+       doutc(cl, "mds%d\n", mds);
        s->s_mdsc = mdsc;
        s->s_mds = mds;
        s->s_state = CEPH_MDS_SESSION_NEW;
@@ -1029,7 +1035,7 @@ fail_realloc:
 static void __unregister_session(struct ceph_mds_client *mdsc,
                               struct ceph_mds_session *s)
 {
-       dout("__unregister_session mds%d %p\n", s->s_mds, s);
+       doutc(mdsc->fsc->client, "mds%d %p\n", s->s_mds, s);
        BUG_ON(mdsc->sessions[s->s_mds] != s);
        mdsc->sessions[s->s_mds] = NULL;
        ceph_con_close(&s->s_con);
@@ -1155,6 +1161,7 @@ static void __register_request(struct ceph_mds_client *mdsc,
                               struct ceph_mds_request *req,
                               struct inode *dir)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int ret = 0;
 
        req->r_tid = ++mdsc->last_tid;
@@ -1162,14 +1169,14 @@ static void __register_request(struct ceph_mds_client *mdsc,
                ret = ceph_reserve_caps(mdsc, &req->r_caps_reservation,
                                        req->r_num_caps);
                if (ret < 0) {
-                       pr_err("__register_request %p "
-                              "failed to reserve caps: %d\n", req, ret);
+                       pr_err_client(cl, "%p failed to reserve caps: %d\n",
+                                     req, ret);
                        /* set req->r_err to fail early from __do_request */
                        req->r_err = ret;
                        return;
                }
        }
-       dout("__register_request %p tid %lld\n", req, req->r_tid);
+       doutc(cl, "%p tid %lld\n", req, req->r_tid);
        ceph_mdsc_get_request(req);
        insert_request(&mdsc->request_tree, req);
 
@@ -1192,7 +1199,7 @@ static void __register_request(struct ceph_mds_client *mdsc,
 static void __unregister_request(struct ceph_mds_client *mdsc,
                                 struct ceph_mds_request *req)
 {
-       dout("__unregister_request %p tid %lld\n", req, req->r_tid);
+       doutc(mdsc->fsc->client, "%p tid %lld\n", req, req->r_tid);
 
        /* Never leave an unregistered request on an unsafe list! */
        list_del_init(&req->r_unsafe_item);
@@ -1278,6 +1285,7 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
        int mds = -1;
        u32 hash = req->r_direct_hash;
        bool is_hash = test_bit(CEPH_MDS_R_DIRECT_IS_HASH, &req->r_req_flags);
+       struct ceph_client *cl = mdsc->fsc->client;
 
        if (random)
                *random = false;
@@ -1289,8 +1297,7 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
        if (req->r_resend_mds >= 0 &&
            (__have_session(mdsc, req->r_resend_mds) ||
             ceph_mdsmap_get_state(mdsc->mdsmap, req->r_resend_mds) > 0)) {
-               dout("%s using resend_mds mds%d\n", __func__,
-                    req->r_resend_mds);
+               doutc(cl, "using resend_mds mds%d\n", req->r_resend_mds);
                return req->r_resend_mds;
        }
 
@@ -1307,7 +1314,8 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                        rcu_read_lock();
                        inode = get_nonsnap_parent(req->r_dentry);
                        rcu_read_unlock();
-                       dout("%s using snapdir's parent %p\n", __func__, inode);
+                       doutc(cl, "using snapdir's parent %p %llx.%llx\n",
+                             inode, ceph_vinop(inode));
                }
        } else if (req->r_dentry) {
                /* ignore race with rename; old or new d_parent is okay */
@@ -1327,7 +1335,8 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                        /* direct snapped/virtual snapdir requests
                         * based on parent dir inode */
                        inode = get_nonsnap_parent(parent);
-                       dout("%s using nonsnap parent %p\n", __func__, inode);
+                       doutc(cl, "using nonsnap parent %p %llx.%llx\n",
+                             inode, ceph_vinop(inode));
                } else {
                        /* dentry target */
                        inode = d_inode(req->r_dentry);
@@ -1343,10 +1352,11 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                rcu_read_unlock();
        }
 
-       dout("%s %p is_hash=%d (0x%x) mode %d\n", __func__, inode, (int)is_hash,
-            hash, mode);
        if (!inode)
                goto random;
+
+       doutc(cl, "%p %llx.%llx is_hash=%d (0x%x) mode %d\n", inode,
+             ceph_vinop(inode), (int)is_hash, hash, mode);
        ci = ceph_inode(inode);
 
        if (is_hash && S_ISDIR(inode->i_mode)) {
@@ -1362,9 +1372,9 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                                get_random_bytes(&r, 1);
                                r %= frag.ndist;
                                mds = frag.dist[r];
-                               dout("%s %p %llx.%llx frag %u mds%d (%d/%d)\n",
-                                    __func__, inode, ceph_vinop(inode),
-                                    frag.frag, mds, (int)r, frag.ndist);
+                               doutc(cl, "%p %llx.%llx frag %u mds%d (%d/%d)\n",
+                                     inode, ceph_vinop(inode), frag.frag,
+                                     mds, (int)r, frag.ndist);
                                if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >=
                                    CEPH_MDS_STATE_ACTIVE &&
                                    !ceph_mdsmap_is_laggy(mdsc->mdsmap, mds))
@@ -1377,9 +1387,8 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                        if (frag.mds >= 0) {
                                /* choose auth mds */
                                mds = frag.mds;
-                               dout("%s %p %llx.%llx frag %u mds%d (auth)\n",
-                                    __func__, inode, ceph_vinop(inode),
-                                    frag.frag, mds);
+                               doutc(cl, "%p %llx.%llx frag %u mds%d (auth)\n",
+                                     inode, ceph_vinop(inode), frag.frag, mds);
                                if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >=
                                    CEPH_MDS_STATE_ACTIVE) {
                                        if (!ceph_mdsmap_is_laggy(mdsc->mdsmap,
@@ -1403,9 +1412,9 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                goto random;
        }
        mds = cap->session->s_mds;
-       dout("%s %p %llx.%llx mds%d (%scap %p)\n", __func__,
-            inode, ceph_vinop(inode), mds,
-            cap == ci->i_auth_cap ? "auth " : "", cap);
+       doutc(cl, "%p %llx.%llx mds%d (%scap %p)\n", inode,
+             ceph_vinop(inode), mds,
+             cap == ci->i_auth_cap ? "auth " : "", cap);
        spin_unlock(&ci->i_ceph_lock);
 out:
        iput(inode);
@@ -1416,7 +1425,7 @@ random:
                *random = true;
 
        mds = ceph_mdsmap_get_random_mds(mdsc->mdsmap);
-       dout("%s chose random mds%d\n", __func__, mds);
+       doutc(cl, "chose random mds%d\n", mds);
        return mds;
 }
 
@@ -1529,6 +1538,7 @@ static struct ceph_msg *create_session_open_msg(struct ceph_mds_client *mdsc, u6
        int metadata_key_count = 0;
        struct ceph_options *opt = mdsc->fsc->client->options;
        struct ceph_mount_options *fsopt = mdsc->fsc->mount_options;
+       struct ceph_client *cl = mdsc->fsc->client;
        size_t size, count;
        void *p, *end;
        int ret;
@@ -1567,7 +1577,7 @@ static struct ceph_msg *create_session_open_msg(struct ceph_mds_client *mdsc, u6
        msg = ceph_msg_new(CEPH_MSG_CLIENT_SESSION, sizeof(*h) + extra_bytes,
                           GFP_NOFS, false);
        if (!msg) {
-               pr_err("ENOMEM creating session open msg\n");
+               pr_err_client(cl, "ENOMEM creating session open msg\n");
                return ERR_PTR(-ENOMEM);
        }
        p = msg->front.iov_base;
@@ -1607,14 +1617,14 @@ static struct ceph_msg *create_session_open_msg(struct ceph_mds_client *mdsc, u6
 
        ret = encode_supported_features(&p, end);
        if (ret) {
-               pr_err("encode_supported_features failed!\n");
+               pr_err_client(cl, "encode_supported_features failed!\n");
                ceph_msg_put(msg);
                return ERR_PTR(ret);
        }
 
        ret = encode_metric_spec(&p, end);
        if (ret) {
-               pr_err("encode_metric_spec failed!\n");
+               pr_err_client(cl, "encode_metric_spec failed!\n");
                ceph_msg_put(msg);
                return ERR_PTR(ret);
        }
@@ -1642,8 +1652,8 @@ static int __open_session(struct ceph_mds_client *mdsc,
 
        /* wait for mds to go active? */
        mstate = ceph_mdsmap_get_state(mdsc->mdsmap, mds);
-       dout("open_session to mds%d (%s)\n", mds,
-            ceph_mds_state_name(mstate));
+       doutc(mdsc->fsc->client, "open_session to mds%d (%s)\n", mds,
+             ceph_mds_state_name(mstate));
        session->s_state = CEPH_MDS_SESSION_OPENING;
        session->s_renew_requested = jiffies;
 
@@ -1686,8 +1696,9 @@ struct ceph_mds_session *
 ceph_mdsc_open_export_target_session(struct ceph_mds_client *mdsc, int target)
 {
        struct ceph_mds_session *session;
+       struct ceph_client *cl = mdsc->fsc->client;
 
-       dout("open_export_target_session to mds%d\n", target);
+       doutc(cl, "to mds%d\n", target);
 
        mutex_lock(&mdsc->mutex);
        session = __open_export_target_session(mdsc, target);
@@ -1702,13 +1713,14 @@ static void __open_export_target_sessions(struct ceph_mds_client *mdsc,
        struct ceph_mds_info *mi;
        struct ceph_mds_session *ts;
        int i, mds = session->s_mds;
+       struct ceph_client *cl = mdsc->fsc->client;
 
        if (mds >= mdsc->mdsmap->possible_max_rank)
                return;
 
        mi = &mdsc->mdsmap->m_info[mds];
-       dout("open_export_target_sessions for mds%d (%d targets)\n",
-            session->s_mds, mi->num_export_targets);
+       doutc(cl, "for mds%d (%d targets)\n", session->s_mds,
+             mi->num_export_targets);
 
        for (i = 0; i < mi->num_export_targets; i++) {
                ts = __open_export_target_session(mdsc, mi->export_targets[i]);
@@ -1731,11 +1743,13 @@ void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc,
 static void detach_cap_releases(struct ceph_mds_session *session,
                                struct list_head *target)
 {
+       struct ceph_client *cl = session->s_mdsc->fsc->client;
+
        lockdep_assert_held(&session->s_cap_lock);
 
        list_splice_init(&session->s_cap_releases, target);
        session->s_num_cap_releases = 0;
-       dout("dispose_cap_releases mds%d\n", session->s_mds);
+       doutc(cl, "mds%d\n", session->s_mds);
 }
 
 static void dispose_cap_releases(struct ceph_mds_client *mdsc,
@@ -1753,16 +1767,17 @@ static void dispose_cap_releases(struct ceph_mds_client *mdsc,
 static void cleanup_session_requests(struct ceph_mds_client *mdsc,
                                     struct ceph_mds_session *session)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request *req;
        struct rb_node *p;
 
-       dout("cleanup_session_requests mds%d\n", session->s_mds);
+       doutc(cl, "mds%d\n", session->s_mds);
        mutex_lock(&mdsc->mutex);
        while (!list_empty(&session->s_unsafe)) {
                req = list_first_entry(&session->s_unsafe,
                                       struct ceph_mds_request, r_unsafe_item);
-               pr_warn_ratelimited(" dropping unsafe request %llu\n",
-                                   req->r_tid);
+               pr_warn_ratelimited_client(cl, " dropping unsafe request %llu\n",
+                                          req->r_tid);
                if (req->r_target_inode)
                        mapping_set_error(req->r_target_inode->i_mapping, -EIO);
                if (req->r_unsafe_dir)
@@ -1791,13 +1806,14 @@ int ceph_iterate_session_caps(struct ceph_mds_session *session,
                              int (*cb)(struct inode *, int mds, void *),
                              void *arg)
 {
+       struct ceph_client *cl = session->s_mdsc->fsc->client;
        struct list_head *p;
        struct ceph_cap *cap;
        struct inode *inode, *last_inode = NULL;
        struct ceph_cap *old_cap = NULL;
        int ret;
 
-       dout("iterate_session_caps %p mds%d\n", session, session->s_mds);
+       doutc(cl, "%p mds%d\n", session, session->s_mds);
        spin_lock(&session->s_cap_lock);
        p = session->s_caps.next;
        while (p != &session->s_caps) {
@@ -1828,8 +1844,7 @@ int ceph_iterate_session_caps(struct ceph_mds_session *session,
                spin_lock(&session->s_cap_lock);
                p = p->next;
                if (!cap->ci) {
-                       dout("iterate_session_caps  finishing cap %p removal\n",
-                            cap);
+                       doutc(cl, "finishing cap %p removal\n", cap);
                        BUG_ON(cap->session != session);
                        cap->session = NULL;
                        list_del_init(&cap->session_caps);
@@ -1858,6 +1873,7 @@ out:
 static int remove_session_caps_cb(struct inode *inode, int mds, void *arg)
 {
        struct ceph_inode_info *ci = ceph_inode(inode);
+       struct ceph_client *cl = ceph_inode_to_client(inode);
        bool invalidate = false;
        struct ceph_cap *cap;
        int iputs = 0;
@@ -1865,8 +1881,8 @@ static int remove_session_caps_cb(struct inode *inode, int mds, void *arg)
        spin_lock(&ci->i_ceph_lock);
        cap = __get_cap_for_mds(ci, mds);
        if (cap) {
-               dout(" removing cap %p, ci is %p, inode is %p\n",
-                    cap, ci, &ci->netfs.inode);
+               doutc(cl, " removing cap %p, ci is %p, inode is %p\n",
+                     cap, ci, &ci->netfs.inode);
 
                iputs = ceph_purge_inode_cap(inode, cap, &invalidate);
        }
@@ -1890,7 +1906,7 @@ static void remove_session_caps(struct ceph_mds_session *session)
        struct super_block *sb = fsc->sb;
        LIST_HEAD(dispose);
 
-       dout("remove_session_caps on %p\n", session);
+       doutc(fsc->client, "on %p\n", session);
        ceph_iterate_session_caps(session, remove_session_caps_cb, fsc);
 
        wake_up_all(&fsc->mdsc->cap_flushing_wq);
@@ -1971,7 +1987,9 @@ static int wake_up_session_cb(struct inode *inode, int mds, void *arg)
 
 static void wake_up_session_caps(struct ceph_mds_session *session, int ev)
 {
-       dout("wake_up_session_caps %p mds%d\n", session, session->s_mds);
+       struct ceph_client *cl = session->s_mdsc->fsc->client;
+
+       doutc(cl, "session %p mds%d\n", session, session->s_mds);
        ceph_iterate_session_caps(session, wake_up_session_cb,
                                  (void *)(unsigned long)ev);
 }
@@ -1985,25 +2003,26 @@ static void wake_up_session_caps(struct ceph_mds_session *session, int ev)
 static int send_renew_caps(struct ceph_mds_client *mdsc,
                           struct ceph_mds_session *session)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_msg *msg;
        int state;
 
        if (time_after_eq(jiffies, session->s_cap_ttl) &&
            time_after_eq(session->s_cap_ttl, session->s_renew_requested))
-               pr_info("mds%d caps stale\n", session->s_mds);
+               pr_info_client(cl, "mds%d caps stale\n", session->s_mds);
        session->s_renew_requested = jiffies;
 
        /* do not try to renew caps until a recovering mds has reconnected
         * with its clients. */
        state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds);
        if (state < CEPH_MDS_STATE_RECONNECT) {
-               dout("send_renew_caps ignoring mds%d (%s)\n",
-                    session->s_mds, ceph_mds_state_name(state));
+               doutc(cl, "ignoring mds%d (%s)\n", session->s_mds,
+                     ceph_mds_state_name(state));
                return 0;
        }
 
-       dout("send_renew_caps to mds%d (%s)\n", session->s_mds,
-               ceph_mds_state_name(state));
+       doutc(cl, "to mds%d (%s)\n", session->s_mds,
+             ceph_mds_state_name(state));
        msg = ceph_create_session_msg(CEPH_SESSION_REQUEST_RENEWCAPS,
                                      ++session->s_renew_seq);
        if (!msg)
@@ -2015,10 +2034,11 @@ static int send_renew_caps(struct ceph_mds_client *mdsc,
 static int send_flushmsg_ack(struct ceph_mds_client *mdsc,
                             struct ceph_mds_session *session, u64 seq)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_msg *msg;
 
-       dout("send_flushmsg_ack to mds%d (%s)s seq %lld\n",
-            session->s_mds, ceph_session_state_name(session->s_state), seq);
+       doutc(cl, "to mds%d (%s)s seq %lld\n", session->s_mds,
+             ceph_session_state_name(session->s_state), seq);
        msg = ceph_create_session_msg(CEPH_SESSION_FLUSHMSG_ACK, seq);
        if (!msg)
                return -ENOMEM;
@@ -2035,6 +2055,7 @@ static int send_flushmsg_ack(struct ceph_mds_client *mdsc,
 static void renewed_caps(struct ceph_mds_client *mdsc,
                         struct ceph_mds_session *session, int is_renew)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int was_stale;
        int wake = 0;
 
@@ -2046,15 +2067,17 @@ static void renewed_caps(struct ceph_mds_client *mdsc,
 
        if (was_stale) {
                if (time_before(jiffies, session->s_cap_ttl)) {
-                       pr_info("mds%d caps renewed\n", session->s_mds);
+                       pr_info_client(cl, "mds%d caps renewed\n",
+                                      session->s_mds);
                        wake = 1;
                } else {
-                       pr_info("mds%d caps still stale\n", session->s_mds);
+                       pr_info_client(cl, "mds%d caps still stale\n",
+                                      session->s_mds);
                }
        }
-       dout("renewed_caps mds%d ttl now %lu, was %s, now %s\n",
-            session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh",
-            time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh");
+       doutc(cl, "mds%d ttl now %lu, was %s, now %s\n", session->s_mds,
+             session->s_cap_ttl, was_stale ? "stale" : "fresh",
+             time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh");
        spin_unlock(&session->s_cap_lock);
 
        if (wake)
@@ -2066,11 +2089,11 @@ static void renewed_caps(struct ceph_mds_client *mdsc,
  */
 static int request_close_session(struct ceph_mds_session *session)
 {
+       struct ceph_client *cl = session->s_mdsc->fsc->client;
        struct ceph_msg *msg;
 
-       dout("request_close_session mds%d state %s seq %lld\n",
-            session->s_mds, ceph_session_state_name(session->s_state),
-            session->s_seq);
+       doutc(cl, "mds%d state %s seq %lld\n", session->s_mds,
+             ceph_session_state_name(session->s_state), session->s_seq);
        msg = ceph_create_session_msg(CEPH_SESSION_REQUEST_CLOSE,
                                      session->s_seq);
        if (!msg)
@@ -2126,6 +2149,8 @@ out:
  */
 static int trim_caps_cb(struct inode *inode, int mds, void *arg)
 {
+       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
+       struct ceph_client *cl = mdsc->fsc->client;
        int *remaining = arg;
        struct ceph_inode_info *ci = ceph_inode(inode);
        int used, wanted, oissued, mine;
@@ -2145,9 +2170,10 @@ static int trim_caps_cb(struct inode *inode, int mds, void *arg)
        wanted = __ceph_caps_file_wanted(ci);
        oissued = __ceph_caps_issued_other(ci, cap);
 
-       dout("trim_caps_cb %p cap %p mine %s oissued %s used %s wanted %s\n",
-            inode, cap, ceph_cap_string(mine), ceph_cap_string(oissued),
-            ceph_cap_string(used), ceph_cap_string(wanted));
+       doutc(cl, "%p %llx.%llx cap %p mine %s oissued %s used %s wanted %s\n",
+             inode, ceph_vinop(inode), cap, ceph_cap_string(mine),
+             ceph_cap_string(oissued), ceph_cap_string(used),
+             ceph_cap_string(wanted));
        if (cap == ci->i_auth_cap) {
                if (ci->i_dirty_caps || ci->i_flushing_caps ||
                    !list_empty(&ci->i_cap_snaps))
@@ -2173,7 +2199,7 @@ static int trim_caps_cb(struct inode *inode, int mds, void *arg)
 
        if (oissued) {
                /* we aren't the only cap.. just remove us */
-               ceph_remove_cap(cap, true);
+               ceph_remove_cap(mdsc, cap, true);
                (*remaining)--;
        } else {
                struct dentry *dentry;
@@ -2187,8 +2213,8 @@ static int trim_caps_cb(struct inode *inode, int mds, void *arg)
                        count = atomic_read(&inode->i_count);
                        if (count == 1)
                                (*remaining)--;
-                       dout("trim_caps_cb %p cap %p pruned, count now %d\n",
-                            inode, cap, count);
+                       doutc(cl, "%p %llx.%llx cap %p pruned, count now %d\n",
+                             inode, ceph_vinop(inode), cap, count);
                } else {
                        dput(dentry);
                }
@@ -2207,17 +2233,18 @@ int ceph_trim_caps(struct ceph_mds_client *mdsc,
                   struct ceph_mds_session *session,
                   int max_caps)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int trim_caps = session->s_nr_caps - max_caps;
 
-       dout("trim_caps mds%d start: %d / %d, trim %d\n",
-            session->s_mds, session->s_nr_caps, max_caps, trim_caps);
+       doutc(cl, "mds%d start: %d / %d, trim %d\n", session->s_mds,
+             session->s_nr_caps, max_caps, trim_caps);
        if (trim_caps > 0) {
                int remaining = trim_caps;
 
                ceph_iterate_session_caps(session, trim_caps_cb, &remaining);
-               dout("trim_caps mds%d done: %d / %d, trimmed %d\n",
-                    session->s_mds, session->s_nr_caps, max_caps,
-                       trim_caps - remaining);
+               doutc(cl, "mds%d done: %d / %d, trimmed %d\n",
+                     session->s_mds, session->s_nr_caps, max_caps,
+                     trim_caps - remaining);
        }
 
        ceph_flush_cap_releases(mdsc, session);
@@ -2227,6 +2254,7 @@ int ceph_trim_caps(struct ceph_mds_client *mdsc,
 static int check_caps_flush(struct ceph_mds_client *mdsc,
                            u64 want_flush_tid)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int ret = 1;
 
        spin_lock(&mdsc->cap_dirty_lock);
@@ -2235,8 +2263,8 @@ static int check_caps_flush(struct ceph_mds_client *mdsc,
                        list_first_entry(&mdsc->cap_flush_list,
                                         struct ceph_cap_flush, g_list);
                if (cf->tid <= want_flush_tid) {
-                       dout("check_caps_flush still flushing tid "
-                            "%llu <= %llu\n", cf->tid, want_flush_tid);
+                       doutc(cl, "still flushing tid %llu <= %llu\n",
+                             cf->tid, want_flush_tid);
                        ret = 0;
                }
        }
@@ -2252,12 +2280,14 @@ static int check_caps_flush(struct ceph_mds_client *mdsc,
 static void wait_caps_flush(struct ceph_mds_client *mdsc,
                            u64 want_flush_tid)
 {
-       dout("check_caps_flush want %llu\n", want_flush_tid);
+       struct ceph_client *cl = mdsc->fsc->client;
+
+       doutc(cl, "want %llu\n", want_flush_tid);
 
        wait_event(mdsc->cap_flushing_wq,
                   check_caps_flush(mdsc, want_flush_tid));
 
-       dout("check_caps_flush ok, flushed thru %llu\n", want_flush_tid);
+       doutc(cl, "ok, flushed thru %llu\n", want_flush_tid);
 }
 
 /*
@@ -2266,6 +2296,7 @@ static void wait_caps_flush(struct ceph_mds_client *mdsc,
 static void ceph_send_cap_releases(struct ceph_mds_client *mdsc,
                                   struct ceph_mds_session *session)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_msg *msg = NULL;
        struct ceph_mds_cap_release *head;
        struct ceph_mds_cap_item *item;
@@ -2324,7 +2355,7 @@ again:
                        msg->front.iov_len += sizeof(*cap_barrier);
 
                        msg->hdr.front_len = cpu_to_le32(msg->front.iov_len);
-                       dout("send_cap_releases mds%d %p\n", session->s_mds, msg);
+                       doutc(cl, "mds%d %p\n", session->s_mds, msg);
                        ceph_con_send(&session->s_con, msg);
                        msg = NULL;
                }
@@ -2344,13 +2375,13 @@ again:
                msg->front.iov_len += sizeof(*cap_barrier);
 
                msg->hdr.front_len = cpu_to_le32(msg->front.iov_len);
-               dout("send_cap_releases mds%d %p\n", session->s_mds, msg);
+               doutc(cl, "mds%d %p\n", session->s_mds, msg);
                ceph_con_send(&session->s_con, msg);
        }
        return;
 out_err:
-       pr_err("send_cap_releases mds%d, failed to allocate message\n",
-               session->s_mds);
+       pr_err_client(cl, "mds%d, failed to allocate message\n",
+                     session->s_mds);
        spin_lock(&session->s_cap_lock);
        list_splice(&tmp_list, &session->s_cap_releases);
        session->s_num_cap_releases += num_cap_releases;
@@ -2373,16 +2404,17 @@ static void ceph_cap_release_work(struct work_struct *work)
 void ceph_flush_cap_releases(struct ceph_mds_client *mdsc,
                             struct ceph_mds_session *session)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        if (mdsc->stopping)
                return;
 
        ceph_get_mds_session(session);
        if (queue_work(mdsc->fsc->cap_wq,
                       &session->s_cap_release_work)) {
-               dout("cap release work queued\n");
+               doutc(cl, "cap release work queued\n");
        } else {
                ceph_put_mds_session(session);
-               dout("failed to queue cap release work\n");
+               doutc(cl, "failed to queue cap release work\n");
        }
 }
 
@@ -2410,13 +2442,14 @@ static void ceph_cap_reclaim_work(struct work_struct *work)
 
 void ceph_queue_cap_reclaim_work(struct ceph_mds_client *mdsc)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        if (mdsc->stopping)
                return;
 
         if (queue_work(mdsc->fsc->cap_wq, &mdsc->cap_reclaim_work)) {
-                dout("caps reclaim work queued\n");
+                doutc(cl, "caps reclaim work queued\n");
         } else {
-                dout("failed to queue caps release work\n");
+                doutc(cl, "failed to queue caps release work\n");
         }
 }
 
@@ -2588,6 +2621,7 @@ static u8 *get_fscrypt_altname(const struct ceph_mds_request *req, u32 *plen)
 
 /**
  * ceph_mdsc_build_path - build a path string to a given dentry
+ * @mdsc: mds client
  * @dentry: dentry to which path should be built
  * @plen: returned length of string
  * @pbase: returned base inode number
@@ -2607,9 +2641,10 @@ static u8 *get_fscrypt_altname(const struct ceph_mds_request *req, u32 *plen)
  * Encode hidden .snap dirs as a double /, i.e.
  *   foo/.snap/bar -> foo//bar
  */
-char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *pbase,
-                          int for_wire)
+char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
+                          int *plen, u64 *pbase, int for_wire)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct dentry *cur;
        struct inode *inode;
        char *path;
@@ -2635,8 +2670,7 @@ retry:
                spin_lock(&cur->d_lock);
                inode = d_inode(cur);
                if (inode && ceph_snap(inode) == CEPH_SNAPDIR) {
-                       dout("build_path path+%d: %p SNAPDIR\n",
-                            pos, cur);
+                       doutc(cl, "path+%d: %p SNAPDIR\n", pos, cur);
                        spin_unlock(&cur->d_lock);
                        parent = dget_parent(cur);
                } else if (for_wire && inode && dentry != cur &&
@@ -2714,21 +2748,21 @@ retry:
                 * A rename didn't occur, but somehow we didn't end up where
                 * we thought we would. Throw a warning and try again.
                 */
-               pr_warn("build_path did not end path lookup where expected (pos = %d)\n",
-                       pos);
+               pr_warn_client(cl, "did not end path lookup where expected (pos = %d)\n",
+                              pos);
                goto retry;
        }
 
        *pbase = base;
        *plen = PATH_MAX - 1 - pos;
-       dout("build_path on %p %d built %llx '%.*s'\n",
-            dentry, d_count(dentry), base, *plen, path + pos);
+       doutc(cl, "on %p %d built %llx '%.*s'\n", dentry, d_count(dentry),
+             base, *plen, path + pos);
        return path + pos;
 }
 
-static int build_dentry_path(struct dentry *dentry, struct inode *dir,
-                            const char **ppath, int *ppathlen, u64 *pino,
-                            bool *pfreepath, bool parent_locked)
+static int build_dentry_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
+                            struct inode *dir, const char **ppath, int *ppathlen,
+                            u64 *pino, bool *pfreepath, bool parent_locked)
 {
        char *path;
 
@@ -2744,7 +2778,7 @@ static int build_dentry_path(struct dentry *dentry, struct inode *dir,
                return 0;
        }
        rcu_read_unlock();
-       path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
+       path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1);
        if (IS_ERR(path))
                return PTR_ERR(path);
        *ppath = path;
@@ -2756,6 +2790,7 @@ static int build_inode_path(struct inode *inode,
                            const char **ppath, int *ppathlen, u64 *pino,
                            bool *pfreepath)
 {
+       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
        struct dentry *dentry;
        char *path;
 
@@ -2765,7 +2800,7 @@ static int build_inode_path(struct inode *inode,
                return 0;
        }
        dentry = d_find_alias(inode);
-       path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
+       path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1);
        dput(dentry);
        if (IS_ERR(path))
                return PTR_ERR(path);
@@ -2778,27 +2813,28 @@ static int build_inode_path(struct inode *inode,
  * request arguments may be specified via an inode *, a dentry *, or
  * an explicit ino+path.
  */
-static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry,
-                                 struct inode *rdiri, const char *rpath,
-                                 u64 rino, const char **ppath, int *pathlen,
-                                 u64 *ino, bool *freepath, bool parent_locked)
+static int set_request_path_attr(struct ceph_mds_client *mdsc, struct inode *rinode,
+                                struct dentry *rdentry, struct inode *rdiri,
+                                const char *rpath, u64 rino, const char **ppath,
+                                int *pathlen, u64 *ino, bool *freepath,
+                                bool parent_locked)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int r = 0;
 
        if (rinode) {
                r = build_inode_path(rinode, ppath, pathlen, ino, freepath);
-               dout(" inode %p %llx.%llx\n", rinode, ceph_ino(rinode),
-                    ceph_snap(rinode));
+               doutc(cl, " inode %p %llx.%llx\n", rinode, ceph_ino(rinode),
+                     ceph_snap(rinode));
        } else if (rdentry) {
-               r = build_dentry_path(rdentry, rdiri, ppath, pathlen, ino,
+               r = build_dentry_path(mdsc, rdentry, rdiri, ppath, pathlen, ino,
                                        freepath, parent_locked);
-               dout(" dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen,
-                    *ppath);
+               doutc(cl, " dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen, *ppath);
        } else if (rpath || rino) {
                *ino = rino;
                *ppath = rpath;
                *pathlen = rpath ? strlen(rpath) : 0;
-               dout(" path %.*s\n", *pathlen, rpath);
+               doutc(cl, " path %.*s\n", *pathlen, rpath);
        }
 
        return r;
@@ -2877,7 +2913,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
        bool old_version = !test_bit(CEPHFS_FEATURE_32BITS_RETRY_FWD,
                                     &session->s_features);
 
-       ret = set_request_path_attr(req->r_inode, req->r_dentry,
+       ret = set_request_path_attr(mdsc, req->r_inode, req->r_dentry,
                              req->r_parent, req->r_path1, req->r_ino1.ino,
                              &path1, &pathlen1, &ino1, &freepath1,
                              test_bit(CEPH_MDS_R_PARENT_LOCKED,
@@ -2891,7 +2927,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
        if (req->r_old_dentry &&
            !(req->r_old_dentry->d_flags & DCACHE_DISCONNECTED))
                old_dentry = req->r_old_dentry;
-       ret = set_request_path_attr(NULL, old_dentry,
+       ret = set_request_path_attr(mdsc, NULL, old_dentry,
                              req->r_old_dentry_dir,
                              req->r_path2, req->r_ino2.ino,
                              &path2, &pathlen2, &ino2, &freepath2, true);
@@ -3099,6 +3135,7 @@ static int __prepare_send_request(struct ceph_mds_session *session,
 {
        int mds = session->s_mds;
        struct ceph_mds_client *mdsc = session->s_mdsc;
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request_head_legacy *lhead;
        struct ceph_mds_request_head *nhead;
        struct ceph_msg *msg;
@@ -3117,8 +3154,8 @@ static int __prepare_send_request(struct ceph_mds_session *session,
               old_max_retry = 1 << (old_max_retry * BITS_PER_BYTE);
               if ((old_version && req->r_attempts >= old_max_retry) ||
                   ((uint32_t)req->r_attempts >= U32_MAX)) {
-                       pr_warn_ratelimited("%s request tid %llu seq overflow\n",
-                                           __func__, req->r_tid);
+                       pr_warn_ratelimited_client(cl, "request tid %llu seq overflow\n",
+                                                  req->r_tid);
                        return -EMULTIHOP;
               }
        }
@@ -3133,8 +3170,8 @@ static int __prepare_send_request(struct ceph_mds_session *session,
                else
                        req->r_sent_on_mseq = -1;
        }
-       dout("%s %p tid %lld %s (attempt %d)\n", __func__, req,
-            req->r_tid, ceph_mds_op_name(req->r_op), req->r_attempts);
+       doutc(cl, "%p tid %lld %s (attempt %d)\n", req, req->r_tid,
+             ceph_mds_op_name(req->r_op), req->r_attempts);
 
        if (test_bit(CEPH_MDS_R_GOT_UNSAFE, &req->r_req_flags)) {
                void *p;
@@ -3202,7 +3239,7 @@ static int __prepare_send_request(struct ceph_mds_session *session,
                nhead->ext_num_retry = cpu_to_le32(req->r_attempts - 1);
        }
 
-       dout(" r_parent = %p\n", req->r_parent);
+       doutc(cl, " r_parent = %p\n", req->r_parent);
        return 0;
 }
 
@@ -3230,6 +3267,7 @@ static int __send_request(struct ceph_mds_session *session,
 static void __do_request(struct ceph_mds_client *mdsc,
                        struct ceph_mds_request *req)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_session *session = NULL;
        int mds = -1;
        int err = 0;
@@ -3242,29 +3280,29 @@ static void __do_request(struct ceph_mds_client *mdsc,
        }
 
        if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_FENCE_IO) {
-               dout("do_request metadata corrupted\n");
+               doutc(cl, "metadata corrupted\n");
                err = -EIO;
                goto finish;
        }
        if (req->r_timeout &&
            time_after_eq(jiffies, req->r_started + req->r_timeout)) {
-               dout("do_request timed out\n");
+               doutc(cl, "timed out\n");
                err = -ETIMEDOUT;
                goto finish;
        }
        if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) {
-               dout("do_request forced umount\n");
+               doutc(cl, "forced umount\n");
                err = -EIO;
                goto finish;
        }
        if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_MOUNTING) {
                if (mdsc->mdsmap_err) {
                        err = mdsc->mdsmap_err;
-                       dout("do_request mdsmap err %d\n", err);
+                       doutc(cl, "mdsmap err %d\n", err);
                        goto finish;
                }
                if (mdsc->mdsmap->m_epoch == 0) {
-                       dout("do_request no mdsmap, waiting for map\n");
+                       doutc(cl, "no mdsmap, waiting for map\n");
                        list_add(&req->r_wait, &mdsc->waiting_for_map);
                        return;
                }
@@ -3285,7 +3323,7 @@ static void __do_request(struct ceph_mds_client *mdsc,
                        err = -EJUKEBOX;
                        goto finish;
                }
-               dout("do_request no mds or not active, waiting for map\n");
+               doutc(cl, "no mds or not active, waiting for map\n");
                list_add(&req->r_wait, &mdsc->waiting_for_map);
                return;
        }
@@ -3301,8 +3339,8 @@ static void __do_request(struct ceph_mds_client *mdsc,
        }
        req->r_session = ceph_get_mds_session(session);
 
-       dout("do_request mds%d session %p state %s\n", mds, session,
-            ceph_session_state_name(session->s_state));
+       doutc(cl, "mds%d session %p state %s\n", mds, session,
+             ceph_session_state_name(session->s_state));
 
        /*
         * The old ceph will crash the MDSs when see unknown OPs
@@ -3393,8 +3431,8 @@ static void __do_request(struct ceph_mds_client *mdsc,
                spin_lock(&ci->i_ceph_lock);
                cap = ci->i_auth_cap;
                if (ci->i_ceph_flags & CEPH_I_ASYNC_CREATE && mds != cap->mds) {
-                       dout("do_request session changed for auth cap %d -> %d\n",
-                            cap->session->s_mds, session->s_mds);
+                       doutc(cl, "session changed for auth cap %d -> %d\n",
+                             cap->session->s_mds, session->s_mds);
 
                        /* Remove the auth cap from old session */
                        spin_lock(&cap->session->s_cap_lock);
@@ -3421,7 +3459,7 @@ out_session:
        ceph_put_mds_session(session);
 finish:
        if (err) {
-               dout("__do_request early error %d\n", err);
+               doutc(cl, "early error %d\n", err);
                req->r_err = err;
                complete_request(mdsc, req);
                __unregister_request(mdsc, req);
@@ -3435,6 +3473,7 @@ finish:
 static void __wake_requests(struct ceph_mds_client *mdsc,
                            struct list_head *head)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request *req;
        LIST_HEAD(tmp_list);
 
@@ -3444,7 +3483,8 @@ static void __wake_requests(struct ceph_mds_client *mdsc,
                req = list_entry(tmp_list.next,
                                 struct ceph_mds_request, r_wait);
                list_del_init(&req->r_wait);
-               dout(" wake request %p tid %llu\n", req, req->r_tid);
+               doutc(cl, " wake request %p tid %llu\n", req,
+                     req->r_tid);
                __do_request(mdsc, req);
        }
 }
@@ -3455,10 +3495,11 @@ static void __wake_requests(struct ceph_mds_client *mdsc,
  */
 static void kick_requests(struct ceph_mds_client *mdsc, int mds)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request *req;
        struct rb_node *p = rb_first(&mdsc->request_tree);
 
-       dout("kick_requests mds%d\n", mds);
+       doutc(cl, "kick_requests mds%d\n", mds);
        while (p) {
                req = rb_entry(p, struct ceph_mds_request, r_node);
                p = rb_next(p);
@@ -3468,7 +3509,7 @@ static void kick_requests(struct ceph_mds_client *mdsc, int mds)
                        continue; /* only new requests */
                if (req->r_session &&
                    req->r_session->s_mds == mds) {
-                       dout(" kicking tid %llu\n", req->r_tid);
+                       doutc(cl, " kicking tid %llu\n", req->r_tid);
                        list_del_init(&req->r_wait);
                        __do_request(mdsc, req);
                }
@@ -3478,6 +3519,7 @@ static void kick_requests(struct ceph_mds_client *mdsc, int mds)
 int ceph_mdsc_submit_request(struct ceph_mds_client *mdsc, struct inode *dir,
                              struct ceph_mds_request *req)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int err = 0;
 
        /* take CAP_PIN refs for r_inode, r_parent, r_old_dentry */
@@ -3499,8 +3541,7 @@ int ceph_mdsc_submit_request(struct ceph_mds_client *mdsc, struct inode *dir,
        if (req->r_inode) {
                err = ceph_wait_on_async_create(req->r_inode);
                if (err) {
-                       dout("%s: wait for async create returned: %d\n",
-                            __func__, err);
+                       doutc(cl, "wait for async create returned: %d\n", err);
                        return err;
                }
        }
@@ -3508,13 +3549,12 @@ int ceph_mdsc_submit_request(struct ceph_mds_client *mdsc, struct inode *dir,
        if (!err && req->r_old_inode) {
                err = ceph_wait_on_async_create(req->r_old_inode);
                if (err) {
-                       dout("%s: wait for async create returned: %d\n",
-                            __func__, err);
+                       doutc(cl, "wait for async create returned: %d\n", err);
                        return err;
                }
        }
 
-       dout("submit_request on %p for inode %p\n", req, dir);
+       doutc(cl, "submit_request on %p for inode %p\n", req, dir);
        mutex_lock(&mdsc->mutex);
        __register_request(mdsc, req, dir);
        __do_request(mdsc, req);
@@ -3527,10 +3567,11 @@ int ceph_mdsc_wait_request(struct ceph_mds_client *mdsc,
                           struct ceph_mds_request *req,
                           ceph_mds_request_wait_callback_t wait_func)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int err;
 
        /* wait */
-       dout("do_request waiting\n");
+       doutc(cl, "do_request waiting\n");
        if (wait_func) {
                err = wait_func(mdsc, req);
        } else {
@@ -3544,14 +3585,14 @@ int ceph_mdsc_wait_request(struct ceph_mds_client *mdsc,
                else
                        err = timeleft;  /* killed */
        }
-       dout("do_request waited, got %d\n", err);
+       doutc(cl, "do_request waited, got %d\n", err);
        mutex_lock(&mdsc->mutex);
 
        /* only abort if we didn't race with a real reply */
        if (test_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags)) {
                err = le32_to_cpu(req->r_reply_info.head->result);
        } else if (err < 0) {
-               dout("aborted request %lld with %d\n", req->r_tid, err);
+               doutc(cl, "aborted request %lld with %d\n", req->r_tid, err);
 
                /*
                 * ensure we aren't running concurrently with
@@ -3582,15 +3623,16 @@ int ceph_mdsc_do_request(struct ceph_mds_client *mdsc,
                         struct inode *dir,
                         struct ceph_mds_request *req)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        int err;
 
-       dout("do_request on %p\n", req);
+       doutc(cl, "do_request on %p\n", req);
 
        /* issue */
        err = ceph_mdsc_submit_request(mdsc, dir, req);
        if (!err)
                err = ceph_mdsc_wait_request(mdsc, req, NULL);
-       dout("do_request %p done, result %d\n", req, err);
+       doutc(cl, "do_request %p done, result %d\n", req, err);
        return err;
 }
 
@@ -3602,8 +3644,10 @@ void ceph_invalidate_dir_request(struct ceph_mds_request *req)
 {
        struct inode *dir = req->r_parent;
        struct inode *old_dir = req->r_old_dentry_dir;
+       struct ceph_client *cl = req->r_mdsc->fsc->client;
 
-       dout("invalidate_dir_request %p %p (complete, lease(s))\n", dir, old_dir);
+       doutc(cl, "invalidate_dir_request %p %p (complete, lease(s))\n",
+             dir, old_dir);
 
        ceph_dir_clear_complete(dir);
        if (old_dir)
@@ -3624,6 +3668,7 @@ void ceph_invalidate_dir_request(struct ceph_mds_request *req)
 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
 {
        struct ceph_mds_client *mdsc = session->s_mdsc;
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request *req;
        struct ceph_mds_reply_head *head = msg->front.iov_base;
        struct ceph_mds_reply_info_parsed *rinfo;  /* parsed reply info */
@@ -3634,7 +3679,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
        bool close_sessions = false;
 
        if (msg->front.iov_len < sizeof(*head)) {
-               pr_err("mdsc_handle_reply got corrupt (short) reply\n");
+               pr_err_client(cl, "got corrupt (short) reply\n");
                ceph_msg_dump(msg);
                return;
        }
@@ -3644,17 +3689,17 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
        mutex_lock(&mdsc->mutex);
        req = lookup_get_request(mdsc, tid);
        if (!req) {
-               dout("handle_reply on unknown tid %llu\n", tid);
+               doutc(cl, "on unknown tid %llu\n", tid);
                mutex_unlock(&mdsc->mutex);
                return;
        }
-       dout("handle_reply %p\n", req);
+       doutc(cl, "handle_reply %p\n", req);
 
        /* correct session? */
        if (req->r_session != session) {
-               pr_err("mdsc_handle_reply got %llu on session mds%d"
-                      " not mds%d\n", tid, session->s_mds,
-                      req->r_session ? req->r_session->s_mds : -1);
+               pr_err_client(cl, "got %llu on session mds%d not mds%d\n",
+                             tid, session->s_mds,
+                             req->r_session ? req->r_session->s_mds : -1);
                mutex_unlock(&mdsc->mutex);
                goto out;
        }
@@ -3662,14 +3707,14 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
        /* dup? */
        if ((test_bit(CEPH_MDS_R_GOT_UNSAFE, &req->r_req_flags) && !head->safe) ||
            (test_bit(CEPH_MDS_R_GOT_SAFE, &req->r_req_flags) && head->safe)) {
-               pr_warn("got a dup %s reply on %llu from mds%d\n",
-                          head->safe ? "safe" : "unsafe", tid, mds);
+               pr_warn_client(cl, "got a dup %s reply on %llu from mds%d\n",
+                              head->safe ? "safe" : "unsafe", tid, mds);
                mutex_unlock(&mdsc->mutex);
                goto out;
        }
        if (test_bit(CEPH_MDS_R_GOT_SAFE, &req->r_req_flags)) {
-               pr_warn("got unsafe after safe on %llu from mds%d\n",
-                          tid, mds);
+               pr_warn_client(cl, "got unsafe after safe on %llu from mds%d\n",
+                              tid, mds);
                mutex_unlock(&mdsc->mutex);
                goto out;
        }
@@ -3692,7 +3737,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
                         * response.  And even if it did, there is nothing
                         * useful we could do with a revised return value.
                         */
-                       dout("got safe reply %llu, mds%d\n", tid, mds);
+                       doutc(cl, "got safe reply %llu, mds%d\n", tid, mds);
 
                        mutex_unlock(&mdsc->mutex);
                        goto out;
@@ -3702,7 +3747,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
                list_add_tail(&req->r_unsafe_item, &req->r_session->s_unsafe);
        }
 
-       dout("handle_reply tid %lld result %d\n", tid, result);
+       doutc(cl, "tid %lld result %d\n", tid, result);
        if (test_bit(CEPHFS_FEATURE_REPLY_ENCODING, &session->s_features))
                err = parse_reply_info(session, msg, req, (u64)-1);
        else
@@ -3742,7 +3787,8 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
 
        mutex_lock(&session->s_mutex);
        if (err < 0) {
-               pr_err("mdsc_handle_reply got corrupt reply mds%d(tid:%lld)\n", mds, tid);
+               pr_err_client(cl, "got corrupt reply mds%d(tid:%lld)\n",
+                             mds, tid);
                ceph_msg_dump(msg);
                goto out_err;
        }
@@ -3806,7 +3852,7 @@ out_err:
                        set_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags);
                }
        } else {
-               dout("reply arrived after request %lld was aborted\n", tid);
+               doutc(cl, "reply arrived after request %lld was aborted\n", tid);
        }
        mutex_unlock(&mdsc->mutex);
 
@@ -3835,6 +3881,7 @@ static void handle_forward(struct ceph_mds_client *mdsc,
                           struct ceph_mds_session *session,
                           struct ceph_msg *msg)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request *req;
        u64 tid = le64_to_cpu(msg->hdr.tid);
        u32 next_mds;
@@ -3852,12 +3899,12 @@ static void handle_forward(struct ceph_mds_client *mdsc,
        req = lookup_get_request(mdsc, tid);
        if (!req) {
                mutex_unlock(&mdsc->mutex);
-               dout("forward tid %llu to mds%d - req dne\n", tid, next_mds);
+               doutc(cl, "forward tid %llu to mds%d - req dne\n", tid, next_mds);
                return;  /* dup reply? */
        }
 
        if (test_bit(CEPH_MDS_R_ABORTED, &req->r_req_flags)) {
-               dout("forward tid %llu aborted, unregistering\n", tid);
+               doutc(cl, "forward tid %llu aborted, unregistering\n", tid);
                __unregister_request(mdsc, req);
        } else if (fwd_seq <= req->r_num_fwd || (uint32_t)fwd_seq >= U32_MAX) {
                /*
@@ -3873,10 +3920,11 @@ static void handle_forward(struct ceph_mds_client *mdsc,
                set_bit(CEPH_MDS_R_ABORTED, &req->r_req_flags);
                mutex_unlock(&req->r_fill_mutex);
                aborted = true;
-               pr_warn_ratelimited("forward tid %llu seq overflow\n", tid);
+               pr_warn_ratelimited_client(cl, "forward tid %llu seq overflow\n",
+                                          tid);
        } else {
                /* resend. forward race not possible; mds would drop */
-               dout("forward tid %llu to mds%d (we resend)\n", tid, next_mds);
+               doutc(cl, "forward tid %llu to mds%d (we resend)\n", tid, next_mds);
                BUG_ON(req->r_err);
                BUG_ON(test_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags));
                req->r_attempts = 0;
@@ -3894,7 +3942,7 @@ static void handle_forward(struct ceph_mds_client *mdsc,
        return;
 
 bad:
-       pr_err("mdsc_handle_forward decode error err=%d\n", err);
+       pr_err_client(cl, "decode error err=%d\n", err);
        ceph_msg_dump(msg);
 }
 
@@ -3933,6 +3981,7 @@ static void handle_session(struct ceph_mds_session *session,
                           struct ceph_msg *msg)
 {
        struct ceph_mds_client *mdsc = session->s_mdsc;
+       struct ceph_client *cl = mdsc->fsc->client;
        int mds = session->s_mds;
        int msg_version = le16_to_cpu(msg->hdr.version);
        void *p = msg->front.iov_base;
@@ -3980,7 +4029,8 @@ static void handle_session(struct ceph_mds_session *session,
                /* version >= 5, flags   */
                ceph_decode_32_safe(&p, end, flags, bad);
                if (flags & CEPH_SESSION_BLOCKLISTED) {
-                       pr_warn("mds%d session blocklisted\n", session->s_mds);
+                       pr_warn_client(cl, "mds%d session blocklisted\n",
+                                      session->s_mds);
                        blocklisted = true;
                }
        }
@@ -3996,22 +4046,24 @@ static void handle_session(struct ceph_mds_session *session,
 
        mutex_lock(&session->s_mutex);
 
-       dout("handle_session mds%d %s %p state %s seq %llu\n",
-            mds, ceph_session_op_name(op), session,
-            ceph_session_state_name(session->s_state), seq);
+       doutc(cl, "mds%d %s %p state %s seq %llu\n", mds,
+             ceph_session_op_name(op), session,
+             ceph_session_state_name(session->s_state), seq);
 
        if (session->s_state == CEPH_MDS_SESSION_HUNG) {
                session->s_state = CEPH_MDS_SESSION_OPEN;
-               pr_info("mds%d came back\n", session->s_mds);
+               pr_info_client(cl, "mds%d came back\n", session->s_mds);
        }
 
        switch (op) {
        case CEPH_SESSION_OPEN:
                if (session->s_state == CEPH_MDS_SESSION_RECONNECTING)
-                       pr_info("mds%d reconnect success\n", session->s_mds);
+                       pr_info_client(cl, "mds%d reconnect success\n",
+                                      session->s_mds);
 
                if (session->s_state == CEPH_MDS_SESSION_OPEN) {
-                       pr_notice("mds%d is already opened\n", session->s_mds);
+                       pr_notice_client(cl, "mds%d is already opened\n",
+                                        session->s_mds);
                } else {
                        session->s_state = CEPH_MDS_SESSION_OPEN;
                        session->s_features = features;
@@ -4041,7 +4093,8 @@ static void handle_session(struct ceph_mds_session *session,
 
        case CEPH_SESSION_CLOSE:
                if (session->s_state == CEPH_MDS_SESSION_RECONNECTING)
-                       pr_info("mds%d reconnect denied\n", session->s_mds);
+                       pr_info_client(cl, "mds%d reconnect denied\n",
+                                      session->s_mds);
                session->s_state = CEPH_MDS_SESSION_CLOSED;
                cleanup_session_requests(mdsc, session);
                remove_session_caps(session);
@@ -4050,8 +4103,8 @@ static void handle_session(struct ceph_mds_session *session,
                break;
 
        case CEPH_SESSION_STALE:
-               pr_info("mds%d caps went stale, renewing\n",
-                       session->s_mds);
+               pr_info_client(cl, "mds%d caps went stale, renewing\n",
+                              session->s_mds);
                atomic_inc(&session->s_cap_gen);
                session->s_cap_ttl = jiffies - 1;
                send_renew_caps(mdsc, session);
@@ -4072,7 +4125,7 @@ static void handle_session(struct ceph_mds_session *session,
                break;
 
        case CEPH_SESSION_FORCE_RO:
-               dout("force_session_readonly %p\n", session);
+               doutc(cl, "force_session_readonly %p\n", session);
                spin_lock(&session->s_cap_lock);
                session->s_readonly = true;
                spin_unlock(&session->s_cap_lock);
@@ -4081,7 +4134,8 @@ static void handle_session(struct ceph_mds_session *session,
 
        case CEPH_SESSION_REJECT:
                WARN_ON(session->s_state != CEPH_MDS_SESSION_OPENING);
-               pr_info("mds%d rejected session\n", session->s_mds);
+               pr_info_client(cl, "mds%d rejected session\n",
+                              session->s_mds);
                session->s_state = CEPH_MDS_SESSION_REJECTED;
                cleanup_session_requests(mdsc, session);
                remove_session_caps(session);
@@ -4091,7 +4145,7 @@ static void handle_session(struct ceph_mds_session *session,
                break;
 
        default:
-               pr_err("mdsc_handle_session bad op %d mds%d\n", op, mds);
+               pr_err_client(cl, "bad op %d mds%d\n", op, mds);
                WARN_ON(1);
        }
 
@@ -4108,30 +4162,32 @@ static void handle_session(struct ceph_mds_session *session,
        return;
 
 bad:
-       pr_err("mdsc_handle_session corrupt message mds%d len %d\n", mds,
-              (int)msg->front.iov_len);
+       pr_err_client(cl, "corrupt message mds%d len %d\n", mds,
+                     (int)msg->front.iov_len);
        ceph_msg_dump(msg);
        return;
 }
 
 void ceph_mdsc_release_dir_caps(struct ceph_mds_request *req)
 {
+       struct ceph_client *cl = req->r_mdsc->fsc->client;
        int dcaps;
 
        dcaps = xchg(&req->r_dir_caps, 0);
        if (dcaps) {
-               dout("releasing r_dir_caps=%s\n", ceph_cap_string(dcaps));
+               doutc(cl, "releasing r_dir_caps=%s\n", ceph_cap_string(dcaps));
                ceph_put_cap_refs(ceph_inode(req->r_parent), dcaps);
        }
 }
 
 void ceph_mdsc_release_dir_caps_no_check(struct ceph_mds_request *req)
 {
+       struct ceph_client *cl = req->r_mdsc->fsc->client;
        int dcaps;
 
        dcaps = xchg(&req->r_dir_caps, 0);
        if (dcaps) {
-               dout("releasing r_dir_caps=%s\n", ceph_cap_string(dcaps));
+               doutc(cl, "releasing r_dir_caps=%s\n", ceph_cap_string(dcaps));
                ceph_put_cap_refs_no_check_caps(ceph_inode(req->r_parent),
                                                dcaps);
        }
@@ -4146,7 +4202,7 @@ static void replay_unsafe_requests(struct ceph_mds_client *mdsc,
        struct ceph_mds_request *req, *nreq;
        struct rb_node *p;
 
-       dout("replay_unsafe_requests mds%d\n", session->s_mds);
+       doutc(mdsc->fsc->client, "mds%d\n", session->s_mds);
 
        mutex_lock(&mdsc->mutex);
        list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item)
@@ -4290,6 +4346,8 @@ out_unlock:
  */
 static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
 {
+       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
+       struct ceph_client *cl = ceph_inode_to_client(inode);
        union {
                struct ceph_mds_cap_reconnect v2;
                struct ceph_mds_cap_reconnect_v1 v1;
@@ -4307,7 +4365,7 @@ static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
        dentry = d_find_primary(inode);
        if (dentry) {
                /* set pathbase to parent dir when msg_version >= 2 */
-               path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase,
+               path = ceph_mdsc_build_path(mdsc, dentry, &pathlen, &pathbase,
                                            recon_state->msg_version >= 2);
                dput(dentry);
                if (IS_ERR(path)) {
@@ -4326,9 +4384,9 @@ static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
                err = 0;
                goto out_err;
        }
-       dout(" adding %p ino %llx.%llx cap %p %lld %s\n",
-            inode, ceph_vinop(inode), cap, cap->cap_id,
-            ceph_cap_string(cap->issued));
+       doutc(cl, " adding %p ino %llx.%llx cap %p %lld %s\n", inode,
+             ceph_vinop(inode), cap, cap->cap_id,
+             ceph_cap_string(cap->issued));
 
        cap->seq = 0;        /* reset cap seq */
        cap->issue_seq = 0;  /* and issue_seq */
@@ -4478,6 +4536,7 @@ static int encode_snap_realms(struct ceph_mds_client *mdsc,
 {
        struct rb_node *p;
        struct ceph_pagelist *pagelist = recon_state->pagelist;
+       struct ceph_client *cl = mdsc->fsc->client;
        int err = 0;
 
        if (recon_state->msg_version >= 4) {
@@ -4516,8 +4575,8 @@ static int encode_snap_realms(struct ceph_mds_client *mdsc,
                        ceph_pagelist_encode_32(pagelist, sizeof(sr_rec));
                }
 
-               dout(" adding snap realm %llx seq %lld parent %llx\n",
-                    realm->ino, realm->seq, realm->parent_ino);
+               doutc(cl, " adding snap realm %llx seq %lld parent %llx\n",
+                     realm->ino, realm->seq, realm->parent_ino);
                sr_rec.ino = cpu_to_le64(realm->ino);
                sr_rec.seq = cpu_to_le64(realm->seq);
                sr_rec.parent = cpu_to_le64(realm->parent_ino);
@@ -4546,6 +4605,7 @@ fail:
 static void send_mds_reconnect(struct ceph_mds_client *mdsc,
                               struct ceph_mds_session *session)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_msg *reply;
        int mds = session->s_mds;
        int err = -ENOMEM;
@@ -4554,7 +4614,7 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
        };
        LIST_HEAD(dispose);
 
-       pr_info("mds%d reconnect start\n", mds);
+       pr_info_client(cl, "mds%d reconnect start\n", mds);
 
        recon_state.pagelist = ceph_pagelist_alloc(GFP_NOFS);
        if (!recon_state.pagelist)
@@ -4570,8 +4630,8 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
        session->s_state = CEPH_MDS_SESSION_RECONNECTING;
        session->s_seq = 0;
 
-       dout("session %p state %s\n", session,
-            ceph_session_state_name(session->s_state));
+       doutc(cl, "session %p state %s\n", session,
+             ceph_session_state_name(session->s_state));
 
        atomic_inc(&session->s_cap_gen);
 
@@ -4705,7 +4765,8 @@ fail:
 fail_nomsg:
        ceph_pagelist_release(recon_state.pagelist);
 fail_nopagelist:
-       pr_err("error %d preparing reconnect for mds%d\n", err, mds);
+       pr_err_client(cl, "error %d preparing reconnect for mds%d\n",
+                     err, mds);
        return;
 }
 
@@ -4724,9 +4785,9 @@ static void check_new_map(struct ceph_mds_client *mdsc,
        int oldstate, newstate;
        struct ceph_mds_session *s;
        unsigned long targets[DIV_ROUND_UP(CEPH_MAX_MDS, sizeof(unsigned long))] = {0};
+       struct ceph_client *cl = mdsc->fsc->client;
 
-       dout("check_new_map new %u old %u\n",
-            newmap->m_epoch, oldmap->m_epoch);
+       doutc(cl, "new %u old %u\n", newmap->m_epoch, oldmap->m_epoch);
 
        if (newmap->m_info) {
                for (i = 0; i < newmap->possible_max_rank; i++) {
@@ -4742,12 +4803,12 @@ static void check_new_map(struct ceph_mds_client *mdsc,
                oldstate = ceph_mdsmap_get_state(oldmap, i);
                newstate = ceph_mdsmap_get_state(newmap, i);
 
-               dout("check_new_map mds%d state %s%s -> %s%s (session %s)\n",
-                    i, ceph_mds_state_name(oldstate),
-                    ceph_mdsmap_is_laggy(oldmap, i) ? " (laggy)" : "",
-                    ceph_mds_state_name(newstate),
-                    ceph_mdsmap_is_laggy(newmap, i) ? " (laggy)" : "",
-                    ceph_session_state_name(s->s_state));
+               doutc(cl, "mds%d state %s%s -> %s%s (session %s)\n",
+                     i, ceph_mds_state_name(oldstate),
+                     ceph_mdsmap_is_laggy(oldmap, i) ? " (laggy)" : "",
+                     ceph_mds_state_name(newstate),
+                     ceph_mdsmap_is_laggy(newmap, i) ? " (laggy)" : "",
+                     ceph_session_state_name(s->s_state));
 
                if (i >= newmap->possible_max_rank) {
                        /* force close session for stopped mds */
@@ -4800,7 +4861,8 @@ static void check_new_map(struct ceph_mds_client *mdsc,
                    newstate >= CEPH_MDS_STATE_ACTIVE) {
                        if (oldstate != CEPH_MDS_STATE_CREATING &&
                            oldstate != CEPH_MDS_STATE_STARTING)
-                               pr_info("mds%d recovery completed\n", s->s_mds);
+                               pr_info_client(cl, "mds%d recovery completed\n",
+                                              s->s_mds);
                        kick_requests(mdsc, i);
                        mutex_unlock(&mdsc->mutex);
                        mutex_lock(&s->s_mutex);
@@ -4844,12 +4906,13 @@ static void check_new_map(struct ceph_mds_client *mdsc,
                        s = __open_export_target_session(mdsc, i);
                        if (IS_ERR(s)) {
                                err = PTR_ERR(s);
-                               pr_err("failed to open export target session, err %d\n",
-                                      err);
+                               pr_err_client(cl,
+                                             "failed to open export target session, err %d\n",
+                                             err);
                                continue;
                        }
                }
-               dout("send reconnect to export target mds.%d\n", i);
+               doutc(cl, "send reconnect to export target mds.%d\n", i);
                mutex_unlock(&mdsc->mutex);
                send_mds_reconnect(mdsc, s);
                ceph_put_mds_session(s);
@@ -4865,8 +4928,7 @@ static void check_new_map(struct ceph_mds_client *mdsc,
                if (s->s_state == CEPH_MDS_SESSION_OPEN ||
                    s->s_state == CEPH_MDS_SESSION_HUNG ||
                    s->s_state == CEPH_MDS_SESSION_CLOSING) {
-                       dout(" connecting to export targets of laggy mds%d\n",
-                            i);
+                       doutc(cl, " connecting to export targets of laggy mds%d\n", i);
                        __open_export_target_sessions(mdsc, s);
                }
        }
@@ -4893,6 +4955,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
                         struct ceph_mds_session *session,
                         struct ceph_msg *msg)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct super_block *sb = mdsc->fsc->sb;
        struct inode *inode;
        struct dentry *parent, *dentry;
@@ -4904,7 +4967,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
        struct qstr dname;
        int release = 0;
 
-       dout("handle_lease from mds%d\n", mds);
+       doutc(cl, "from mds%d\n", mds);
 
        if (!ceph_inc_mds_stopping_blocker(mdsc, session))
                return;
@@ -4922,20 +4985,19 @@ static void handle_lease(struct ceph_mds_client *mdsc,
 
        /* lookup inode */
        inode = ceph_find_inode(sb, vino);
-       dout("handle_lease %s, ino %llx %p %.*s\n",
-            ceph_lease_op_name(h->action), vino.ino, inode,
-            dname.len, dname.name);
+       doutc(cl, "%s, ino %llx %p %.*s\n", ceph_lease_op_name(h->action),
+             vino.ino, inode, dname.len, dname.name);
 
        mutex_lock(&session->s_mutex);
        if (!inode) {
-               dout("handle_lease no inode %llx\n", vino.ino);
+               doutc(cl, "no inode %llx\n", vino.ino);
                goto release;
        }
 
        /* dentry */
        parent = d_find_alias(inode);
        if (!parent) {
-               dout("no parent dentry on inode %p\n", inode);
+               doutc(cl, "no parent dentry on inode %p\n", inode);
                WARN_ON(1);
                goto release;  /* hrm... */
        }
@@ -4995,7 +5057,7 @@ out:
 bad:
        ceph_dec_mds_stopping_blocker(mdsc);
 
-       pr_err("corrupt lease message\n");
+       pr_err_client(cl, "corrupt lease message\n");
        ceph_msg_dump(msg);
 }
 
@@ -5003,13 +5065,14 @@ void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session,
                              struct dentry *dentry, char action,
                              u32 seq)
 {
+       struct ceph_client *cl = session->s_mdsc->fsc->client;
        struct ceph_msg *msg;
        struct ceph_mds_lease *lease;
        struct inode *dir;
        int len = sizeof(*lease) + sizeof(u32) + NAME_MAX;
 
-       dout("lease_send_msg identry %p %s to mds%d\n",
-            dentry, ceph_lease_op_name(action), session->s_mds);
+       doutc(cl, "identry %p %s to mds%d\n", dentry, ceph_lease_op_name(action),
+             session->s_mds);
 
        msg = ceph_msg_new(CEPH_MSG_CLIENT_LEASE, len, GFP_NOFS, false);
        if (!msg)
@@ -5042,6 +5105,7 @@ static void lock_unlock_session(struct ceph_mds_session *s)
 
 static void maybe_recover_session(struct ceph_mds_client *mdsc)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_fs_client *fsc = mdsc->fsc;
 
        if (!ceph_test_mount_opt(fsc, CLEANRECOVER))
@@ -5053,17 +5117,19 @@ static void maybe_recover_session(struct ceph_mds_client *mdsc)
        if (!READ_ONCE(fsc->blocklisted))
                return;
 
-       pr_info("auto reconnect after blocklisted\n");
+       pr_info_client(cl, "auto reconnect after blocklisted\n");
        ceph_force_reconnect(fsc->sb);
 }
 
 bool check_session_state(struct ceph_mds_session *s)
 {
+       struct ceph_client *cl = s->s_mdsc->fsc->client;
+
        switch (s->s_state) {
        case CEPH_MDS_SESSION_OPEN:
                if (s->s_ttl && time_after(jiffies, s->s_ttl)) {
                        s->s_state = CEPH_MDS_SESSION_HUNG;
-                       pr_info("mds%d hung\n", s->s_mds);
+                       pr_info_client(cl, "mds%d hung\n", s->s_mds);
                }
                break;
        case CEPH_MDS_SESSION_CLOSING:
@@ -5083,6 +5149,8 @@ bool check_session_state(struct ceph_mds_session *s)
  */
 void inc_session_sequence(struct ceph_mds_session *s)
 {
+       struct ceph_client *cl = s->s_mdsc->fsc->client;
+
        lockdep_assert_held(&s->s_mutex);
 
        s->s_seq++;
@@ -5090,11 +5158,11 @@ void inc_session_sequence(struct ceph_mds_session *s)
        if (s->s_state == CEPH_MDS_SESSION_CLOSING) {
                int ret;
 
-               dout("resending session close request for mds%d\n", s->s_mds);
+               doutc(cl, "resending session close request for mds%d\n", s->s_mds);
                ret = request_close_session(s);
                if (ret < 0)
-                       pr_err("unable to close session to mds%d: %d\n",
-                              s->s_mds, ret);
+                       pr_err_client(cl, "unable to close session to mds%d: %d\n",
+                                     s->s_mds, ret);
        }
 }
 
@@ -5123,7 +5191,7 @@ static void delayed_work(struct work_struct *work)
        int renew_caps;
        int i;
 
-       dout("mdsc delayed_work\n");
+       doutc(mdsc->fsc->client, "mdsc delayed_work\n");
 
        if (mdsc->stopping >= CEPH_MDSC_STOPPING_FLUSHED)
                return;
@@ -5252,6 +5320,7 @@ err_mdsc:
  */
 static void wait_requests(struct ceph_mds_client *mdsc)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_options *opts = mdsc->fsc->client->options;
        struct ceph_mds_request *req;
 
@@ -5259,25 +5328,25 @@ static void wait_requests(struct ceph_mds_client *mdsc)
        if (__get_oldest_req(mdsc)) {
                mutex_unlock(&mdsc->mutex);
 
-               dout("wait_requests waiting for requests\n");
+               doutc(cl, "waiting for requests\n");
                wait_for_completion_timeout(&mdsc->safe_umount_waiters,
                                    ceph_timeout_jiffies(opts->mount_timeout));
 
                /* tear down remaining requests */
                mutex_lock(&mdsc->mutex);
                while ((req = __get_oldest_req(mdsc))) {
-                       dout("wait_requests timed out on tid %llu\n",
-                            req->r_tid);
+                       doutc(cl, "timed out on tid %llu\n", req->r_tid);
                        list_del_init(&req->r_wait);
                        __unregister_request(mdsc, req);
                }
        }
        mutex_unlock(&mdsc->mutex);
-       dout("wait_requests done\n");
+       doutc(cl, "done\n");
 }
 
 void send_flush_mdlog(struct ceph_mds_session *s)
 {
+       struct ceph_client *cl = s->s_mdsc->fsc->client;
        struct ceph_msg *msg;
 
        /*
@@ -5287,13 +5356,13 @@ void send_flush_mdlog(struct ceph_mds_session *s)
                return;
 
        mutex_lock(&s->s_mutex);
-       dout("request mdlog flush to mds%d (%s)s seq %lld\n", s->s_mds,
-            ceph_session_state_name(s->s_state), s->s_seq);
+       doutc(cl, "request mdlog flush to mds%d (%s)s seq %lld\n",
+             s->s_mds, ceph_session_state_name(s->s_state), s->s_seq);
        msg = ceph_create_session_msg(CEPH_SESSION_REQUEST_FLUSH_MDLOG,
                                      s->s_seq);
        if (!msg) {
-               pr_err("failed to request mdlog flush to mds%d (%s) seq %lld\n",
-                      s->s_mds, ceph_session_state_name(s->s_state), s->s_seq);
+               pr_err_client(cl, "failed to request mdlog flush to mds%d (%s) seq %lld\n",
+                             s->s_mds, ceph_session_state_name(s->s_state), s->s_seq);
        } else {
                ceph_con_send(&s->s_con, msg);
        }
@@ -5306,7 +5375,7 @@ void send_flush_mdlog(struct ceph_mds_session *s)
  */
 void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc)
 {
-       dout("pre_umount\n");
+       doutc(mdsc->fsc->client, "begin\n");
        mdsc->stopping = CEPH_MDSC_STOPPING_BEGIN;
 
        ceph_mdsc_iterate_sessions(mdsc, send_flush_mdlog, true);
@@ -5321,6 +5390,7 @@ void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc)
        ceph_msgr_flush();
 
        ceph_cleanup_quotarealms_inodes(mdsc);
+       doutc(mdsc->fsc->client, "done\n");
 }
 
 /*
@@ -5329,12 +5399,13 @@ void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc)
 static void flush_mdlog_and_wait_mdsc_unsafe_requests(struct ceph_mds_client *mdsc,
                                                 u64 want_tid)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_request *req = NULL, *nextreq;
        struct ceph_mds_session *last_session = NULL;
        struct rb_node *n;
 
        mutex_lock(&mdsc->mutex);
-       dout("%s want %lld\n", __func__, want_tid);
+       doutc(cl, "want %lld\n", want_tid);
 restart:
        req = __get_oldest_req(mdsc);
        while (req && req->r_tid <= want_tid) {
@@ -5368,8 +5439,8 @@ restart:
                        } else {
                                ceph_put_mds_session(s);
                        }
-                       dout("%s wait on %llu (want %llu)\n", __func__,
-                            req->r_tid, want_tid);
+                       doutc(cl, "wait on %llu (want %llu)\n",
+                             req->r_tid, want_tid);
                        wait_for_completion(&req->r_safe_completion);
 
                        mutex_lock(&mdsc->mutex);
@@ -5387,17 +5458,18 @@ restart:
        }
        mutex_unlock(&mdsc->mutex);
        ceph_put_mds_session(last_session);
-       dout("%s done\n", __func__);
+       doutc(cl, "done\n");
 }
 
 void ceph_mdsc_sync(struct ceph_mds_client *mdsc)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        u64 want_tid, want_flush;
 
        if (READ_ONCE(mdsc->fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN)
                return;
 
-       dout("sync\n");
+       doutc(cl, "sync\n");
        mutex_lock(&mdsc->mutex);
        want_tid = mdsc->last_tid;
        mutex_unlock(&mdsc->mutex);
@@ -5413,8 +5485,7 @@ void ceph_mdsc_sync(struct ceph_mds_client *mdsc)
        }
        spin_unlock(&mdsc->cap_dirty_lock);
 
-       dout("sync want tid %lld flush_seq %lld\n",
-            want_tid, want_flush);
+       doutc(cl, "sync want tid %lld flush_seq %lld\n", want_tid, want_flush);
 
        flush_mdlog_and_wait_mdsc_unsafe_requests(mdsc, want_tid);
        wait_caps_flush(mdsc, want_flush);
@@ -5436,11 +5507,12 @@ static bool done_closing_sessions(struct ceph_mds_client *mdsc, int skipped)
 void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc)
 {
        struct ceph_options *opts = mdsc->fsc->client->options;
+       struct ceph_client *cl = mdsc->fsc->client;
        struct ceph_mds_session *session;
        int i;
        int skipped = 0;
 
-       dout("close_sessions\n");
+       doutc(cl, "begin\n");
 
        /* close sessions */
        mutex_lock(&mdsc->mutex);
@@ -5458,7 +5530,7 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc)
        }
        mutex_unlock(&mdsc->mutex);
 
-       dout("waiting for sessions to close\n");
+       doutc(cl, "waiting for sessions to close\n");
        wait_event_timeout(mdsc->session_close_wq,
                           done_closing_sessions(mdsc, skipped),
                           ceph_timeout_jiffies(opts->mount_timeout));
@@ -5486,7 +5558,7 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc)
        cancel_work_sync(&mdsc->cap_reclaim_work);
        cancel_delayed_work_sync(&mdsc->delayed_work); /* cancel timer */
 
-       dout("stopped\n");
+       doutc(cl, "done\n");
 }
 
 void ceph_mdsc_force_umount(struct ceph_mds_client *mdsc)
@@ -5494,7 +5566,7 @@ void ceph_mdsc_force_umount(struct ceph_mds_client *mdsc)
        struct ceph_mds_session *session;
        int mds;
 
-       dout("force umount\n");
+       doutc(mdsc->fsc->client, "force umount\n");
 
        mutex_lock(&mdsc->mutex);
        for (mds = 0; mds < mdsc->max_sessions; mds++) {
@@ -5525,7 +5597,7 @@ void ceph_mdsc_force_umount(struct ceph_mds_client *mdsc)
 
 static void ceph_mdsc_stop(struct ceph_mds_client *mdsc)
 {
-       dout("stop\n");
+       doutc(mdsc->fsc->client, "stop\n");
        /*
         * Make sure the delayed work stopped before releasing
         * the resources.
@@ -5546,7 +5618,7 @@ static void ceph_mdsc_stop(struct ceph_mds_client *mdsc)
 void ceph_mdsc_destroy(struct ceph_fs_client *fsc)
 {
        struct ceph_mds_client *mdsc = fsc->mdsc;
-       dout("mdsc_destroy %p\n", mdsc);
+       doutc(fsc->client, "%p\n", mdsc);
 
        if (!mdsc)
                return;
@@ -5560,12 +5632,13 @@ void ceph_mdsc_destroy(struct ceph_fs_client *fsc)
 
        fsc->mdsc = NULL;
        kfree(mdsc);
-       dout("mdsc_destroy %p done\n", mdsc);
+       doutc(fsc->client, "%p done\n", mdsc);
 }
 
 void ceph_mdsc_handle_fsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
 {
        struct ceph_fs_client *fsc = mdsc->fsc;
+       struct ceph_client *cl = fsc->client;
        const char *mds_namespace = fsc->mount_options->mds_namespace;
        void *p = msg->front.iov_base;
        void *end = p + msg->front.iov_len;
@@ -5577,7 +5650,7 @@ void ceph_mdsc_handle_fsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
        ceph_decode_need(&p, end, sizeof(u32), bad);
        epoch = ceph_decode_32(&p);
 
-       dout("handle_fsmap epoch %u\n", epoch);
+       doutc(cl, "epoch %u\n", epoch);
 
        /* struct_v, struct_cv, map_len, epoch, legacy_client_fscid */
        ceph_decode_skip_n(&p, end, 2 + sizeof(u32) * 3, bad);
@@ -5622,7 +5695,8 @@ void ceph_mdsc_handle_fsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
        return;
 
 bad:
-       pr_err("error decoding fsmap %d. Shutting down mount.\n", err);
+       pr_err_client(cl, "error decoding fsmap %d. Shutting down mount.\n",
+                     err);
        ceph_umount_begin(mdsc->fsc->sb);
        ceph_msg_dump(msg);
 err_out:
@@ -5637,6 +5711,7 @@ err_out:
  */
 void ceph_mdsc_handle_mdsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
 {
+       struct ceph_client *cl = mdsc->fsc->client;
        u32 epoch;
        u32 maplen;
        void *p = msg->front.iov_base;
@@ -5651,18 +5726,17 @@ void ceph_mdsc_handle_mdsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
                return;
        epoch = ceph_decode_32(&p);
        maplen = ceph_decode_32(&p);
-       dout("handle_map epoch %u len %d\n", epoch, (int)maplen);
+       doutc(cl, "epoch %u len %d\n", epoch, (int)maplen);
 
        /* do we need it? */
        mutex_lock(&mdsc->mutex);
        if (mdsc->mdsmap && epoch <= mdsc->mdsmap->m_epoch) {
-               dout("handle_map epoch %u <= our %u\n",
-                    epoch, mdsc->mdsmap->m_epoch);
+               doutc(cl, "epoch %u <= our %u\n", epoch, mdsc->mdsmap->m_epoch);
                mutex_unlock(&mdsc->mutex);
                return;
        }
 
-       newmap = ceph_mdsmap_decode(&p, end, ceph_msgr2(mdsc->fsc->client));
+       newmap = ceph_mdsmap_decode(mdsc, &p, end, ceph_msgr2(mdsc->fsc->client));
        if (IS_ERR(newmap)) {
                err = PTR_ERR(newmap);
                goto bad_unlock;
@@ -5691,7 +5765,8 @@ void ceph_mdsc_handle_mdsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
 bad_unlock:
        mutex_unlock(&mdsc->mutex);
 bad:
-       pr_err("error decoding mdsmap %d. Shutting down mount.\n", err);
+       pr_err_client(cl, "error decoding mdsmap %d. Shutting down mount.\n",
+                     err);
        ceph_umount_begin(mdsc->fsc->sb);
        ceph_msg_dump(msg);
        return;
@@ -5722,7 +5797,8 @@ static void mds_peer_reset(struct ceph_connection *con)
        struct ceph_mds_session *s = con->private;
        struct ceph_mds_client *mdsc = s->s_mdsc;
 
-       pr_warn("mds%d closed our session\n", s->s_mds);
+       pr_warn_client(mdsc->fsc->client, "mds%d closed our session\n",
+                      s->s_mds);
        if (READ_ONCE(mdsc->fsc->mount_state) != CEPH_MOUNT_FENCE_IO)
                send_mds_reconnect(mdsc, s);
 }
@@ -5731,6 +5807,7 @@ static void mds_dispatch(struct ceph_connection *con, struct ceph_msg *msg)
 {
        struct ceph_mds_session *s = con->private;
        struct ceph_mds_client *mdsc = s->s_mdsc;
+       struct ceph_client *cl = mdsc->fsc->client;
        int type = le16_to_cpu(msg->hdr.type);
 
        mutex_lock(&mdsc->mutex);
@@ -5770,8 +5847,8 @@ static void mds_dispatch(struct ceph_connection *con, struct ceph_msg *msg)
                break;
 
        default:
-               pr_err("received unknown message type %d %s\n", type,
-                      ceph_msg_type_name(type));
+               pr_err_client(cl, "received unknown message type %d %s\n",
+                             type, ceph_msg_type_name(type));
        }
 out:
        ceph_msg_put(msg);