]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
take a smaller ceph patch for 6.6
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jan 2025 11:45:48 +0000 (12:45 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jan 2025 11:45:48 +0000 (12:45 +0100)
lets us drop some other commits.

queue-6.6/ceph-give-up-on-paths-longer-than-path_max.patch
queue-6.6/ceph-print-cluster-fsid-and-client-global_id-in-all-.patch [deleted file]
queue-6.6/libceph-add-doutc-and-_client-debug-macros-support.patch [deleted file]
queue-6.6/series

index d1becf353bf941c616cb7687e5fbffcde343526e..af85dcecbb3fe55dd8d5f50b8e3b771c84ed1738 100644 (file)
@@ -1,5 +1,5 @@
-From 0df697660c374d5c869d0e72bd6afa776af3dae6 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
+From 550f7ca98ee028a606aa75705a7e77b1bd11720f Mon Sep 17 00:00:00 2001
+From: Max Kellermann <max.kellermann@ionos.com>
 Date: Mon, 18 Nov 2024 23:28:28 +0100
 Subject: ceph: give up on paths longer than PATH_MAX
 MIME-Version: 1.0
@@ -8,7 +8,7 @@ Content-Transfer-Encoding: 8bit
 
 From: Max Kellermann <max.kellermann@ionos.com>
 
-[ Upstream commit 550f7ca98ee028a606aa75705a7e77b1bd11720f ]
+commit 550f7ca98ee028a606aa75705a7e77b1bd11720f upstream.
 
 If the full path to be built by ceph_mdsc_build_path() happens to be
 longer than PATH_MAX, then this function will enter an endless (retry)
@@ -25,16 +25,15 @@ Reported-by: Dario Weißer <dario@cure53.de>
 Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
 Reviewed-by: Alex Markuze <amarkuze@redhat.com>
 Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
+[idryomov@gmail.com: backport to 6.6: pr_warn() is still in use]
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 ---
- fs/ceph/mds_client.c | 9 ++++-----
+ fs/ceph/mds_client.c |    9 ++++-----
  1 file changed, 4 insertions(+), 5 deletions(-)
 
-diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
-index 56609b80880c..5ee38dd2c9b9 100644
 --- a/fs/ceph/mds_client.c
 +++ b/fs/ceph/mds_client.c
-@@ -2745,12 +2745,11 @@ char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
+@@ -2713,12 +2713,11 @@ retry:
  
        if (pos < 0) {
                /*
@@ -44,13 +43,10 @@ index 56609b80880c..5ee38dd2c9b9 100644
 +               * cannot ever succeed.  Creating paths that long is
 +               * possible with Ceph, but Linux cannot use them.
                 */
--              pr_warn_client(cl, "did not end path lookup where expected (pos = %d)\n",
--                             pos);
+-              pr_warn("build_path did not end path lookup where expected (pos = %d)\n",
+-                      pos);
 -              goto retry;
 +              return ERR_PTR(-ENAMETOOLONG);
        }
  
        *pbase = base;
--- 
-2.39.5
-
diff --git a/queue-6.6/ceph-print-cluster-fsid-and-client-global_id-in-all-.patch b/queue-6.6/ceph-print-cluster-fsid-and-client-global_id-in-all-.patch
deleted file mode 100644 (file)
index c1886f2..0000000
+++ /dev/null
@@ -1,9385 +0,0 @@
-From 5c050aedf815f1a57242680ab36c53e736839f8f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 12 Jun 2023 09:04:07 +0800
-Subject: ceph: print cluster fsid and client global_id in all debug logs
-
-From: Xiubo Li <xiubli@redhat.com>
-
-[ Upstream commit 38d46409c4639a1d659ebfa70e27a8bed6b8ee1d ]
-
-Multiple CephFS mounts on a host is increasingly common so
-disambiguating messages like this is necessary and will make it easier
-to debug issues.
-
-At the same this will improve the debug logs to make them easier to
-troubleshooting issues, such as print the ino# instead only printing
-the memory addresses of the corresponding inodes and print the dentry
-names instead of the corresponding memory addresses for the dentry,etc.
-
-Link: https://tracker.ceph.com/issues/61590
-Signed-off-by: Xiubo Li <xiubli@redhat.com>
-Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
-Reviewed-by: Milind Changire <mchangir@redhat.com>
-Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
-Stable-dep-of: 550f7ca98ee0 ("ceph: give up on paths longer than PATH_MAX")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- fs/ceph/acl.c        |   6 +-
- fs/ceph/addr.c       | 279 +++++++++--------
- fs/ceph/caps.c       | 710 +++++++++++++++++++++++++------------------
- fs/ceph/crypto.c     |  39 ++-
- fs/ceph/debugfs.c    |   6 +-
- fs/ceph/dir.c        | 218 +++++++------
- fs/ceph/export.c     |  39 +--
- fs/ceph/file.c       | 245 ++++++++-------
- fs/ceph/inode.c      | 485 ++++++++++++++++-------------
- fs/ceph/ioctl.c      |  13 +-
- fs/ceph/locks.c      |  57 ++--
- fs/ceph/mds_client.c | 558 +++++++++++++++++++---------------
- fs/ceph/mdsmap.c     |  24 +-
- fs/ceph/metric.c     |   5 +-
- fs/ceph/quota.c      |  29 +-
- fs/ceph/snap.c       | 174 ++++++-----
- fs/ceph/super.c      |  70 +++--
- fs/ceph/super.h      |   6 +
- fs/ceph/xattr.c      |  96 +++---
- 19 files changed, 1747 insertions(+), 1312 deletions(-)
-
-diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
-index c53a1d220622..e95841961397 100644
---- a/fs/ceph/acl.c
-+++ b/fs/ceph/acl.c
-@@ -15,6 +15,7 @@
- #include <linux/slab.h>
- #include "super.h"
-+#include "mds_client.h"
- static inline void ceph_set_cached_acl(struct inode *inode,
-                                       int type, struct posix_acl *acl)
-@@ -31,6 +32,7 @@ static inline void ceph_set_cached_acl(struct inode *inode,
- struct posix_acl *ceph_get_acl(struct inode *inode, int type, bool rcu)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int size;
-       unsigned int retry_cnt = 0;
-       const char *name;
-@@ -72,8 +74,8 @@ struct posix_acl *ceph_get_acl(struct inode *inode, int type, bool rcu)
-       } else if (size == -ENODATA || size == 0) {
-               acl = NULL;
-       } else {
--              pr_err_ratelimited("get acl %llx.%llx failed, err=%d\n",
--                                 ceph_vinop(inode), size);
-+              pr_err_ratelimited_client(cl, "%llx.%llx failed, err=%d\n",
-+                                        ceph_vinop(inode), size);
-               acl = ERR_PTR(-EIO);
-       }
-diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
-index 2c92de964c5a..ffd3ff5ae99b 100644
---- a/fs/ceph/addr.c
-+++ b/fs/ceph/addr.c
-@@ -79,18 +79,18 @@ static inline struct ceph_snap_context *page_snap_context(struct page *page)
-  */
- static bool ceph_dirty_folio(struct address_space *mapping, struct folio *folio)
- {
--      struct inode *inode;
-+      struct inode *inode = mapping->host;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci;
-       struct ceph_snap_context *snapc;
-       if (folio_test_dirty(folio)) {
--              dout("%p dirty_folio %p idx %lu -- already dirty\n",
--                   mapping->host, folio, folio->index);
-+              doutc(cl, "%llx.%llx %p idx %lu -- already dirty\n",
-+                    ceph_vinop(inode), folio, folio->index);
-               VM_BUG_ON_FOLIO(!folio_test_private(folio), folio);
-               return false;
-       }
--      inode = mapping->host;
-       ci = ceph_inode(inode);
-       /* dirty the head */
-@@ -110,12 +110,12 @@ static bool ceph_dirty_folio(struct address_space *mapping, struct folio *folio)
-       if (ci->i_wrbuffer_ref == 0)
-               ihold(inode);
-       ++ci->i_wrbuffer_ref;
--      dout("%p dirty_folio %p idx %lu head %d/%d -> %d/%d "
--           "snapc %p seq %lld (%d snaps)\n",
--           mapping->host, folio, folio->index,
--           ci->i_wrbuffer_ref-1, ci->i_wrbuffer_ref_head-1,
--           ci->i_wrbuffer_ref, ci->i_wrbuffer_ref_head,
--           snapc, snapc->seq, snapc->num_snaps);
-+      doutc(cl, "%llx.%llx %p idx %lu head %d/%d -> %d/%d "
-+            "snapc %p seq %lld (%d snaps)\n",
-+            ceph_vinop(inode), folio, folio->index,
-+            ci->i_wrbuffer_ref-1, ci->i_wrbuffer_ref_head-1,
-+            ci->i_wrbuffer_ref, ci->i_wrbuffer_ref_head,
-+            snapc, snapc->seq, snapc->num_snaps);
-       spin_unlock(&ci->i_ceph_lock);
-       /*
-@@ -136,23 +136,22 @@ static bool ceph_dirty_folio(struct address_space *mapping, struct folio *folio)
- static void ceph_invalidate_folio(struct folio *folio, size_t offset,
-                               size_t length)
- {
--      struct inode *inode;
--      struct ceph_inode_info *ci;
-+      struct inode *inode = folio->mapping->host;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-+      struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_snap_context *snapc;
--      inode = folio->mapping->host;
--      ci = ceph_inode(inode);
-       if (offset != 0 || length != folio_size(folio)) {
--              dout("%p invalidate_folio idx %lu partial dirty page %zu~%zu\n",
--                   inode, folio->index, offset, length);
-+              doutc(cl, "%llx.%llx idx %lu partial dirty page %zu~%zu\n",
-+                    ceph_vinop(inode), folio->index, offset, length);
-               return;
-       }
-       WARN_ON(!folio_test_locked(folio));
-       if (folio_test_private(folio)) {
--              dout("%p invalidate_folio idx %lu full dirty page\n",
--                   inode, folio->index);
-+              doutc(cl, "%llx.%llx idx %lu full dirty page\n",
-+                    ceph_vinop(inode), folio->index);
-               snapc = folio_detach_private(folio);
-               ceph_put_wrbuffer_cap_refs(ci, 1, snapc);
-@@ -165,10 +164,10 @@ static void ceph_invalidate_folio(struct folio *folio, size_t offset,
- static bool ceph_release_folio(struct folio *folio, gfp_t gfp)
- {
-       struct inode *inode = folio->mapping->host;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
--      dout("%llx:%llx release_folio idx %lu (%sdirty)\n",
--           ceph_vinop(inode),
--           folio->index, folio_test_dirty(folio) ? "" : "not ");
-+      doutc(cl, "%llx.%llx idx %lu (%sdirty)\n", ceph_vinop(inode),
-+            folio->index, folio_test_dirty(folio) ? "" : "not ");
-       if (folio_test_private(folio))
-               return false;
-@@ -244,6 +243,7 @@ static void finish_netfs_read(struct ceph_osd_request *req)
- {
-       struct inode *inode = req->r_inode;
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_data *osd_data = osd_req_op_extent_osd_data(req, 0);
-       struct netfs_io_subrequest *subreq = req->r_priv;
-       struct ceph_osd_req_op *op = &req->r_ops[0];
-@@ -253,8 +253,8 @@ static void finish_netfs_read(struct ceph_osd_request *req)
-       ceph_update_read_metrics(&fsc->mdsc->metric, req->r_start_latency,
-                                req->r_end_latency, osd_data->length, err);
--      dout("%s: result %d subreq->len=%zu i_size=%lld\n", __func__, req->r_result,
--           subreq->len, i_size_read(req->r_inode));
-+      doutc(cl, "result %d subreq->len=%zu i_size=%lld\n", req->r_result,
-+            subreq->len, i_size_read(req->r_inode));
-       /* no object means success but no data */
-       if (err == -ENOENT)
-@@ -348,6 +348,7 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
-       struct inode *inode = rreq->inode;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_request *req = NULL;
-       struct ceph_vino vino = ceph_vino(inode);
-       struct iov_iter iter;
-@@ -384,7 +385,8 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
-                       goto out;
-       }
--      dout("%s: pos=%llu orig_len=%zu len=%llu\n", __func__, subreq->start, subreq->len, len);
-+      doutc(cl, "%llx.%llx pos=%llu orig_len=%zu len=%llu\n",
-+            ceph_vinop(inode), subreq->start, subreq->len, len);
-       iov_iter_xarray(&iter, ITER_DEST, &rreq->mapping->i_pages, subreq->start, len);
-@@ -401,8 +403,8 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
-               err = iov_iter_get_pages_alloc2(&iter, &pages, len, &page_off);
-               if (err < 0) {
--                      dout("%s: iov_ter_get_pages_alloc returned %d\n",
--                           __func__, err);
-+                      doutc(cl, "%llx.%llx failed to allocate pages, %d\n",
-+                            ceph_vinop(inode), err);
-                       goto out;
-               }
-@@ -430,12 +432,13 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
-       ceph_osdc_put_request(req);
-       if (err)
-               netfs_subreq_terminated(subreq, err, false);
--      dout("%s: result %d\n", __func__, err);
-+      doutc(cl, "%llx.%llx result %d\n", ceph_vinop(inode), err);
- }
- static int ceph_init_request(struct netfs_io_request *rreq, struct file *file)
- {
-       struct inode *inode = rreq->inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int got = 0, want = CEPH_CAP_FILE_CACHE;
-       struct ceph_netfs_request_data *priv;
-       int ret = 0;
-@@ -467,12 +470,12 @@ static int ceph_init_request(struct netfs_io_request *rreq, struct file *file)
-        */
-       ret = ceph_try_get_caps(inode, CEPH_CAP_FILE_RD, want, true, &got);
-       if (ret < 0) {
--              dout("start_read %p, error getting cap\n", inode);
-+              doutc(cl, "%llx.%llx, error getting cap\n", ceph_vinop(inode));
-               goto out;
-       }
-       if (!(got & want)) {
--              dout("start_read %p, no cache cap\n", inode);
-+              doutc(cl, "%llx.%llx, no cache cap\n", ceph_vinop(inode));
-               ret = -EACCES;
-               goto out;
-       }
-@@ -567,13 +570,14 @@ get_oldest_context(struct inode *inode, struct ceph_writeback_ctl *ctl,
-                  struct ceph_snap_context *page_snapc)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_snap_context *snapc = NULL;
-       struct ceph_cap_snap *capsnap = NULL;
-       spin_lock(&ci->i_ceph_lock);
-       list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {
--              dout(" cap_snap %p snapc %p has %d dirty pages\n", capsnap,
--                   capsnap->context, capsnap->dirty_pages);
-+              doutc(cl, " capsnap %p snapc %p has %d dirty pages\n",
-+                    capsnap, capsnap->context, capsnap->dirty_pages);
-               if (!capsnap->dirty_pages)
-                       continue;
-@@ -605,8 +609,8 @@ get_oldest_context(struct inode *inode, struct ceph_writeback_ctl *ctl,
-       }
-       if (!snapc && ci->i_wrbuffer_ref_head) {
-               snapc = ceph_get_snap_context(ci->i_head_snapc);
--              dout(" head snapc %p has %d dirty pages\n",
--                   snapc, ci->i_wrbuffer_ref_head);
-+              doutc(cl, " head snapc %p has %d dirty pages\n", snapc,
-+                    ci->i_wrbuffer_ref_head);
-               if (ctl) {
-                       ctl->i_size = i_size_read(inode);
-                       ctl->truncate_size = ci->i_truncate_size;
-@@ -663,6 +667,7 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-       struct inode *inode = page->mapping->host;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_snap_context *snapc, *oldest;
-       loff_t page_off = page_offset(page);
-       int err;
-@@ -674,7 +679,8 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-       bool caching = ceph_is_cache_enabled(inode);
-       struct page *bounce_page = NULL;
--      dout("writepage %p idx %lu\n", page, page->index);
-+      doutc(cl, "%llx.%llx page %p idx %lu\n", ceph_vinop(inode), page,
-+            page->index);
-       if (ceph_inode_is_shutdown(inode))
-               return -EIO;
-@@ -682,13 +688,14 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-       /* verify this is a writeable snap context */
-       snapc = page_snap_context(page);
-       if (!snapc) {
--              dout("writepage %p page %p not dirty?\n", inode, page);
-+              doutc(cl, "%llx.%llx page %p not dirty?\n", ceph_vinop(inode),
-+                    page);
-               return 0;
-       }
-       oldest = get_oldest_context(inode, &ceph_wbc, snapc);
-       if (snapc->seq > oldest->seq) {
--              dout("writepage %p page %p snapc %p not writeable - noop\n",
--                   inode, page, snapc);
-+              doutc(cl, "%llx.%llx page %p snapc %p not writeable - noop\n",
-+                    ceph_vinop(inode), page, snapc);
-               /* we should only noop if called by kswapd */
-               WARN_ON(!(current->flags & PF_MEMALLOC));
-               ceph_put_snap_context(oldest);
-@@ -699,8 +706,8 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-       /* is this a partial page at end of file? */
-       if (page_off >= ceph_wbc.i_size) {
--              dout("folio at %lu beyond eof %llu\n", folio->index,
--                              ceph_wbc.i_size);
-+              doutc(cl, "%llx.%llx folio at %lu beyond eof %llu\n",
-+                    ceph_vinop(inode), folio->index, ceph_wbc.i_size);
-               folio_invalidate(folio, 0, folio_size(folio));
-               return 0;
-       }
-@@ -709,8 +716,9 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-               len = ceph_wbc.i_size - page_off;
-       wlen = IS_ENCRYPTED(inode) ? round_up(len, CEPH_FSCRYPT_BLOCK_SIZE) : len;
--      dout("writepage %p page %p index %lu on %llu~%llu snapc %p seq %lld\n",
--           inode, page, page->index, page_off, wlen, snapc, snapc->seq);
-+      doutc(cl, "%llx.%llx page %p index %lu on %llu~%llu snapc %p seq %lld\n",
-+            ceph_vinop(inode), page, page->index, page_off, wlen, snapc,
-+            snapc->seq);
-       if (atomic_long_inc_return(&fsc->writeback_count) >
-           CONGESTION_ON_THRESH(fsc->mount_options->congestion_kb))
-@@ -751,8 +759,9 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-       osd_req_op_extent_osd_data_pages(req, 0,
-                       bounce_page ? &bounce_page : &page, wlen, 0,
-                       false, false);
--      dout("writepage %llu~%llu (%llu bytes, %sencrypted)\n",
--           page_off, len, wlen, IS_ENCRYPTED(inode) ? "" : "not ");
-+      doutc(cl, "%llx.%llx %llu~%llu (%llu bytes, %sencrypted)\n",
-+            ceph_vinop(inode), page_off, len, wlen,
-+            IS_ENCRYPTED(inode) ? "" : "not ");
-       req->r_mtime = inode->i_mtime;
-       ceph_osdc_start_request(osdc, req);
-@@ -771,19 +780,21 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
-                       wbc = &tmp_wbc;
-               if (err == -ERESTARTSYS) {
-                       /* killed by SIGKILL */
--                      dout("writepage interrupted page %p\n", page);
-+                      doutc(cl, "%llx.%llx interrupted page %p\n",
-+                            ceph_vinop(inode), page);
-                       redirty_page_for_writepage(wbc, page);
-                       end_page_writeback(page);
-                       return err;
-               }
-               if (err == -EBLOCKLISTED)
-                       fsc->blocklisted = true;
--              dout("writepage setting page/mapping error %d %p\n",
--                   err, page);
-+              doutc(cl, "%llx.%llx setting page/mapping error %d %p\n",
-+                    ceph_vinop(inode), err, page);
-               mapping_set_error(&inode->i_data, err);
-               wbc->pages_skipped++;
-       } else {
--              dout("writepage cleaned page %p\n", page);
-+              doutc(cl, "%llx.%llx cleaned page %p\n",
-+                    ceph_vinop(inode), page);
-               err = 0;  /* vfs expects us to return 0 */
-       }
-       oldest = detach_page_private(page);
-@@ -835,6 +846,7 @@ static void writepages_finish(struct ceph_osd_request *req)
- {
-       struct inode *inode = req->r_inode;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_osd_data *osd_data;
-       struct page *page;
-       int num_pages, total_pages = 0;
-@@ -846,7 +858,7 @@ static void writepages_finish(struct ceph_osd_request *req)
-       unsigned int len = 0;
-       bool remove_page;
--      dout("writepages_finish %p rc %d\n", inode, rc);
-+      doutc(cl, "%llx.%llx rc %d\n", ceph_vinop(inode), rc);
-       if (rc < 0) {
-               mapping_set_error(mapping, rc);
-               ceph_set_error_write(ci);
-@@ -868,8 +880,10 @@ static void writepages_finish(struct ceph_osd_request *req)
-       /* clean all pages */
-       for (i = 0; i < req->r_num_ops; i++) {
-               if (req->r_ops[i].op != CEPH_OSD_OP_WRITE) {
--                      pr_warn("%s incorrect op %d req %p index %d tid %llu\n",
--                              __func__, req->r_ops[i].op, req, i, req->r_tid);
-+                      pr_warn_client(cl,
-+                              "%llx.%llx incorrect op %d req %p index %d tid %llu\n",
-+                              ceph_vinop(inode), req->r_ops[i].op, req, i,
-+                              req->r_tid);
-                       break;
-               }
-@@ -896,7 +910,7 @@ static void writepages_finish(struct ceph_osd_request *req)
-                       ceph_put_snap_context(detach_page_private(page));
-                       end_page_writeback(page);
--                      dout("unlocking %p\n", page);
-+                      doutc(cl, "unlocking %p\n", page);
-                       if (remove_page)
-                               generic_error_remove_page(inode->i_mapping,
-@@ -904,8 +918,9 @@ static void writepages_finish(struct ceph_osd_request *req)
-                       unlock_page(page);
-               }
--              dout("writepages_finish %p wrote %llu bytes cleaned %d pages\n",
--                   inode, osd_data->length, rc >= 0 ? num_pages : 0);
-+              doutc(cl, "%llx.%llx wrote %llu bytes cleaned %d pages\n",
-+                    ceph_vinop(inode), osd_data->length,
-+                    rc >= 0 ? num_pages : 0);
-               release_pages(osd_data->pages, num_pages);
-       }
-@@ -933,6 +948,7 @@ static int ceph_writepages_start(struct address_space *mapping,
-       struct inode *inode = mapping->host;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_vino vino = ceph_vino(inode);
-       pgoff_t index, start_index, end = -1;
-       struct ceph_snap_context *snapc = NULL, *last_snapc = NULL, *pgsnapc;
-@@ -950,15 +966,15 @@ static int ceph_writepages_start(struct address_space *mapping,
-           fsc->write_congested)
-               return 0;
--      dout("writepages_start %p (mode=%s)\n", inode,
--           wbc->sync_mode == WB_SYNC_NONE ? "NONE" :
--           (wbc->sync_mode == WB_SYNC_ALL ? "ALL" : "HOLD"));
-+      doutc(cl, "%llx.%llx (mode=%s)\n", ceph_vinop(inode),
-+            wbc->sync_mode == WB_SYNC_NONE ? "NONE" :
-+            (wbc->sync_mode == WB_SYNC_ALL ? "ALL" : "HOLD"));
-       if (ceph_inode_is_shutdown(inode)) {
-               if (ci->i_wrbuffer_ref > 0) {
--                      pr_warn_ratelimited(
--                              "writepage_start %p %lld forced umount\n",
--                              inode, ceph_ino(inode));
-+                      pr_warn_ratelimited_client(cl,
-+                              "%llx.%llx %lld forced umount\n",
-+                              ceph_vinop(inode), ceph_ino(inode));
-               }
-               mapping_set_error(mapping, -EIO);
-               return -EIO; /* we're in a forced umount, don't write! */
-@@ -982,11 +998,11 @@ static int ceph_writepages_start(struct address_space *mapping,
-       if (!snapc) {
-               /* hmm, why does writepages get called when there
-                  is no dirty data? */
--              dout(" no snap context with dirty data?\n");
-+              doutc(cl, " no snap context with dirty data?\n");
-               goto out;
-       }
--      dout(" oldest snapc is %p seq %lld (%d snaps)\n",
--           snapc, snapc->seq, snapc->num_snaps);
-+      doutc(cl, " oldest snapc is %p seq %lld (%d snaps)\n", snapc,
-+            snapc->seq, snapc->num_snaps);
-       should_loop = false;
-       if (ceph_wbc.head_snapc && snapc != last_snapc) {
-@@ -996,13 +1012,13 @@ static int ceph_writepages_start(struct address_space *mapping,
-                       end = -1;
-                       if (index > 0)
-                               should_loop = true;
--                      dout(" cyclic, start at %lu\n", index);
-+                      doutc(cl, " cyclic, start at %lu\n", index);
-               } else {
-                       index = wbc->range_start >> PAGE_SHIFT;
-                       end = wbc->range_end >> PAGE_SHIFT;
-                       if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
-                               range_whole = true;
--                      dout(" not cyclic, %lu to %lu\n", index, end);
-+                      doutc(cl, " not cyclic, %lu to %lu\n", index, end);
-               }
-       } else if (!ceph_wbc.head_snapc) {
-               /* Do not respect wbc->range_{start,end}. Dirty pages
-@@ -1011,7 +1027,7 @@ static int ceph_writepages_start(struct address_space *mapping,
-                * associated with 'snapc' get written */
-               if (index > 0)
-                       should_loop = true;
--              dout(" non-head snapc, range whole\n");
-+              doutc(cl, " non-head snapc, range whole\n");
-       }
-       if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
-@@ -1034,12 +1050,12 @@ static int ceph_writepages_start(struct address_space *mapping,
- get_more_pages:
-               nr_folios = filemap_get_folios_tag(mapping, &index,
-                                                  end, tag, &fbatch);
--              dout("pagevec_lookup_range_tag got %d\n", nr_folios);
-+              doutc(cl, "pagevec_lookup_range_tag got %d\n", nr_folios);
-               if (!nr_folios && !locked_pages)
-                       break;
-               for (i = 0; i < nr_folios && locked_pages < max_pages; i++) {
-                       page = &fbatch.folios[i]->page;
--                      dout("? %p idx %lu\n", page, page->index);
-+                      doutc(cl, "? %p idx %lu\n", page, page->index);
-                       if (locked_pages == 0)
-                               lock_page(page);  /* first page */
-                       else if (!trylock_page(page))
-@@ -1048,15 +1064,15 @@ static int ceph_writepages_start(struct address_space *mapping,
-                       /* only dirty pages, or our accounting breaks */
-                       if (unlikely(!PageDirty(page)) ||
-                           unlikely(page->mapping != mapping)) {
--                              dout("!dirty or !mapping %p\n", page);
-+                              doutc(cl, "!dirty or !mapping %p\n", page);
-                               unlock_page(page);
-                               continue;
-                       }
-                       /* only if matching snap context */
-                       pgsnapc = page_snap_context(page);
-                       if (pgsnapc != snapc) {
--                              dout("page snapc %p %lld != oldest %p %lld\n",
--                                   pgsnapc, pgsnapc->seq, snapc, snapc->seq);
-+                              doutc(cl, "page snapc %p %lld != oldest %p %lld\n",
-+                                    pgsnapc, pgsnapc->seq, snapc, snapc->seq);
-                               if (!should_loop &&
-                                   !ceph_wbc.head_snapc &&
-                                   wbc->sync_mode != WB_SYNC_NONE)
-@@ -1067,8 +1083,8 @@ static int ceph_writepages_start(struct address_space *mapping,
-                       if (page_offset(page) >= ceph_wbc.i_size) {
-                               struct folio *folio = page_folio(page);
--                              dout("folio at %lu beyond eof %llu\n",
--                                   folio->index, ceph_wbc.i_size);
-+                              doutc(cl, "folio at %lu beyond eof %llu\n",
-+                                    folio->index, ceph_wbc.i_size);
-                               if ((ceph_wbc.size_stable ||
-                                   folio_pos(folio) >= i_size_read(inode)) &&
-                                   folio_clear_dirty_for_io(folio))
-@@ -1078,23 +1094,23 @@ static int ceph_writepages_start(struct address_space *mapping,
-                               continue;
-                       }
-                       if (strip_unit_end && (page->index > strip_unit_end)) {
--                              dout("end of strip unit %p\n", page);
-+                              doutc(cl, "end of strip unit %p\n", page);
-                               unlock_page(page);
-                               break;
-                       }
-                       if (PageWriteback(page) || PageFsCache(page)) {
-                               if (wbc->sync_mode == WB_SYNC_NONE) {
--                                      dout("%p under writeback\n", page);
-+                                      doutc(cl, "%p under writeback\n", page);
-                                       unlock_page(page);
-                                       continue;
-                               }
--                              dout("waiting on writeback %p\n", page);
-+                              doutc(cl, "waiting on writeback %p\n", page);
-                               wait_on_page_writeback(page);
-                               wait_on_page_fscache(page);
-                       }
-                       if (!clear_page_dirty_for_io(page)) {
--                              dout("%p !clear_page_dirty_for_io\n", page);
-+                              doutc(cl, "%p !clear_page_dirty_for_io\n", page);
-                               unlock_page(page);
-                               continue;
-                       }
-@@ -1149,8 +1165,8 @@ static int ceph_writepages_start(struct address_space *mapping,
-                       }
-                       /* note position of first page in fbatch */
--                      dout("%p will write page %p idx %lu\n",
--                           inode, page, page->index);
-+                      doutc(cl, "%llx.%llx will write page %p idx %lu\n",
-+                            ceph_vinop(inode), page, page->index);
-                       if (atomic_long_inc_return(&fsc->writeback_count) >
-                           CONGESTION_ON_THRESH(
-@@ -1164,8 +1180,9 @@ static int ceph_writepages_start(struct address_space *mapping,
-                                               locked_pages ? GFP_NOWAIT : GFP_NOFS);
-                               if (IS_ERR(pages[locked_pages])) {
-                                       if (PTR_ERR(pages[locked_pages]) == -EINVAL)
--                                              pr_err("%s: inode->i_blkbits=%hhu\n",
--                                                      __func__, inode->i_blkbits);
-+                                              pr_err_client(cl,
-+                                                      "inode->i_blkbits=%hhu\n",
-+                                                      inode->i_blkbits);
-                                       /* better not fail on first page! */
-                                       BUG_ON(locked_pages == 0);
-                                       pages[locked_pages] = NULL;
-@@ -1199,7 +1216,7 @@ static int ceph_writepages_start(struct address_space *mapping,
-                       if (nr_folios && i == nr_folios &&
-                           locked_pages < max_pages) {
--                              dout("reached end fbatch, trying for more\n");
-+                              doutc(cl, "reached end fbatch, trying for more\n");
-                               folio_batch_release(&fbatch);
-                               goto get_more_pages;
-                       }
-@@ -1260,8 +1277,8 @@ static int ceph_writepages_start(struct address_space *mapping,
-                               /* Start a new extent */
-                               osd_req_op_extent_dup_last(req, op_idx,
-                                                          cur_offset - offset);
--                              dout("writepages got pages at %llu~%llu\n",
--                                   offset, len);
-+                              doutc(cl, "got pages at %llu~%llu\n", offset,
-+                                    len);
-                               osd_req_op_extent_osd_data_pages(req, op_idx,
-                                                       data_pages, len, 0,
-                                                       from_pool, false);
-@@ -1294,12 +1311,13 @@ static int ceph_writepages_start(struct address_space *mapping,
-               if (IS_ENCRYPTED(inode))
-                       len = round_up(len, CEPH_FSCRYPT_BLOCK_SIZE);
--              dout("writepages got pages at %llu~%llu\n", offset, len);
-+              doutc(cl, "got pages at %llu~%llu\n", offset, len);
-               if (IS_ENCRYPTED(inode) &&
-                   ((offset | len) & ~CEPH_FSCRYPT_BLOCK_MASK))
--                      pr_warn("%s: bad encrypted write offset=%lld len=%llu\n",
--                              __func__, offset, len);
-+                      pr_warn_client(cl,
-+                              "bad encrypted write offset=%lld len=%llu\n",
-+                              offset, len);
-               osd_req_op_extent_osd_data_pages(req, op_idx, data_pages, len,
-                                                0, from_pool, false);
-@@ -1351,14 +1369,14 @@ static int ceph_writepages_start(struct address_space *mapping,
-                       done = true;
- release_folios:
--              dout("folio_batch release on %d folios (%p)\n", (int)fbatch.nr,
--                   fbatch.nr ? fbatch.folios[0] : NULL);
-+              doutc(cl, "folio_batch release on %d folios (%p)\n",
-+                    (int)fbatch.nr, fbatch.nr ? fbatch.folios[0] : NULL);
-               folio_batch_release(&fbatch);
-       }
-       if (should_loop && !done) {
-               /* more to do; loop back to beginning of file */
--              dout("writepages looping back to beginning of file\n");
-+              doutc(cl, "looping back to beginning of file\n");
-               end = start_index - 1; /* OK even when start_index == 0 */
-               /* to write dirty pages associated with next snapc,
-@@ -1396,7 +1414,8 @@ static int ceph_writepages_start(struct address_space *mapping,
- out:
-       ceph_osdc_put_request(req);
-       ceph_put_snap_context(last_snapc);
--      dout("writepages dend - startone, rc = %d\n", rc);
-+      doutc(cl, "%llx.%llx dend - startone, rc = %d\n", ceph_vinop(inode),
-+            rc);
-       return rc;
- }
-@@ -1430,11 +1449,12 @@ static struct ceph_snap_context *
- ceph_find_incompatible(struct page *page)
- {
-       struct inode *inode = page->mapping->host;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       if (ceph_inode_is_shutdown(inode)) {
--              dout(" page %p %llx:%llx is shutdown\n", page,
--                   ceph_vinop(inode));
-+              doutc(cl, " %llx.%llx page %p is shutdown\n",
-+                    ceph_vinop(inode), page);
-               return ERR_PTR(-ESTALE);
-       }
-@@ -1455,13 +1475,15 @@ ceph_find_incompatible(struct page *page)
-               if (snapc->seq > oldest->seq) {
-                       /* not writeable -- return it for the caller to deal with */
-                       ceph_put_snap_context(oldest);
--                      dout(" page %p snapc %p not current or oldest\n", page, snapc);
-+                      doutc(cl, " %llx.%llx page %p snapc %p not current or oldest\n",
-+                            ceph_vinop(inode), page, snapc);
-                       return ceph_get_snap_context(snapc);
-               }
-               ceph_put_snap_context(oldest);
-               /* yay, writeable, do it now (without dropping page lock) */
--              dout(" page %p snapc %p not current, but oldest\n", page, snapc);
-+              doutc(cl, " %llx.%llx page %p snapc %p not current, but oldest\n",
-+                    ceph_vinop(inode), page, snapc);
-               if (clear_page_dirty_for_io(page)) {
-                       int r = writepage_nounlock(page, NULL);
-                       if (r < 0)
-@@ -1530,10 +1552,11 @@ static int ceph_write_end(struct file *file, struct address_space *mapping,
- {
-       struct folio *folio = page_folio(subpage);
-       struct inode *inode = file_inode(file);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       bool check_cap = false;
--      dout("write_end file %p inode %p folio %p %d~%d (%d)\n", file,
--           inode, folio, (int)pos, (int)copied, (int)len);
-+      doutc(cl, "%llx.%llx file %p folio %p %d~%d (%d)\n", ceph_vinop(inode),
-+            file, folio, (int)pos, (int)copied, (int)len);
-       if (!folio_test_uptodate(folio)) {
-               /* just return that nothing was copied on a short copy */
-@@ -1593,6 +1616,7 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
-       struct vm_area_struct *vma = vmf->vma;
-       struct inode *inode = file_inode(vma->vm_file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_file_info *fi = vma->vm_file->private_data;
-       loff_t off = (loff_t)vmf->pgoff << PAGE_SHIFT;
-       int want, got, err;
-@@ -1604,8 +1628,8 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
-       ceph_block_sigs(&oldset);
--      dout("filemap_fault %p %llx.%llx %llu trying to get caps\n",
--           inode, ceph_vinop(inode), off);
-+      doutc(cl, "%llx.%llx %llu trying to get caps\n",
-+            ceph_vinop(inode), off);
-       if (fi->fmode & CEPH_FILE_MODE_LAZY)
-               want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO;
-       else
-@@ -1616,8 +1640,8 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
-       if (err < 0)
-               goto out_restore;
--      dout("filemap_fault %p %llu got cap refs on %s\n",
--           inode, off, ceph_cap_string(got));
-+      doutc(cl, "%llx.%llx %llu got cap refs on %s\n", ceph_vinop(inode),
-+            off, ceph_cap_string(got));
-       if ((got & (CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO)) ||
-           !ceph_has_inline_data(ci)) {
-@@ -1625,8 +1649,8 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
-               ceph_add_rw_context(fi, &rw_ctx);
-               ret = filemap_fault(vmf);
-               ceph_del_rw_context(fi, &rw_ctx);
--              dout("filemap_fault %p %llu drop cap refs %s ret %x\n",
--                   inode, off, ceph_cap_string(got), ret);
-+              doutc(cl, "%llx.%llx %llu drop cap refs %s ret %x\n",
-+                    ceph_vinop(inode), off, ceph_cap_string(got), ret);
-       } else
-               err = -EAGAIN;
-@@ -1667,8 +1691,8 @@ static vm_fault_t ceph_filemap_fault(struct vm_fault *vmf)
-               ret = VM_FAULT_MAJOR | VM_FAULT_LOCKED;
- out_inline:
-               filemap_invalidate_unlock_shared(mapping);
--              dout("filemap_fault %p %llu read inline data ret %x\n",
--                   inode, off, ret);
-+              doutc(cl, "%llx.%llx %llu read inline data ret %x\n",
-+                    ceph_vinop(inode), off, ret);
-       }
- out_restore:
-       ceph_restore_sigs(&oldset);
-@@ -1682,6 +1706,7 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
- {
-       struct vm_area_struct *vma = vmf->vma;
-       struct inode *inode = file_inode(vma->vm_file);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_file_info *fi = vma->vm_file->private_data;
-       struct ceph_cap_flush *prealloc_cf;
-@@ -1708,8 +1733,8 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
-       else
-               len = offset_in_thp(page, size);
--      dout("page_mkwrite %p %llx.%llx %llu~%zd getting caps i_size %llu\n",
--           inode, ceph_vinop(inode), off, len, size);
-+      doutc(cl, "%llx.%llx %llu~%zd getting caps i_size %llu\n",
-+            ceph_vinop(inode), off, len, size);
-       if (fi->fmode & CEPH_FILE_MODE_LAZY)
-               want = CEPH_CAP_FILE_BUFFER | CEPH_CAP_FILE_LAZYIO;
-       else
-@@ -1720,8 +1745,8 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
-       if (err < 0)
-               goto out_free;
--      dout("page_mkwrite %p %llu~%zd got cap refs on %s\n",
--           inode, off, len, ceph_cap_string(got));
-+      doutc(cl, "%llx.%llx %llu~%zd got cap refs on %s\n", ceph_vinop(inode),
-+            off, len, ceph_cap_string(got));
-       /* Update time before taking page lock */
-       file_update_time(vma->vm_file);
-@@ -1769,8 +1794,8 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
-                       __mark_inode_dirty(inode, dirty);
-       }
--      dout("page_mkwrite %p %llu~%zd dropping cap refs on %s ret %x\n",
--           inode, off, len, ceph_cap_string(got), ret);
-+      doutc(cl, "%llx.%llx %llu~%zd dropping cap refs on %s ret %x\n",
-+            ceph_vinop(inode), off, len, ceph_cap_string(got), ret);
-       ceph_put_cap_refs_async(ci, got);
- out_free:
-       ceph_restore_sigs(&oldset);
-@@ -1784,6 +1809,7 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
- void ceph_fill_inline_data(struct inode *inode, struct page *locked_page,
-                          char *data, size_t len)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct address_space *mapping = inode->i_mapping;
-       struct page *page;
-@@ -1804,8 +1830,8 @@ void ceph_fill_inline_data(struct inode *inode, struct page *locked_page,
-               }
-       }
--      dout("fill_inline_data %p %llx.%llx len %zu locked_page %p\n",
--           inode, ceph_vinop(inode), len, locked_page);
-+      doutc(cl, "%p %llx.%llx len %zu locked_page %p\n", inode,
-+            ceph_vinop(inode), len, locked_page);
-       if (len > 0) {
-               void *kaddr = kmap_atomic(page);
-@@ -1830,6 +1856,7 @@ int ceph_uninline_data(struct file *file)
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_request *req = NULL;
-       struct ceph_cap_flush *prealloc_cf = NULL;
-       struct folio *folio = NULL;
-@@ -1842,8 +1869,8 @@ int ceph_uninline_data(struct file *file)
-       inline_version = ci->i_inline_version;
-       spin_unlock(&ci->i_ceph_lock);
--      dout("uninline_data %p %llx.%llx inline_version %llu\n",
--           inode, ceph_vinop(inode), inline_version);
-+      doutc(cl, "%llx.%llx inline_version %llu\n", ceph_vinop(inode),
-+            inline_version);
-       if (ceph_inode_is_shutdown(inode)) {
-               err = -EIO;
-@@ -1955,8 +1982,8 @@ int ceph_uninline_data(struct file *file)
-       }
- out:
-       ceph_free_cap_flush(prealloc_cf);
--      dout("uninline_data %p %llx.%llx inline_version %llu = %d\n",
--           inode, ceph_vinop(inode), inline_version, err);
-+      doutc(cl, "%llx.%llx inline_version %llu = %d\n",
-+            ceph_vinop(inode), inline_version, err);
-       return err;
- }
-@@ -1985,6 +2012,7 @@ static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
- {
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(&ci->netfs.inode);
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_request *rd_req = NULL, *wr_req = NULL;
-       struct rb_node **p, *parent;
-       struct ceph_pool_perm *perm;
-@@ -2019,10 +2047,10 @@ static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
-               goto out;
-       if (pool_ns)
--              dout("__ceph_pool_perm_get pool %lld ns %.*s no perm cached\n",
--                   pool, (int)pool_ns->len, pool_ns->str);
-+              doutc(cl, "pool %lld ns %.*s no perm cached\n", pool,
-+                    (int)pool_ns->len, pool_ns->str);
-       else
--              dout("__ceph_pool_perm_get pool %lld no perm cached\n", pool);
-+              doutc(cl, "pool %lld no perm cached\n", pool);
-       down_write(&mdsc->pool_perm_rwsem);
-       p = &mdsc->pool_perm_tree.rb_node;
-@@ -2147,15 +2175,16 @@ static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
-       if (!err)
-               err = have;
-       if (pool_ns)
--              dout("__ceph_pool_perm_get pool %lld ns %.*s result = %d\n",
--                   pool, (int)pool_ns->len, pool_ns->str, err);
-+              doutc(cl, "pool %lld ns %.*s result = %d\n", pool,
-+                    (int)pool_ns->len, pool_ns->str, err);
-       else
--              dout("__ceph_pool_perm_get pool %lld result = %d\n", pool, err);
-+              doutc(cl, "pool %lld result = %d\n", pool, err);
-       return err;
- }
- int ceph_pool_perm_check(struct inode *inode, int need)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_string *pool_ns;
-       s64 pool;
-@@ -2185,13 +2214,11 @@ int ceph_pool_perm_check(struct inode *inode, int need)
- check:
-       if (flags & CEPH_I_POOL_PERM) {
-               if ((need & CEPH_CAP_FILE_RD) && !(flags & CEPH_I_POOL_RD)) {
--                      dout("ceph_pool_perm_check pool %lld no read perm\n",
--                           pool);
-+                      doutc(cl, "pool %lld no read perm\n", pool);
-                       return -EPERM;
-               }
-               if ((need & CEPH_CAP_FILE_WR) && !(flags & CEPH_I_POOL_WR)) {
--                      dout("ceph_pool_perm_check pool %lld no write perm\n",
--                           pool);
-+                      doutc(cl, "pool %lld no write perm\n", pool);
-                       return -EPERM;
-               }
-               return 0;
-diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
-index 00045b8eadd1..a0e3f51b5d02 100644
---- a/fs/ceph/caps.c
-+++ b/fs/ceph/caps.c
-@@ -186,10 +186,10 @@ static void __ceph_unreserve_caps(struct ceph_mds_client *mdsc, int nr_caps)
-                       mdsc->caps_avail_count += nr_caps;
-               }
--              dout("%s: caps %d = %d used + %d resv + %d avail\n",
--                   __func__,
--                   mdsc->caps_total_count, mdsc->caps_use_count,
--                   mdsc->caps_reserve_count, mdsc->caps_avail_count);
-+              doutc(mdsc->fsc->client,
-+                    "caps %d = %d used + %d resv + %d avail\n",
-+                    mdsc->caps_total_count, mdsc->caps_use_count,
-+                    mdsc->caps_reserve_count, mdsc->caps_avail_count);
-               BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count +
-                                                mdsc->caps_reserve_count +
-                                                mdsc->caps_avail_count);
-@@ -202,6 +202,7 @@ static void __ceph_unreserve_caps(struct ceph_mds_client *mdsc, int nr_caps)
- int ceph_reserve_caps(struct ceph_mds_client *mdsc,
-                     struct ceph_cap_reservation *ctx, int need)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       int i, j;
-       struct ceph_cap *cap;
-       int have;
-@@ -212,7 +213,7 @@ int ceph_reserve_caps(struct ceph_mds_client *mdsc,
-       struct ceph_mds_session *s;
-       LIST_HEAD(newcaps);
--      dout("reserve caps ctx=%p need=%d\n", ctx, need);
-+      doutc(cl, "ctx=%p need=%d\n", ctx, need);
-       /* first reserve any caps that are already allocated */
-       spin_lock(&mdsc->caps_list_lock);
-@@ -272,8 +273,8 @@ int ceph_reserve_caps(struct ceph_mds_client *mdsc,
-                       continue;
-               }
--              pr_warn("reserve caps ctx=%p ENOMEM need=%d got=%d\n",
--                      ctx, need, have + alloc);
-+              pr_warn_client(cl, "ctx=%p ENOMEM need=%d got=%d\n", ctx, need,
-+                             have + alloc);
-               err = -ENOMEM;
-               break;
-       }
-@@ -298,20 +299,21 @@ int ceph_reserve_caps(struct ceph_mds_client *mdsc,
-       spin_unlock(&mdsc->caps_list_lock);
--      dout("reserve caps ctx=%p %d = %d used + %d resv + %d avail\n",
--           ctx, mdsc->caps_total_count, mdsc->caps_use_count,
--           mdsc->caps_reserve_count, mdsc->caps_avail_count);
-+      doutc(cl, "ctx=%p %d = %d used + %d resv + %d avail\n", ctx,
-+            mdsc->caps_total_count, mdsc->caps_use_count,
-+            mdsc->caps_reserve_count, mdsc->caps_avail_count);
-       return err;
- }
- void ceph_unreserve_caps(struct ceph_mds_client *mdsc,
-                        struct ceph_cap_reservation *ctx)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       bool reclaim = false;
-       if (!ctx->count)
-               return;
--      dout("unreserve caps ctx=%p count=%d\n", ctx, ctx->count);
-+      doutc(cl, "ctx=%p count=%d\n", ctx, ctx->count);
-       spin_lock(&mdsc->caps_list_lock);
-       __ceph_unreserve_caps(mdsc, ctx->count);
-       ctx->count = 0;
-@@ -328,6 +330,7 @@ void ceph_unreserve_caps(struct ceph_mds_client *mdsc,
- struct ceph_cap *ceph_get_cap(struct ceph_mds_client *mdsc,
-                             struct ceph_cap_reservation *ctx)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_cap *cap = NULL;
-       /* temporary, until we do something about cap import/export */
-@@ -359,9 +362,9 @@ struct ceph_cap *ceph_get_cap(struct ceph_mds_client *mdsc,
-       }
-       spin_lock(&mdsc->caps_list_lock);
--      dout("get_cap ctx=%p (%d) %d = %d used + %d resv + %d avail\n",
--           ctx, ctx->count, mdsc->caps_total_count, mdsc->caps_use_count,
--           mdsc->caps_reserve_count, mdsc->caps_avail_count);
-+      doutc(cl, "ctx=%p (%d) %d = %d used + %d resv + %d avail\n", ctx,
-+            ctx->count, mdsc->caps_total_count, mdsc->caps_use_count,
-+            mdsc->caps_reserve_count, mdsc->caps_avail_count);
-       BUG_ON(!ctx->count);
-       BUG_ON(ctx->count > mdsc->caps_reserve_count);
-       BUG_ON(list_empty(&mdsc->caps_list));
-@@ -382,10 +385,12 @@ struct ceph_cap *ceph_get_cap(struct ceph_mds_client *mdsc,
- void ceph_put_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-+
-       spin_lock(&mdsc->caps_list_lock);
--      dout("put_cap %p %d = %d used + %d resv + %d avail\n",
--           cap, mdsc->caps_total_count, mdsc->caps_use_count,
--           mdsc->caps_reserve_count, mdsc->caps_avail_count);
-+      doutc(cl, "%p %d = %d used + %d resv + %d avail\n", cap,
-+            mdsc->caps_total_count, mdsc->caps_use_count,
-+            mdsc->caps_reserve_count, mdsc->caps_avail_count);
-       mdsc->caps_use_count--;
-       /*
-        * Keep some preallocated caps around (ceph_min_count), to
-@@ -491,11 +496,13 @@ static void __insert_cap_node(struct ceph_inode_info *ci,
- static void __cap_set_timeouts(struct ceph_mds_client *mdsc,
-                              struct ceph_inode_info *ci)
- {
-+      struct inode *inode = &ci->netfs.inode;
-       struct ceph_mount_options *opt = mdsc->fsc->mount_options;
-+
-       ci->i_hold_caps_max = round_jiffies(jiffies +
-                                           opt->caps_wanted_delay_max * HZ);
--      dout("__cap_set_timeouts %p %lu\n", &ci->netfs.inode,
--           ci->i_hold_caps_max - jiffies);
-+      doutc(mdsc->fsc->client, "%p %llx.%llx %lu\n", inode,
-+            ceph_vinop(inode), ci->i_hold_caps_max - jiffies);
- }
- /*
-@@ -509,8 +516,11 @@ static void __cap_set_timeouts(struct ceph_mds_client *mdsc,
- static void __cap_delay_requeue(struct ceph_mds_client *mdsc,
-                               struct ceph_inode_info *ci)
- {
--      dout("__cap_delay_requeue %p flags 0x%lx at %lu\n", &ci->netfs.inode,
--           ci->i_ceph_flags, ci->i_hold_caps_max);
-+      struct inode *inode = &ci->netfs.inode;
-+
-+      doutc(mdsc->fsc->client, "%p %llx.%llx flags 0x%lx at %lu\n",
-+            inode, ceph_vinop(inode), ci->i_ceph_flags,
-+            ci->i_hold_caps_max);
-       if (!mdsc->stopping) {
-               spin_lock(&mdsc->cap_delay_lock);
-               if (!list_empty(&ci->i_cap_delay_list)) {
-@@ -533,7 +543,9 @@ static void __cap_delay_requeue(struct ceph_mds_client *mdsc,
- static void __cap_delay_requeue_front(struct ceph_mds_client *mdsc,
-                                     struct ceph_inode_info *ci)
- {
--      dout("__cap_delay_requeue_front %p\n", &ci->netfs.inode);
-+      struct inode *inode = &ci->netfs.inode;
-+
-+      doutc(mdsc->fsc->client, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-       spin_lock(&mdsc->cap_delay_lock);
-       ci->i_ceph_flags |= CEPH_I_FLUSH;
-       if (!list_empty(&ci->i_cap_delay_list))
-@@ -550,7 +562,9 @@ static void __cap_delay_requeue_front(struct ceph_mds_client *mdsc,
- static void __cap_delay_cancel(struct ceph_mds_client *mdsc,
-                              struct ceph_inode_info *ci)
- {
--      dout("__cap_delay_cancel %p\n", &ci->netfs.inode);
-+      struct inode *inode = &ci->netfs.inode;
-+
-+      doutc(mdsc->fsc->client, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-       if (list_empty(&ci->i_cap_delay_list))
-               return;
-       spin_lock(&mdsc->cap_delay_lock);
-@@ -562,6 +576,9 @@ static void __cap_delay_cancel(struct ceph_mds_client *mdsc,
- static void __check_cap_issue(struct ceph_inode_info *ci, struct ceph_cap *cap,
-                             unsigned issued)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-+
-       unsigned had = __ceph_caps_issued(ci, NULL);
-       lockdep_assert_held(&ci->i_ceph_lock);
-@@ -586,7 +603,7 @@ static void __check_cap_issue(struct ceph_inode_info *ci, struct ceph_cap *cap,
-               if (issued & CEPH_CAP_FILE_SHARED)
-                       atomic_inc(&ci->i_shared_gen);
-               if (S_ISDIR(ci->netfs.inode.i_mode)) {
--                      dout(" marking %p NOT complete\n", &ci->netfs.inode);
-+                      doutc(cl, " marking %p NOT complete\n", inode);
-                       __ceph_dir_clear_complete(ci);
-               }
-       }
-@@ -636,6 +653,7 @@ void ceph_add_cap(struct inode *inode,
-                 struct ceph_cap **new_cap)
- {
-       struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_cap *cap;
-       int mds = session->s_mds;
-@@ -644,8 +662,9 @@ void ceph_add_cap(struct inode *inode,
-       lockdep_assert_held(&ci->i_ceph_lock);
--      dout("add_cap %p mds%d cap %llx %s seq %d\n", inode,
--           session->s_mds, cap_id, ceph_cap_string(issued), seq);
-+      doutc(cl, "%p %llx.%llx mds%d cap %llx %s seq %d\n", inode,
-+            ceph_vinop(inode), session->s_mds, cap_id,
-+            ceph_cap_string(issued), seq);
-       gen = atomic_read(&session->s_cap_gen);
-@@ -723,9 +742,9 @@ void ceph_add_cap(struct inode *inode,
-       actual_wanted = __ceph_caps_wanted(ci);
-       if ((wanted & ~actual_wanted) ||
-           (issued & ~actual_wanted & CEPH_CAP_ANY_WR)) {
--              dout(" issued %s, mds wanted %s, actual %s, queueing\n",
--                   ceph_cap_string(issued), ceph_cap_string(wanted),
--                   ceph_cap_string(actual_wanted));
-+              doutc(cl, "issued %s, mds wanted %s, actual %s, queueing\n",
-+                    ceph_cap_string(issued), ceph_cap_string(wanted),
-+                    ceph_cap_string(actual_wanted));
-               __cap_delay_requeue(mdsc, ci);
-       }
-@@ -742,9 +761,9 @@ void ceph_add_cap(struct inode *inode,
-               WARN_ON(ci->i_auth_cap == cap);
-       }
--      dout("add_cap inode %p (%llx.%llx) cap %p %s now %s seq %d mds%d\n",
--           inode, ceph_vinop(inode), cap, ceph_cap_string(issued),
--           ceph_cap_string(issued|cap->issued), seq, mds);
-+      doutc(cl, "inode %p %llx.%llx cap %p %s now %s seq %d mds%d\n",
-+            inode, ceph_vinop(inode), cap, ceph_cap_string(issued),
-+            ceph_cap_string(issued|cap->issued), seq, mds);
-       cap->cap_id = cap_id;
-       cap->issued = issued;
-       cap->implemented |= issued;
-@@ -766,6 +785,8 @@ void ceph_add_cap(struct inode *inode,
-  */
- static int __cap_is_valid(struct ceph_cap *cap)
- {
-+      struct inode *inode = &cap->ci->netfs.inode;
-+      struct ceph_client *cl = cap->session->s_mdsc->fsc->client;
-       unsigned long ttl;
-       u32 gen;
-@@ -773,9 +794,9 @@ static int __cap_is_valid(struct ceph_cap *cap)
-       ttl = cap->session->s_cap_ttl;
-       if (cap->cap_gen < gen || time_after_eq(jiffies, ttl)) {
--              dout("__cap_is_valid %p cap %p issued %s "
--                   "but STALE (gen %u vs %u)\n", &cap->ci->netfs.inode,
--                   cap, ceph_cap_string(cap->issued), cap->cap_gen, gen);
-+              doutc(cl, "%p %llx.%llx cap %p issued %s but STALE (gen %u vs %u)\n",
-+                    inode, ceph_vinop(inode), cap,
-+                    ceph_cap_string(cap->issued), cap->cap_gen, gen);
-               return 0;
-       }
-@@ -789,6 +810,8 @@ static int __cap_is_valid(struct ceph_cap *cap)
-  */
- int __ceph_caps_issued(struct ceph_inode_info *ci, int *implemented)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int have = ci->i_snap_caps;
-       struct ceph_cap *cap;
-       struct rb_node *p;
-@@ -799,8 +822,8 @@ int __ceph_caps_issued(struct ceph_inode_info *ci, int *implemented)
-               cap = rb_entry(p, struct ceph_cap, ci_node);
-               if (!__cap_is_valid(cap))
-                       continue;
--              dout("__ceph_caps_issued %p cap %p issued %s\n",
--                   &ci->netfs.inode, cap, ceph_cap_string(cap->issued));
-+              doutc(cl, "%p %llx.%llx cap %p issued %s\n", inode,
-+                    ceph_vinop(inode), cap, ceph_cap_string(cap->issued));
-               have |= cap->issued;
-               if (implemented)
-                       *implemented |= cap->implemented;
-@@ -843,16 +866,18 @@ int __ceph_caps_issued_other(struct ceph_inode_info *ci, struct ceph_cap *ocap)
-  */
- static void __touch_cap(struct ceph_cap *cap)
- {
-+      struct inode *inode = &cap->ci->netfs.inode;
-       struct ceph_mds_session *s = cap->session;
-+      struct ceph_client *cl = s->s_mdsc->fsc->client;
-       spin_lock(&s->s_cap_lock);
-       if (!s->s_cap_iterator) {
--              dout("__touch_cap %p cap %p mds%d\n", &cap->ci->netfs.inode, cap,
--                   s->s_mds);
-+              doutc(cl, "%p %llx.%llx cap %p mds%d\n", inode,
-+                    ceph_vinop(inode), cap, s->s_mds);
-               list_move_tail(&cap->session_caps, &s->s_caps);
-       } else {
--              dout("__touch_cap %p cap %p mds%d NOP, iterating over caps\n",
--                   &cap->ci->netfs.inode, cap, s->s_mds);
-+              doutc(cl, "%p %llx.%llx cap %p mds%d NOP, iterating over caps\n",
-+                    inode, ceph_vinop(inode), cap, s->s_mds);
-       }
-       spin_unlock(&s->s_cap_lock);
- }
-@@ -864,15 +889,16 @@ static void __touch_cap(struct ceph_cap *cap)
-  */
- int __ceph_caps_issued_mask(struct ceph_inode_info *ci, int mask, int touch)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_cap *cap;
-       struct rb_node *p;
-       int have = ci->i_snap_caps;
-       if ((have & mask) == mask) {
--              dout("__ceph_caps_issued_mask ino 0x%llx snap issued %s"
--                   " (mask %s)\n", ceph_ino(&ci->netfs.inode),
--                   ceph_cap_string(have),
--                   ceph_cap_string(mask));
-+              doutc(cl, "mask %p %llx.%llx snap issued %s (mask %s)\n",
-+                    inode, ceph_vinop(inode), ceph_cap_string(have),
-+                    ceph_cap_string(mask));
-               return 1;
-       }
-@@ -881,10 +907,10 @@ int __ceph_caps_issued_mask(struct ceph_inode_info *ci, int mask, int touch)
-               if (!__cap_is_valid(cap))
-                       continue;
-               if ((cap->issued & mask) == mask) {
--                      dout("__ceph_caps_issued_mask ino 0x%llx cap %p issued %s"
--                           " (mask %s)\n", ceph_ino(&ci->netfs.inode), cap,
--                           ceph_cap_string(cap->issued),
--                           ceph_cap_string(mask));
-+                      doutc(cl, "mask %p %llx.%llx cap %p issued %s (mask %s)\n",
-+                            inode, ceph_vinop(inode), cap,
-+                            ceph_cap_string(cap->issued),
-+                            ceph_cap_string(mask));
-                       if (touch)
-                               __touch_cap(cap);
-                       return 1;
-@@ -893,10 +919,10 @@ int __ceph_caps_issued_mask(struct ceph_inode_info *ci, int mask, int touch)
-               /* does a combination of caps satisfy mask? */
-               have |= cap->issued;
-               if ((have & mask) == mask) {
--                      dout("__ceph_caps_issued_mask ino 0x%llx combo issued %s"
--                           " (mask %s)\n", ceph_ino(&ci->netfs.inode),
--                           ceph_cap_string(cap->issued),
--                           ceph_cap_string(mask));
-+                      doutc(cl, "mask %p %llx.%llx combo issued %s (mask %s)\n",
-+                            inode, ceph_vinop(inode),
-+                            ceph_cap_string(cap->issued),
-+                            ceph_cap_string(mask));
-                       if (touch) {
-                               struct rb_node *q;
-@@ -954,13 +980,14 @@ int __ceph_caps_revoking_other(struct ceph_inode_info *ci,
- int ceph_caps_revoking(struct ceph_inode_info *ci, int mask)
- {
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int ret;
-       spin_lock(&ci->i_ceph_lock);
-       ret = __ceph_caps_revoking_other(ci, NULL, mask);
-       spin_unlock(&ci->i_ceph_lock);
--      dout("ceph_caps_revoking %p %s = %d\n", inode,
--           ceph_cap_string(mask), ret);
-+      doutc(cl, "%p %llx.%llx %s = %d\n", inode, ceph_vinop(inode),
-+            ceph_cap_string(mask), ret);
-       return ret;
- }
-@@ -1107,19 +1134,21 @@ int ceph_is_any_caps(struct inode *inode)
- void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
- {
-       struct ceph_mds_session *session = cap->session;
-+      struct ceph_client *cl = session->s_mdsc->fsc->client;
-       struct ceph_inode_info *ci = cap->ci;
-+      struct inode *inode = &ci->netfs.inode;
-       struct ceph_mds_client *mdsc;
-       int removed = 0;
-       /* 'ci' being NULL means the remove have already occurred */
-       if (!ci) {
--              dout("%s: cap inode is NULL\n", __func__);
-+              doutc(cl, "inode is NULL\n");
-               return;
-       }
-       lockdep_assert_held(&ci->i_ceph_lock);
--      dout("__ceph_remove_cap %p from %p\n", cap, &ci->netfs.inode);
-+      doutc(cl, "%p from %p %llx.%llx\n", cap, inode, ceph_vinop(inode));
-       mdsc = ceph_inode_to_fs_client(&ci->netfs.inode)->mdsc;
-@@ -1132,8 +1161,8 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
-       spin_lock(&session->s_cap_lock);
-       if (session->s_cap_iterator == cap) {
-               /* not yet, we are iterating over this very cap */
--              dout("__ceph_remove_cap  delaying %p removal from session %p\n",
--                   cap, cap->session);
-+              doutc(cl, "delaying %p removal from session %p\n", cap,
-+                    cap->session);
-       } else {
-               list_del_init(&cap->session_caps);
-               session->s_nr_caps--;
-@@ -1186,7 +1215,7 @@ void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
-       /* 'ci' being NULL means the remove have already occurred */
-       if (!ci) {
--              dout("%s: cap inode is NULL\n", __func__);
-+              doutc(mdsc->fsc->client, "inode is NULL\n");
-               return;
-       }
-@@ -1228,15 +1257,19 @@ static void encode_cap_msg(struct ceph_msg *msg, struct cap_msg_args *arg)
- {
-       struct ceph_mds_caps *fc;
-       void *p;
--      struct ceph_osd_client *osdc = &arg->session->s_mdsc->fsc->client->osdc;
--
--      dout("%s %s %llx %llx caps %s wanted %s dirty %s seq %u/%u tid %llu/%llu mseq %u follows %lld size %llu/%llu xattr_ver %llu xattr_len %d\n",
--           __func__, ceph_cap_op_name(arg->op), arg->cid, arg->ino,
--           ceph_cap_string(arg->caps), ceph_cap_string(arg->wanted),
--           ceph_cap_string(arg->dirty), arg->seq, arg->issue_seq,
--           arg->flush_tid, arg->oldest_flush_tid, arg->mseq, arg->follows,
--           arg->size, arg->max_size, arg->xattr_version,
--           arg->xattr_buf ? (int)arg->xattr_buf->vec.iov_len : 0);
-+      struct ceph_mds_client *mdsc = arg->session->s_mdsc;
-+      struct ceph_osd_client *osdc = &mdsc->fsc->client->osdc;
-+
-+      doutc(mdsc->fsc->client,
-+            "%s %llx %llx caps %s wanted %s dirty %s seq %u/%u"
-+            " tid %llu/%llu mseq %u follows %lld size %llu/%llu"
-+            " xattr_ver %llu xattr_len %d\n",
-+            ceph_cap_op_name(arg->op), arg->cid, arg->ino,
-+            ceph_cap_string(arg->caps), ceph_cap_string(arg->wanted),
-+            ceph_cap_string(arg->dirty), arg->seq, arg->issue_seq,
-+            arg->flush_tid, arg->oldest_flush_tid, arg->mseq, arg->follows,
-+            arg->size, arg->max_size, arg->xattr_version,
-+            arg->xattr_buf ? (int)arg->xattr_buf->vec.iov_len : 0);
-       msg->hdr.version = cpu_to_le16(12);
-       msg->hdr.tid = cpu_to_le64(arg->flush_tid);
-@@ -1373,6 +1406,7 @@ static void __prep_cap(struct cap_msg_args *arg, struct ceph_cap *cap,
- {
-       struct ceph_inode_info *ci = cap->ci;
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int held, revoking;
-       lockdep_assert_held(&ci->i_ceph_lock);
-@@ -1381,10 +1415,10 @@ static void __prep_cap(struct cap_msg_args *arg, struct ceph_cap *cap,
-       revoking = cap->implemented & ~cap->issued;
-       retain &= ~revoking;
--      dout("%s %p cap %p session %p %s -> %s (revoking %s)\n",
--           __func__, inode, cap, cap->session,
--           ceph_cap_string(held), ceph_cap_string(held & retain),
--           ceph_cap_string(revoking));
-+      doutc(cl, "%p %llx.%llx cap %p session %p %s -> %s (revoking %s)\n",
-+            inode, ceph_vinop(inode), cap, cap->session,
-+            ceph_cap_string(held), ceph_cap_string(held & retain),
-+            ceph_cap_string(revoking));
-       BUG_ON((retain & CEPH_CAP_PIN) == 0);
-       ci->i_ceph_flags &= ~CEPH_I_FLUSH;
-@@ -1500,13 +1534,16 @@ static void __send_cap(struct cap_msg_args *arg, struct ceph_inode_info *ci)
- {
-       struct ceph_msg *msg;
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       msg = ceph_msg_new(CEPH_MSG_CLIENT_CAPS, cap_msg_size(arg), GFP_NOFS,
-                          false);
-       if (!msg) {
--              pr_err("error allocating cap msg: ino (%llx.%llx) flushing %s tid %llu, requeuing cap.\n",
--                     ceph_vinop(inode), ceph_cap_string(arg->dirty),
--                     arg->flush_tid);
-+              pr_err_client(cl,
-+                            "error allocating cap msg: ino (%llx.%llx)"
-+                            " flushing %s tid %llu, requeuing cap.\n",
-+                            ceph_vinop(inode), ceph_cap_string(arg->dirty),
-+                            arg->flush_tid);
-               spin_lock(&ci->i_ceph_lock);
-               __cap_delay_requeue(arg->session->s_mdsc, ci);
-               spin_unlock(&ci->i_ceph_lock);
-@@ -1596,11 +1633,13 @@ static void __ceph_flush_snaps(struct ceph_inode_info *ci,
- {
-       struct inode *inode = &ci->netfs.inode;
-       struct ceph_mds_client *mdsc = session->s_mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_cap_snap *capsnap;
-       u64 oldest_flush_tid = 0;
-       u64 first_tid = 1, last_tid = 0;
--      dout("__flush_snaps %p session %p\n", inode, session);
-+      doutc(cl, "%p %llx.%llx session %p\n", inode, ceph_vinop(inode),
-+            session);
-       list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {
-               /*
-@@ -1615,7 +1654,7 @@ static void __ceph_flush_snaps(struct ceph_inode_info *ci,
-               /* only flush each capsnap once */
-               if (capsnap->cap_flush.tid > 0) {
--                      dout(" already flushed %p, skipping\n", capsnap);
-+                      doutc(cl, "already flushed %p, skipping\n", capsnap);
-                       continue;
-               }
-@@ -1647,8 +1686,8 @@ static void __ceph_flush_snaps(struct ceph_inode_info *ci,
-               int ret;
-               if (!(cap && cap->session == session)) {
--                      dout("__flush_snaps %p auth cap %p not mds%d, "
--                           "stop\n", inode, cap, session->s_mds);
-+                      doutc(cl, "%p %llx.%llx auth cap %p not mds%d, stop\n",
-+                            inode, ceph_vinop(inode), cap, session->s_mds);
-                       break;
-               }
-@@ -1669,15 +1708,17 @@ static void __ceph_flush_snaps(struct ceph_inode_info *ci,
-               refcount_inc(&capsnap->nref);
-               spin_unlock(&ci->i_ceph_lock);
--              dout("__flush_snaps %p capsnap %p tid %llu %s\n",
--                   inode, capsnap, cf->tid, ceph_cap_string(capsnap->dirty));
-+              doutc(cl, "%p %llx.%llx capsnap %p tid %llu %s\n", inode,
-+                    ceph_vinop(inode), capsnap, cf->tid,
-+                    ceph_cap_string(capsnap->dirty));
-               ret = __send_flush_snap(inode, session, capsnap, cap->mseq,
-                                       oldest_flush_tid);
-               if (ret < 0) {
--                      pr_err("__flush_snaps: error sending cap flushsnap, "
--                             "ino (%llx.%llx) tid %llu follows %llu\n",
--                              ceph_vinop(inode), cf->tid, capsnap->follows);
-+                      pr_err_client(cl, "error sending cap flushsnap, "
-+                                    "ino (%llx.%llx) tid %llu follows %llu\n",
-+                                    ceph_vinop(inode), cf->tid,
-+                                    capsnap->follows);
-               }
-               ceph_put_cap_snap(capsnap);
-@@ -1690,27 +1731,28 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
- {
-       struct inode *inode = &ci->netfs.inode;
-       struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_mds_session *session = NULL;
-       bool need_put = false;
-       int mds;
--      dout("ceph_flush_snaps %p\n", inode);
-+      doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-       if (psession)
-               session = *psession;
- retry:
-       spin_lock(&ci->i_ceph_lock);
-       if (!(ci->i_ceph_flags & CEPH_I_FLUSH_SNAPS)) {
--              dout(" no capsnap needs flush, doing nothing\n");
-+              doutc(cl, " no capsnap needs flush, doing nothing\n");
-               goto out;
-       }
-       if (!ci->i_auth_cap) {
--              dout(" no auth cap (migrating?), doing nothing\n");
-+              doutc(cl, " no auth cap (migrating?), doing nothing\n");
-               goto out;
-       }
-       mds = ci->i_auth_cap->session->s_mds;
-       if (session && session->s_mds != mds) {
--              dout(" oops, wrong session %p mutex\n", session);
-+              doutc(cl, " oops, wrong session %p mutex\n", session);
-               ceph_put_mds_session(session);
-               session = NULL;
-       }
-@@ -1756,21 +1798,23 @@ int __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask,
-       struct ceph_mds_client *mdsc =
-               ceph_sb_to_fs_client(ci->netfs.inode.i_sb)->mdsc;
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int was = ci->i_dirty_caps;
-       int dirty = 0;
-       lockdep_assert_held(&ci->i_ceph_lock);
-       if (!ci->i_auth_cap) {
--              pr_warn("__mark_dirty_caps %p %llx mask %s, "
--                      "but no auth cap (session was closed?)\n",
--                      inode, ceph_ino(inode), ceph_cap_string(mask));
-+              pr_warn_client(cl, "%p %llx.%llx mask %s, "
-+                             "but no auth cap (session was closed?)\n",
-+                              inode, ceph_vinop(inode),
-+                              ceph_cap_string(mask));
-               return 0;
-       }
--      dout("__mark_dirty_caps %p %s dirty %s -> %s\n", &ci->netfs.inode,
--           ceph_cap_string(mask), ceph_cap_string(was),
--           ceph_cap_string(was | mask));
-+      doutc(cl, "%p %llx.%llx %s dirty %s -> %s\n", inode,
-+            ceph_vinop(inode), ceph_cap_string(mask),
-+            ceph_cap_string(was), ceph_cap_string(was | mask));
-       ci->i_dirty_caps |= mask;
-       if (was == 0) {
-               struct ceph_mds_session *session = ci->i_auth_cap->session;
-@@ -1783,8 +1827,9 @@ int __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask,
-                       ci->i_head_snapc = ceph_get_snap_context(
-                               ci->i_snap_realm->cached_context);
-               }
--              dout(" inode %p now dirty snapc %p auth cap %p\n",
--                   &ci->netfs.inode, ci->i_head_snapc, ci->i_auth_cap);
-+              doutc(cl, "%p %llx.%llx now dirty snapc %p auth cap %p\n",
-+                    inode, ceph_vinop(inode), ci->i_head_snapc,
-+                    ci->i_auth_cap);
-               BUG_ON(!list_empty(&ci->i_dirty_item));
-               spin_lock(&mdsc->cap_dirty_lock);
-               list_add(&ci->i_dirty_item, &session->s_cap_dirty);
-@@ -1878,6 +1923,7 @@ static u64 __mark_caps_flushing(struct inode *inode,
-                               u64 *oldest_flush_tid)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_cap_flush *cf = NULL;
-       int flushing;
-@@ -1888,13 +1934,13 @@ static u64 __mark_caps_flushing(struct inode *inode,
-       BUG_ON(!ci->i_prealloc_cap_flush);
-       flushing = ci->i_dirty_caps;
--      dout("__mark_caps_flushing flushing %s, flushing_caps %s -> %s\n",
--           ceph_cap_string(flushing),
--           ceph_cap_string(ci->i_flushing_caps),
--           ceph_cap_string(ci->i_flushing_caps | flushing));
-+      doutc(cl, "flushing %s, flushing_caps %s -> %s\n",
-+            ceph_cap_string(flushing),
-+            ceph_cap_string(ci->i_flushing_caps),
-+            ceph_cap_string(ci->i_flushing_caps | flushing));
-       ci->i_flushing_caps |= flushing;
-       ci->i_dirty_caps = 0;
--      dout(" inode %p now !dirty\n", inode);
-+      doutc(cl, "%p %llx.%llx now !dirty\n", inode, ceph_vinop(inode));
-       swap(cf, ci->i_prealloc_cap_flush);
-       cf->caps = flushing;
-@@ -1925,6 +1971,7 @@ static int try_nonblocking_invalidate(struct inode *inode)
-       __releases(ci->i_ceph_lock)
-       __acquires(ci->i_ceph_lock)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       u32 invalidating_gen = ci->i_rdcache_gen;
-@@ -1936,12 +1983,13 @@ static int try_nonblocking_invalidate(struct inode *inode)
-       if (inode->i_data.nrpages == 0 &&
-           invalidating_gen == ci->i_rdcache_gen) {
-               /* success. */
--              dout("try_nonblocking_invalidate %p success\n", inode);
-+              doutc(cl, "%p %llx.%llx success\n", inode,
-+                    ceph_vinop(inode));
-               /* save any racing async invalidate some trouble */
-               ci->i_rdcache_revoking = ci->i_rdcache_gen - 1;
-               return 0;
-       }
--      dout("try_nonblocking_invalidate %p failed\n", inode);
-+      doutc(cl, "%p %llx.%llx failed\n", inode, ceph_vinop(inode));
-       return -1;
- }
-@@ -1973,6 +2021,7 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags)
- {
-       struct inode *inode = &ci->netfs.inode;
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_cap *cap;
-       u64 flush_tid, oldest_flush_tid;
-       int file_wanted, used, cap_used;
-@@ -2047,9 +2096,9 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags)
-               }
-       }
--      dout("check_caps %llx.%llx file_want %s used %s dirty %s flushing %s"
--           " issued %s revoking %s retain %s %s%s%s\n", ceph_vinop(inode),
--           ceph_cap_string(file_wanted),
-+      doutc(cl, "%p %llx.%llx file_want %s used %s dirty %s "
-+            "flushing %s issued %s revoking %s retain %s %s%s%s\n",
-+           inode, ceph_vinop(inode), ceph_cap_string(file_wanted),
-            ceph_cap_string(used), ceph_cap_string(ci->i_dirty_caps),
-            ceph_cap_string(ci->i_flushing_caps),
-            ceph_cap_string(issued), ceph_cap_string(revoking),
-@@ -2070,10 +2119,10 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags)
-           (revoking & (CEPH_CAP_FILE_CACHE|
-                        CEPH_CAP_FILE_LAZYIO)) && /*  or revoking cache */
-           !tried_invalidate) {
--              dout("check_caps trying to invalidate on %llx.%llx\n",
--                   ceph_vinop(inode));
-+              doutc(cl, "trying to invalidate on %p %llx.%llx\n",
-+                    inode, ceph_vinop(inode));
-               if (try_nonblocking_invalidate(inode) < 0) {
--                      dout("check_caps queuing invalidate\n");
-+                      doutc(cl, "queuing invalidate\n");
-                       queue_invalidate = true;
-                       ci->i_rdcache_revoking = ci->i_rdcache_gen;
-               }
-@@ -2101,35 +2150,35 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags)
-                       cap_used &= ~ci->i_auth_cap->issued;
-               revoking = cap->implemented & ~cap->issued;
--              dout(" mds%d cap %p used %s issued %s implemented %s revoking %s\n",
--                   cap->mds, cap, ceph_cap_string(cap_used),
--                   ceph_cap_string(cap->issued),
--                   ceph_cap_string(cap->implemented),
--                   ceph_cap_string(revoking));
-+              doutc(cl, " mds%d cap %p used %s issued %s implemented %s revoking %s\n",
-+                    cap->mds, cap, ceph_cap_string(cap_used),
-+                    ceph_cap_string(cap->issued),
-+                    ceph_cap_string(cap->implemented),
-+                    ceph_cap_string(revoking));
-               if (cap == ci->i_auth_cap &&
-                   (cap->issued & CEPH_CAP_FILE_WR)) {
-                       /* request larger max_size from MDS? */
-                       if (ci->i_wanted_max_size > ci->i_max_size &&
-                           ci->i_wanted_max_size > ci->i_requested_max_size) {
--                              dout("requesting new max_size\n");
-+                              doutc(cl, "requesting new max_size\n");
-                               goto ack;
-                       }
-                       /* approaching file_max? */
-                       if (__ceph_should_report_size(ci)) {
--                              dout("i_size approaching max_size\n");
-+                              doutc(cl, "i_size approaching max_size\n");
-                               goto ack;
-                       }
-               }
-               /* flush anything dirty? */
-               if (cap == ci->i_auth_cap) {
-                       if ((flags & CHECK_CAPS_FLUSH) && ci->i_dirty_caps) {
--                              dout("flushing dirty caps\n");
-+                              doutc(cl, "flushing dirty caps\n");
-                               goto ack;
-                       }
-                       if (ci->i_ceph_flags & CEPH_I_FLUSH_SNAPS) {
--                              dout("flushing snap caps\n");
-+                              doutc(cl, "flushing snap caps\n");
-                               goto ack;
-                       }
-               }
-@@ -2137,7 +2186,7 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags)
-               /* completed revocation? going down and there are no caps? */
-               if (revoking) {
-                       if ((revoking & cap_used) == 0) {
--                              dout("completed revocation of %s\n",
-+                              doutc(cl, "completed revocation of %s\n",
-                                     ceph_cap_string(cap->implemented & ~cap->issued));
-                               goto ack;
-                       }
-@@ -2315,6 +2364,7 @@ static int caps_are_flushed(struct inode *inode, u64 flush_tid)
- static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_request *req1 = NULL, *req2 = NULL;
-       int ret, err = 0;
-@@ -2404,8 +2454,9 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode)
-               kfree(sessions);
-       }
--      dout("%s %p wait on tid %llu %llu\n", __func__,
--           inode, req1 ? req1->r_tid : 0ULL, req2 ? req2->r_tid : 0ULL);
-+      doutc(cl, "%p %llx.%llx wait on tid %llu %llu\n", inode,
-+            ceph_vinop(inode), req1 ? req1->r_tid : 0ULL,
-+            req2 ? req2->r_tid : 0ULL);
-       if (req1) {
-               ret = !wait_for_completion_timeout(&req1->r_safe_completion,
-                                       ceph_timeout_jiffies(req1->r_timeout));
-@@ -2431,11 +2482,13 @@ int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync)
- {
-       struct inode *inode = file->f_mapping->host;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       u64 flush_tid;
-       int ret, err;
-       int dirty;
--      dout("fsync %p%s\n", inode, datasync ? " datasync" : "");
-+      doutc(cl, "%p %llx.%llx%s\n", inode, ceph_vinop(inode),
-+            datasync ? " datasync" : "");
-       ret = file_write_and_wait_range(file, start, end);
-       if (datasync)
-@@ -2446,7 +2499,7 @@ int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync)
-               goto out;
-       dirty = try_flush_caps(inode, &flush_tid);
--      dout("fsync dirty caps are %s\n", ceph_cap_string(dirty));
-+      doutc(cl, "dirty caps are %s\n", ceph_cap_string(dirty));
-       err = flush_mdlog_and_wait_inode_unsafe_requests(inode);
-@@ -2467,7 +2520,8 @@ int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync)
-       if (err < 0)
-               ret = err;
- out:
--      dout("fsync %p%s result=%d\n", inode, datasync ? " datasync" : "", ret);
-+      doutc(cl, "%p %llx.%llx%s result=%d\n", inode, ceph_vinop(inode),
-+            datasync ? " datasync" : "", ret);
-       return ret;
- }
-@@ -2480,12 +2534,13 @@ int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync)
- int ceph_write_inode(struct inode *inode, struct writeback_control *wbc)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       u64 flush_tid;
-       int err = 0;
-       int dirty;
-       int wait = (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync);
--      dout("write_inode %p wait=%d\n", inode, wait);
-+      doutc(cl, "%p %llx.%llx wait=%d\n", inode, ceph_vinop(inode), wait);
-       ceph_fscache_unpin_writeback(inode, wbc);
-       if (wait) {
-               err = ceph_wait_on_async_create(inode);
-@@ -2515,6 +2570,7 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
-       __acquires(ci->i_ceph_lock)
- {
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_cap *cap;
-       struct ceph_cap_flush *cf;
-       int ret;
-@@ -2540,8 +2596,8 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
-               cap = ci->i_auth_cap;
-               if (!(cap && cap->session == session)) {
--                      pr_err("%p auth cap %p not mds%d ???\n",
--                             inode, cap, session->s_mds);
-+                      pr_err_client(cl, "%p auth cap %p not mds%d ???\n",
-+                                    inode, cap, session->s_mds);
-                       break;
-               }
-@@ -2550,8 +2606,9 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
-               if (!cf->is_capsnap) {
-                       struct cap_msg_args arg;
--                      dout("kick_flushing_caps %p cap %p tid %llu %s\n",
--                           inode, cap, cf->tid, ceph_cap_string(cf->caps));
-+                      doutc(cl, "%p %llx.%llx cap %p tid %llu %s\n",
-+                            inode, ceph_vinop(inode), cap, cf->tid,
-+                            ceph_cap_string(cf->caps));
-                       __prep_cap(&arg, cap, CEPH_CAP_OP_FLUSH,
-                                        (cf->tid < last_snap_flush ?
-                                         CEPH_CLIENT_CAPS_PENDING_CAPSNAP : 0),
-@@ -2565,9 +2622,9 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
-                       struct ceph_cap_snap *capsnap =
-                                       container_of(cf, struct ceph_cap_snap,
-                                                   cap_flush);
--                      dout("kick_flushing_caps %p capsnap %p tid %llu %s\n",
--                           inode, capsnap, cf->tid,
--                           ceph_cap_string(capsnap->dirty));
-+                      doutc(cl, "%p %llx.%llx capsnap %p tid %llu %s\n",
-+                            inode, ceph_vinop(inode), capsnap, cf->tid,
-+                            ceph_cap_string(capsnap->dirty));
-                       refcount_inc(&capsnap->nref);
-                       spin_unlock(&ci->i_ceph_lock);
-@@ -2575,11 +2632,10 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
-                       ret = __send_flush_snap(inode, session, capsnap, cap->mseq,
-                                               oldest_flush_tid);
-                       if (ret < 0) {
--                              pr_err("kick_flushing_caps: error sending "
--                                      "cap flushsnap, ino (%llx.%llx) "
--                                      "tid %llu follows %llu\n",
--                                      ceph_vinop(inode), cf->tid,
--                                      capsnap->follows);
-+                              pr_err_client(cl, "error sending cap flushsnap,"
-+                                            " %p %llx.%llx tid %llu follows %llu\n",
-+                                            inode, ceph_vinop(inode), cf->tid,
-+                                            capsnap->follows);
-                       }
-                       ceph_put_cap_snap(capsnap);
-@@ -2592,22 +2648,26 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
- void ceph_early_kick_flushing_caps(struct ceph_mds_client *mdsc,
-                                  struct ceph_mds_session *session)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci;
-       struct ceph_cap *cap;
-       u64 oldest_flush_tid;
--      dout("early_kick_flushing_caps mds%d\n", session->s_mds);
-+      doutc(cl, "mds%d\n", session->s_mds);
-       spin_lock(&mdsc->cap_dirty_lock);
-       oldest_flush_tid = __get_oldest_flush_tid(mdsc);
-       spin_unlock(&mdsc->cap_dirty_lock);
-       list_for_each_entry(ci, &session->s_cap_flushing, i_flushing_item) {
-+              struct inode *inode = &ci->netfs.inode;
-+
-               spin_lock(&ci->i_ceph_lock);
-               cap = ci->i_auth_cap;
-               if (!(cap && cap->session == session)) {
--                      pr_err("%p auth cap %p not mds%d ???\n",
--                              &ci->netfs.inode, cap, session->s_mds);
-+                      pr_err_client(cl, "%p %llx.%llx auth cap %p not mds%d ???\n",
-+                                    inode, ceph_vinop(inode), cap,
-+                                    session->s_mds);
-                       spin_unlock(&ci->i_ceph_lock);
-                       continue;
-               }
-@@ -2640,24 +2700,28 @@ void ceph_early_kick_flushing_caps(struct ceph_mds_client *mdsc,
- void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc,
-                            struct ceph_mds_session *session)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci;
-       struct ceph_cap *cap;
-       u64 oldest_flush_tid;
-       lockdep_assert_held(&session->s_mutex);
--      dout("kick_flushing_caps mds%d\n", session->s_mds);
-+      doutc(cl, "mds%d\n", session->s_mds);
-       spin_lock(&mdsc->cap_dirty_lock);
-       oldest_flush_tid = __get_oldest_flush_tid(mdsc);
-       spin_unlock(&mdsc->cap_dirty_lock);
-       list_for_each_entry(ci, &session->s_cap_flushing, i_flushing_item) {
-+              struct inode *inode = &ci->netfs.inode;
-+
-               spin_lock(&ci->i_ceph_lock);
-               cap = ci->i_auth_cap;
-               if (!(cap && cap->session == session)) {
--                      pr_err("%p auth cap %p not mds%d ???\n",
--                              &ci->netfs.inode, cap, session->s_mds);
-+                      pr_err_client(cl, "%p %llx.%llx auth cap %p not mds%d ???\n",
-+                                    inode, ceph_vinop(inode), cap,
-+                                    session->s_mds);
-                       spin_unlock(&ci->i_ceph_lock);
-                       continue;
-               }
-@@ -2674,11 +2738,13 @@ void ceph_kick_flushing_inode_caps(struct ceph_mds_session *session,
- {
-       struct ceph_mds_client *mdsc = session->s_mdsc;
-       struct ceph_cap *cap = ci->i_auth_cap;
-+      struct inode *inode = &ci->netfs.inode;
-       lockdep_assert_held(&ci->i_ceph_lock);
--      dout("%s %p flushing %s\n", __func__, &ci->netfs.inode,
--           ceph_cap_string(ci->i_flushing_caps));
-+      doutc(mdsc->fsc->client, "%p %llx.%llx flushing %s\n",
-+            inode, ceph_vinop(inode),
-+            ceph_cap_string(ci->i_flushing_caps));
-       if (!list_empty(&ci->i_cap_flush_list)) {
-               u64 oldest_flush_tid;
-@@ -2700,6 +2766,9 @@ void ceph_kick_flushing_inode_caps(struct ceph_mds_session *session,
- void ceph_take_cap_refs(struct ceph_inode_info *ci, int got,
-                           bool snap_rwsem_locked)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-+
-       lockdep_assert_held(&ci->i_ceph_lock);
-       if (got & CEPH_CAP_PIN)
-@@ -2720,10 +2789,10 @@ void ceph_take_cap_refs(struct ceph_inode_info *ci, int got,
-       }
-       if (got & CEPH_CAP_FILE_BUFFER) {
-               if (ci->i_wb_ref == 0)
--                      ihold(&ci->netfs.inode);
-+                      ihold(inode);
-               ci->i_wb_ref++;
--              dout("%s %p wb %d -> %d (?)\n", __func__,
--                   &ci->netfs.inode, ci->i_wb_ref-1, ci->i_wb_ref);
-+              doutc(cl, "%p %llx.%llx wb %d -> %d (?)\n", inode,
-+                    ceph_vinop(inode), ci->i_wb_ref-1, ci->i_wb_ref);
-       }
- }
-@@ -2751,19 +2820,22 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int ret = 0;
-       int have, implemented;
-       bool snap_rwsem_locked = false;
--      dout("get_cap_refs %p need %s want %s\n", inode,
--           ceph_cap_string(need), ceph_cap_string(want));
-+      doutc(cl, "%p %llx.%llx need %s want %s\n", inode,
-+            ceph_vinop(inode), ceph_cap_string(need),
-+            ceph_cap_string(want));
- again:
-       spin_lock(&ci->i_ceph_lock);
-       if ((flags & CHECK_FILELOCK) &&
-           (ci->i_ceph_flags & CEPH_I_ERROR_FILELOCK)) {
--              dout("try_get_cap_refs %p error filelock\n", inode);
-+              doutc(cl, "%p %llx.%llx error filelock\n", inode,
-+                    ceph_vinop(inode));
-               ret = -EIO;
-               goto out_unlock;
-       }
-@@ -2783,8 +2855,8 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
-       if (have & need & CEPH_CAP_FILE_WR) {
-               if (endoff >= 0 && endoff > (loff_t)ci->i_max_size) {
--                      dout("get_cap_refs %p endoff %llu > maxsize %llu\n",
--                           inode, endoff, ci->i_max_size);
-+                      doutc(cl, "%p %llx.%llx endoff %llu > maxsize %llu\n",
-+                            inode, ceph_vinop(inode), endoff, ci->i_max_size);
-                       if (endoff > ci->i_requested_max_size)
-                               ret = ci->i_auth_cap ? -EFBIG : -EUCLEAN;
-                       goto out_unlock;
-@@ -2794,7 +2866,8 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
-                * can get a final snapshot value for size+mtime.
-                */
-               if (__ceph_have_pending_cap_snap(ci)) {
--                      dout("get_cap_refs %p cap_snap_pending\n", inode);
-+                      doutc(cl, "%p %llx.%llx cap_snap_pending\n", inode,
-+                            ceph_vinop(inode));
-                       goto out_unlock;
-               }
-       }
-@@ -2812,9 +2885,9 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
-               int not = want & ~(have & need);
-               int revoking = implemented & ~have;
-               int exclude = revoking & not;
--              dout("get_cap_refs %p have %s but not %s (revoking %s)\n",
--                   inode, ceph_cap_string(have), ceph_cap_string(not),
--                   ceph_cap_string(revoking));
-+              doutc(cl, "%p %llx.%llx have %s but not %s (revoking %s)\n",
-+                    inode, ceph_vinop(inode), ceph_cap_string(have),
-+                    ceph_cap_string(not), ceph_cap_string(revoking));
-               if (!exclude || !(exclude & CEPH_CAP_FILE_BUFFER)) {
-                       if (!snap_rwsem_locked &&
-                           !ci->i_head_snapc &&
-@@ -2854,28 +2927,31 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
-                       spin_unlock(&s->s_cap_lock);
-               }
-               if (session_readonly) {
--                      dout("get_cap_refs %p need %s but mds%d readonly\n",
--                           inode, ceph_cap_string(need), ci->i_auth_cap->mds);
-+                      doutc(cl, "%p %llx.%llx need %s but mds%d readonly\n",
-+                            inode, ceph_vinop(inode), ceph_cap_string(need),
-+                            ci->i_auth_cap->mds);
-                       ret = -EROFS;
-                       goto out_unlock;
-               }
-               if (ceph_inode_is_shutdown(inode)) {
--                      dout("get_cap_refs %p inode is shutdown\n", inode);
-+                      doutc(cl, "%p %llx.%llx inode is shutdown\n",
-+                            inode, ceph_vinop(inode));
-                       ret = -ESTALE;
-                       goto out_unlock;
-               }
-               mds_wanted = __ceph_caps_mds_wanted(ci, false);
-               if (need & ~mds_wanted) {
--                      dout("get_cap_refs %p need %s > mds_wanted %s\n",
--                           inode, ceph_cap_string(need),
--                           ceph_cap_string(mds_wanted));
-+                      doutc(cl, "%p %llx.%llx need %s > mds_wanted %s\n",
-+                            inode, ceph_vinop(inode), ceph_cap_string(need),
-+                            ceph_cap_string(mds_wanted));
-                       ret = -EUCLEAN;
-                       goto out_unlock;
-               }
--              dout("get_cap_refs %p have %s need %s\n", inode,
--                   ceph_cap_string(have), ceph_cap_string(need));
-+              doutc(cl, "%p %llx.%llx have %s need %s\n", inode,
-+                    ceph_vinop(inode), ceph_cap_string(have),
-+                    ceph_cap_string(need));
-       }
- out_unlock:
-@@ -2890,8 +2966,8 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
-       else if (ret == 1)
-               ceph_update_cap_hit(&mdsc->metric);
--      dout("get_cap_refs %p ret %d got %s\n", inode,
--           ret, ceph_cap_string(*got));
-+      doutc(cl, "%p %llx.%llx ret %d got %s\n", inode,
-+            ceph_vinop(inode), ret, ceph_cap_string(*got));
-       return ret;
- }
-@@ -2903,13 +2979,14 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
- static void check_max_size(struct inode *inode, loff_t endoff)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int check = 0;
-       /* do we need to explicitly request a larger max_size? */
-       spin_lock(&ci->i_ceph_lock);
-       if (endoff >= ci->i_max_size && endoff > ci->i_wanted_max_size) {
--              dout("write %p at large endoff %llu, req max_size\n",
--                   inode, endoff);
-+              doutc(cl, "write %p %llx.%llx at large endoff %llu, req max_size\n",
-+                    inode, ceph_vinop(inode), endoff);
-               ci->i_wanted_max_size = endoff;
-       }
-       /* duplicate ceph_check_caps()'s logic */
-@@ -3119,10 +3196,12 @@ void ceph_get_cap_refs(struct ceph_inode_info *ci, int caps)
- static int ceph_try_drop_cap_snap(struct ceph_inode_info *ci,
-                                 struct ceph_cap_snap *capsnap)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-+
-       if (!capsnap->need_flush &&
-           !capsnap->writing && !capsnap->dirty_pages) {
--              dout("dropping cap_snap %p follows %llu\n",
--                   capsnap, capsnap->follows);
-+              doutc(cl, "%p follows %llu\n", capsnap, capsnap->follows);
-               BUG_ON(capsnap->cap_flush.tid > 0);
-               ceph_put_snap_context(capsnap->context);
-               if (!list_is_last(&capsnap->ci_item, &ci->i_cap_snaps))
-@@ -3154,6 +3233,7 @@ static void __ceph_put_cap_refs(struct ceph_inode_info *ci, int had,
-                               enum put_cap_refs_mode mode)
- {
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int last = 0, put = 0, flushsnaps = 0, wake = 0;
-       bool check_flushsnaps = false;
-@@ -3176,8 +3256,8 @@ static void __ceph_put_cap_refs(struct ceph_inode_info *ci, int had,
-                       put++;
-                       check_flushsnaps = true;
-               }
--              dout("put_cap_refs %p wb %d -> %d (?)\n",
--                   inode, ci->i_wb_ref+1, ci->i_wb_ref);
-+              doutc(cl, "%p %llx.%llx wb %d -> %d (?)\n", inode,
-+                    ceph_vinop(inode), ci->i_wb_ref+1, ci->i_wb_ref);
-       }
-       if (had & CEPH_CAP_FILE_WR) {
-               if (--ci->i_wr_ref == 0) {
-@@ -3217,8 +3297,8 @@ static void __ceph_put_cap_refs(struct ceph_inode_info *ci, int had,
-       }
-       spin_unlock(&ci->i_ceph_lock);
--      dout("put_cap_refs %p had %s%s%s\n", inode, ceph_cap_string(had),
--           last ? " last" : "", put ? " put" : "");
-+      doutc(cl, "%p %llx.%llx had %s%s%s\n", inode, ceph_vinop(inode),
-+            ceph_cap_string(had), last ? " last" : "", put ? " put" : "");
-       switch (mode) {
-       case PUT_CAP_REFS_SYNC:
-@@ -3268,6 +3348,7 @@ void ceph_put_wrbuffer_cap_refs(struct ceph_inode_info *ci, int nr,
-                               struct ceph_snap_context *snapc)
- {
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_cap_snap *capsnap = NULL, *iter;
-       int put = 0;
-       bool last = false;
-@@ -3291,11 +3372,10 @@ void ceph_put_wrbuffer_cap_refs(struct ceph_inode_info *ci, int nr,
-                       ceph_put_snap_context(ci->i_head_snapc);
-                       ci->i_head_snapc = NULL;
-               }
--              dout("put_wrbuffer_cap_refs on %p head %d/%d -> %d/%d %s\n",
--                   inode,
--                   ci->i_wrbuffer_ref+nr, ci->i_wrbuffer_ref_head+nr,
--                   ci->i_wrbuffer_ref, ci->i_wrbuffer_ref_head,
--                   last ? " LAST" : "");
-+              doutc(cl, "on %p %llx.%llx head %d/%d -> %d/%d %s\n",
-+                    inode, ceph_vinop(inode), ci->i_wrbuffer_ref+nr,
-+                    ci->i_wrbuffer_ref_head+nr, ci->i_wrbuffer_ref,
-+                    ci->i_wrbuffer_ref_head, last ? " LAST" : "");
-       } else {
-               list_for_each_entry(iter, &ci->i_cap_snaps, ci_item) {
-                       if (iter->context == snapc) {
-@@ -3325,13 +3405,12 @@ void ceph_put_wrbuffer_cap_refs(struct ceph_inode_info *ci, int nr,
-                               }
-                       }
-               }
--              dout("put_wrbuffer_cap_refs on %p cap_snap %p "
--                   " snap %lld %d/%d -> %d/%d %s%s\n",
--                   inode, capsnap, capsnap->context->seq,
--                   ci->i_wrbuffer_ref+nr, capsnap->dirty_pages + nr,
--                   ci->i_wrbuffer_ref, capsnap->dirty_pages,
--                   last ? " (wrbuffer last)" : "",
--                   complete_capsnap ? " (complete capsnap)" : "");
-+              doutc(cl, "%p %llx.%llx cap_snap %p snap %lld %d/%d -> %d/%d %s%s\n",
-+                    inode, ceph_vinop(inode), capsnap, capsnap->context->seq,
-+                    ci->i_wrbuffer_ref+nr, capsnap->dirty_pages + nr,
-+                    ci->i_wrbuffer_ref, capsnap->dirty_pages,
-+                    last ? " (wrbuffer last)" : "",
-+                    complete_capsnap ? " (complete capsnap)" : "");
-       }
- unlock:
-@@ -3354,9 +3433,10 @@ void ceph_put_wrbuffer_cap_refs(struct ceph_inode_info *ci, int nr,
-  */
- static void invalidate_aliases(struct inode *inode)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct dentry *dn, *prev = NULL;
--      dout("invalidate_aliases inode %p\n", inode);
-+      doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-       d_prune_aliases(inode);
-       /*
-        * For non-directory inode, d_find_alias() only returns
-@@ -3415,6 +3495,7 @@ static void handle_cap_grant(struct inode *inode,
-       __releases(ci->i_ceph_lock)
-       __releases(session->s_mdsc->snap_rwsem)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       int seq = le32_to_cpu(grant->seq);
-       int newcaps = le32_to_cpu(grant->caps);
-@@ -3438,10 +3519,11 @@ static void handle_cap_grant(struct inode *inode,
-       if (IS_ENCRYPTED(inode) && size)
-               size = extra_info->fscrypt_file_size;
--      dout("handle_cap_grant inode %p cap %p mds%d seq %d %s\n",
--           inode, cap, session->s_mds, seq, ceph_cap_string(newcaps));
--      dout(" size %llu max_size %llu, i_size %llu\n", size, max_size,
--              i_size_read(inode));
-+      doutc(cl, "%p %llx.%llx cap %p mds%d seq %d %s\n", inode,
-+            ceph_vinop(inode), cap, session->s_mds, seq,
-+            ceph_cap_string(newcaps));
-+      doutc(cl, " size %llu max_size %llu, i_size %llu\n", size,
-+            max_size, i_size_read(inode));
-       /*
-@@ -3501,15 +3583,17 @@ static void handle_cap_grant(struct inode *inode,
-               inode->i_uid = make_kuid(&init_user_ns, le32_to_cpu(grant->uid));
-               inode->i_gid = make_kgid(&init_user_ns, le32_to_cpu(grant->gid));
-               ci->i_btime = extra_info->btime;
--              dout("%p mode 0%o uid.gid %d.%d\n", inode, inode->i_mode,
--                   from_kuid(&init_user_ns, inode->i_uid),
--                   from_kgid(&init_user_ns, inode->i_gid));
-+              doutc(cl, "%p %llx.%llx mode 0%o uid.gid %d.%d\n", inode,
-+                    ceph_vinop(inode), inode->i_mode,
-+                    from_kuid(&init_user_ns, inode->i_uid),
-+                    from_kgid(&init_user_ns, inode->i_gid));
- #if IS_ENABLED(CONFIG_FS_ENCRYPTION)
-               if (ci->fscrypt_auth_len != extra_info->fscrypt_auth_len ||
-                   memcmp(ci->fscrypt_auth, extra_info->fscrypt_auth,
-                          ci->fscrypt_auth_len))
--                      pr_warn_ratelimited("%s: cap grant attempt to change fscrypt_auth on non-I_NEW inode (old len %d new len %d)\n",
--                              __func__, ci->fscrypt_auth_len,
-+                      pr_warn_ratelimited_client(cl,
-+                              "cap grant attempt to change fscrypt_auth on non-I_NEW inode (old len %d new len %d)\n",
-+                              ci->fscrypt_auth_len,
-                               extra_info->fscrypt_auth_len);
- #endif
-       }
-@@ -3527,8 +3611,8 @@ static void handle_cap_grant(struct inode *inode,
-               u64 version = le64_to_cpu(grant->xattr_version);
-               if (version > ci->i_xattrs.version) {
--                      dout(" got new xattrs v%llu on %p len %d\n",
--                           version, inode, len);
-+                      doutc(cl, " got new xattrs v%llu on %p %llx.%llx len %d\n",
-+                            version, inode, ceph_vinop(inode), len);
-                       if (ci->i_xattrs.blob)
-                               ceph_buffer_put(ci->i_xattrs.blob);
-                       ci->i_xattrs.blob = ceph_buffer_get(xattr_buf);
-@@ -3579,8 +3663,8 @@ static void handle_cap_grant(struct inode *inode,
-       if (ci->i_auth_cap == cap && (newcaps & CEPH_CAP_ANY_FILE_WR)) {
-               if (max_size != ci->i_max_size) {
--                      dout("max_size %lld -> %llu\n",
--                           ci->i_max_size, max_size);
-+                      doutc(cl, "max_size %lld -> %llu\n", ci->i_max_size,
-+                            max_size);
-                       ci->i_max_size = max_size;
-                       if (max_size >= ci->i_wanted_max_size) {
-                               ci->i_wanted_max_size = 0;  /* reset */
-@@ -3594,10 +3678,9 @@ static void handle_cap_grant(struct inode *inode,
-       wanted = __ceph_caps_wanted(ci);
-       used = __ceph_caps_used(ci);
-       dirty = __ceph_caps_dirty(ci);
--      dout(" my wanted = %s, used = %s, dirty %s\n",
--           ceph_cap_string(wanted),
--           ceph_cap_string(used),
--           ceph_cap_string(dirty));
-+      doutc(cl, " my wanted = %s, used = %s, dirty %s\n",
-+            ceph_cap_string(wanted), ceph_cap_string(used),
-+            ceph_cap_string(dirty));
-       if ((was_stale || le32_to_cpu(grant->op) == CEPH_CAP_OP_IMPORT) &&
-           (wanted & ~(cap->mds_wanted | newcaps))) {
-@@ -3618,10 +3701,9 @@ static void handle_cap_grant(struct inode *inode,
-       if (cap->issued & ~newcaps) {
-               int revoking = cap->issued & ~newcaps;
--              dout("revocation: %s -> %s (revoking %s)\n",
--                   ceph_cap_string(cap->issued),
--                   ceph_cap_string(newcaps),
--                   ceph_cap_string(revoking));
-+              doutc(cl, "revocation: %s -> %s (revoking %s)\n",
-+                    ceph_cap_string(cap->issued), ceph_cap_string(newcaps),
-+                    ceph_cap_string(revoking));
-               if (S_ISREG(inode->i_mode) &&
-                   (revoking & used & CEPH_CAP_FILE_BUFFER))
-                       writeback = true;  /* initiate writeback; will delay ack */
-@@ -3639,11 +3721,12 @@ static void handle_cap_grant(struct inode *inode,
-               cap->issued = newcaps;
-               cap->implemented |= newcaps;
-       } else if (cap->issued == newcaps) {
--              dout("caps unchanged: %s -> %s\n",
--                   ceph_cap_string(cap->issued), ceph_cap_string(newcaps));
-+              doutc(cl, "caps unchanged: %s -> %s\n",
-+                    ceph_cap_string(cap->issued),
-+                    ceph_cap_string(newcaps));
-       } else {
--              dout("grant: %s -> %s\n", ceph_cap_string(cap->issued),
--                   ceph_cap_string(newcaps));
-+              doutc(cl, "grant: %s -> %s\n", ceph_cap_string(cap->issued),
-+                    ceph_cap_string(newcaps));
-               /* non-auth MDS is revoking the newly grant caps ? */
-               if (cap == ci->i_auth_cap &&
-                   __ceph_caps_revoking_other(ci, cap, newcaps))
-@@ -3732,6 +3815,7 @@ static void handle_cap_flush_ack(struct inode *inode, u64 flush_tid,
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_cap_flush *cf, *tmp_cf;
-       LIST_HEAD(to_remove);
-       unsigned seq = le32_to_cpu(m->seq);
-@@ -3768,11 +3852,11 @@ static void handle_cap_flush_ack(struct inode *inode, u64 flush_tid,
-               }
-       }
--      dout("handle_cap_flush_ack inode %p mds%d seq %d on %s cleaned %s,"
--           " flushing %s -> %s\n",
--           inode, session->s_mds, seq, ceph_cap_string(dirty),
--           ceph_cap_string(cleaned), ceph_cap_string(ci->i_flushing_caps),
--           ceph_cap_string(ci->i_flushing_caps & ~cleaned));
-+      doutc(cl, "%p %llx.%llx mds%d seq %d on %s cleaned %s, flushing %s -> %s\n",
-+            inode, ceph_vinop(inode), session->s_mds, seq,
-+            ceph_cap_string(dirty), ceph_cap_string(cleaned),
-+            ceph_cap_string(ci->i_flushing_caps),
-+            ceph_cap_string(ci->i_flushing_caps & ~cleaned));
-       if (list_empty(&to_remove) && !cleaned)
-               goto out;
-@@ -3788,18 +3872,21 @@ static void handle_cap_flush_ack(struct inode *inode, u64 flush_tid,
-               if (list_empty(&ci->i_cap_flush_list)) {
-                       list_del_init(&ci->i_flushing_item);
-                       if (!list_empty(&session->s_cap_flushing)) {
--                              dout(" mds%d still flushing cap on %p\n",
--                                   session->s_mds,
--                                   &list_first_entry(&session->s_cap_flushing,
--                                              struct ceph_inode_info,
--                                              i_flushing_item)->netfs.inode);
-+                              struct inode *inode =
-+                                          &list_first_entry(&session->s_cap_flushing,
-+                                                            struct ceph_inode_info,
-+                                                            i_flushing_item)->netfs.inode;
-+                              doutc(cl, " mds%d still flushing cap on %p %llx.%llx\n",
-+                                    session->s_mds, inode, ceph_vinop(inode));
-                       }
-               }
-               mdsc->num_cap_flushing--;
--              dout(" inode %p now !flushing\n", inode);
-+              doutc(cl, " %p %llx.%llx now !flushing\n", inode,
-+                    ceph_vinop(inode));
-               if (ci->i_dirty_caps == 0) {
--                      dout(" inode %p now clean\n", inode);
-+                      doutc(cl, " %p %llx.%llx now clean\n", inode,
-+                            ceph_vinop(inode));
-                       BUG_ON(!list_empty(&ci->i_dirty_item));
-                       drop = true;
-                       if (ci->i_wr_ref == 0 &&
-@@ -3838,11 +3925,13 @@ void __ceph_remove_capsnap(struct inode *inode, struct ceph_cap_snap *capsnap,
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       bool ret;
-       lockdep_assert_held(&ci->i_ceph_lock);
--      dout("removing capsnap %p, inode %p ci %p\n", capsnap, inode, ci);
-+      doutc(cl, "removing capsnap %p, %p %llx.%llx ci %p\n", capsnap,
-+            inode, ceph_vinop(inode), ci);
-       list_del_init(&capsnap->ci_item);
-       ret = __detach_cap_flush_from_ci(ci, &capsnap->cap_flush);
-@@ -3882,28 +3971,30 @@ static void handle_cap_flushsnap_ack(struct inode *inode, u64 flush_tid,
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       u64 follows = le64_to_cpu(m->snap_follows);
-       struct ceph_cap_snap *capsnap = NULL, *iter;
-       bool wake_ci = false;
-       bool wake_mdsc = false;
--      dout("handle_cap_flushsnap_ack inode %p ci %p mds%d follows %lld\n",
--           inode, ci, session->s_mds, follows);
-+      doutc(cl, "%p %llx.%llx ci %p mds%d follows %lld\n", inode,
-+            ceph_vinop(inode), ci, session->s_mds, follows);
-       spin_lock(&ci->i_ceph_lock);
-       list_for_each_entry(iter, &ci->i_cap_snaps, ci_item) {
-               if (iter->follows == follows) {
-                       if (iter->cap_flush.tid != flush_tid) {
--                              dout(" cap_snap %p follows %lld tid %lld !="
--                                   " %lld\n", iter, follows,
--                                   flush_tid, iter->cap_flush.tid);
-+                              doutc(cl, " cap_snap %p follows %lld "
-+                                    "tid %lld != %lld\n", iter,
-+                                    follows, flush_tid,
-+                                    iter->cap_flush.tid);
-                               break;
-                       }
-                       capsnap = iter;
-                       break;
-               } else {
--                      dout(" skipping cap_snap %p follows %lld\n",
--                           iter, iter->follows);
-+                      doutc(cl, " skipping cap_snap %p follows %lld\n",
-+                            iter, iter->follows);
-               }
-       }
-       if (capsnap)
-@@ -3932,6 +4023,7 @@ static bool handle_cap_trunc(struct inode *inode,
-                            struct cap_extra_info *extra_info)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int mds = session->s_mds;
-       int seq = le32_to_cpu(trunc->seq);
-       u32 truncate_seq = le32_to_cpu(trunc->truncate_seq);
-@@ -3954,8 +4046,8 @@ static bool handle_cap_trunc(struct inode *inode,
-       if (IS_ENCRYPTED(inode) && size)
-               size = extra_info->fscrypt_file_size;
--      dout("%s inode %p mds%d seq %d to %lld truncate seq %d\n",
--           __func__, inode, mds, seq, truncate_size, truncate_seq);
-+      doutc(cl, "%p %llx.%llx mds%d seq %d to %lld truncate seq %d\n",
-+            inode, ceph_vinop(inode), mds, seq, truncate_size, truncate_seq);
-       queue_trunc = ceph_fill_file_size(inode, issued,
-                                         truncate_seq, truncate_size, size);
-       return queue_trunc;
-@@ -3974,6 +4066,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
-                             struct ceph_mds_session *session)
- {
-       struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_session *tsession = NULL;
-       struct ceph_cap *cap, *tcap, *new_cap = NULL;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-@@ -3993,8 +4086,8 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
-               target = -1;
-       }
--      dout("handle_cap_export inode %p ci %p mds%d mseq %d target %d\n",
--           inode, ci, mds, mseq, target);
-+      doutc(cl, "%p %llx.%llx ci %p mds%d mseq %d target %d\n",
-+            inode, ceph_vinop(inode), ci, mds, mseq, target);
- retry:
-       down_read(&mdsc->snap_rwsem);
-       spin_lock(&ci->i_ceph_lock);
-@@ -4014,12 +4107,13 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
-       issued = cap->issued;
-       if (issued != cap->implemented)
--              pr_err_ratelimited("handle_cap_export: issued != implemented: "
--                              "ino (%llx.%llx) mds%d seq %d mseq %d "
--                              "issued %s implemented %s\n",
--                              ceph_vinop(inode), mds, cap->seq, cap->mseq,
--                              ceph_cap_string(issued),
--                              ceph_cap_string(cap->implemented));
-+              pr_err_ratelimited_client(cl, "issued != implemented: "
-+                                        "%p %llx.%llx mds%d seq %d mseq %d"
-+                                        " issued %s implemented %s\n",
-+                                        inode, ceph_vinop(inode), mds,
-+                                        cap->seq, cap->mseq,
-+                                        ceph_cap_string(issued),
-+                                        ceph_cap_string(cap->implemented));
-       tcap = __get_cap_for_mds(ci, target);
-@@ -4027,7 +4121,8 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
-               /* already have caps from the target */
-               if (tcap->cap_id == t_cap_id &&
-                   ceph_seq_cmp(tcap->seq, t_seq) < 0) {
--                      dout(" updating import cap %p mds%d\n", tcap, target);
-+                      doutc(cl, " updating import cap %p mds%d\n", tcap,
-+                            target);
-                       tcap->cap_id = t_cap_id;
-                       tcap->seq = t_seq - 1;
-                       tcap->issue_seq = t_seq - 1;
-@@ -4108,6 +4203,7 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
-                             struct ceph_cap **target_cap, int *old_issued)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_cap *cap, *ocap, *new_cap = NULL;
-       int mds = session->s_mds;
-       int issued;
-@@ -4128,8 +4224,8 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
-               peer = -1;
-       }
--      dout("handle_cap_import inode %p ci %p mds%d mseq %d peer %d\n",
--           inode, ci, mds, mseq, peer);
-+      doutc(cl, "%p %llx.%llx ci %p mds%d mseq %d peer %d\n",
-+            inode, ceph_vinop(inode), ci, mds, mseq, peer);
- retry:
-       cap = __get_cap_for_mds(ci, mds);
-       if (!cap) {
-@@ -4155,17 +4251,17 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
-       ocap = peer >= 0 ? __get_cap_for_mds(ci, peer) : NULL;
-       if (ocap && ocap->cap_id == p_cap_id) {
--              dout(" remove export cap %p mds%d flags %d\n",
--                   ocap, peer, ph->flags);
-+              doutc(cl, " remove export cap %p mds%d flags %d\n",
-+                    ocap, peer, ph->flags);
-               if ((ph->flags & CEPH_CAP_FLAG_AUTH) &&
-                   (ocap->seq != le32_to_cpu(ph->seq) ||
-                    ocap->mseq != le32_to_cpu(ph->mseq))) {
--                      pr_err_ratelimited("handle_cap_import: "
--                                      "mismatched seq/mseq: ino (%llx.%llx) "
--                                      "mds%d seq %d mseq %d importer mds%d "
--                                      "has peer seq %d mseq %d\n",
--                                      ceph_vinop(inode), peer, ocap->seq,
--                                      ocap->mseq, mds, le32_to_cpu(ph->seq),
-+                      pr_err_ratelimited_client(cl, "mismatched seq/mseq: "
-+                                      "%p %llx.%llx mds%d seq %d mseq %d"
-+                                      " importer mds%d has peer seq %d mseq %d\n",
-+                                      inode, ceph_vinop(inode), peer,
-+                                      ocap->seq, ocap->mseq, mds,
-+                                      le32_to_cpu(ph->seq),
-                                       le32_to_cpu(ph->mseq));
-               }
-               ceph_remove_cap(mdsc, ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE));
-@@ -4231,6 +4327,7 @@ void ceph_handle_caps(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 inode *inode;
-       struct ceph_inode_info *ci;
-       struct ceph_cap *cap;
-@@ -4249,7 +4346,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
-       bool close_sessions = false;
-       bool do_cap_release = false;
--      dout("handle_caps from mds%d\n", session->s_mds);
-+      doutc(cl, "from mds%d\n", session->s_mds);
-       if (!ceph_inc_mds_stopping_blocker(mdsc, session))
-               return;
-@@ -4351,15 +4448,15 @@ void ceph_handle_caps(struct ceph_mds_session *session,
-       /* lookup ino */
-       inode = ceph_find_inode(mdsc->fsc->sb, vino);
--      dout(" op %s ino %llx.%llx inode %p\n", ceph_cap_op_name(op), vino.ino,
--           vino.snap, inode);
-+      doutc(cl, " op %s ino %llx.%llx inode %p\n", ceph_cap_op_name(op),
-+            vino.ino, vino.snap, inode);
-       mutex_lock(&session->s_mutex);
--      dout(" mds%d seq %lld cap seq %u\n", session->s_mds, session->s_seq,
--           (unsigned)seq);
-+      doutc(cl, " mds%d seq %lld cap seq %u\n", session->s_mds,
-+            session->s_seq, (unsigned)seq);
-       if (!inode) {
--              dout(" i don't have ino %llx\n", vino.ino);
-+              doutc(cl, " i don't have ino %llx\n", vino.ino);
-               switch (op) {
-               case CEPH_CAP_OP_IMPORT:
-@@ -4414,9 +4511,9 @@ void ceph_handle_caps(struct ceph_mds_session *session,
-       spin_lock(&ci->i_ceph_lock);
-       cap = __get_cap_for_mds(ceph_inode(inode), session->s_mds);
-       if (!cap) {
--              dout(" no cap on %p ino %llx.%llx from mds%d\n",
--                   inode, ceph_ino(inode), ceph_snap(inode),
--                   session->s_mds);
-+              doutc(cl, " no cap on %p ino %llx.%llx from mds%d\n",
-+                    inode, ceph_ino(inode), ceph_snap(inode),
-+                    session->s_mds);
-               spin_unlock(&ci->i_ceph_lock);
-               switch (op) {
-               case CEPH_CAP_OP_REVOKE:
-@@ -4454,8 +4551,8 @@ void ceph_handle_caps(struct ceph_mds_session *session,
-       default:
-               spin_unlock(&ci->i_ceph_lock);
--              pr_err("ceph_handle_caps: unknown cap op %d %s\n", op,
--                     ceph_cap_op_name(op));
-+              pr_err_client(cl, "unknown cap op %d %s\n", op,
-+                            ceph_cap_op_name(op));
-       }
- done:
-@@ -4496,7 +4593,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
-       goto done;
- bad:
--      pr_err("ceph_handle_caps: corrupt message\n");
-+      pr_err_client(cl, "corrupt message\n");
-       ceph_msg_dump(msg);
-       goto out;
- }
-@@ -4510,6 +4607,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
-  */
- unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct inode *inode;
-       struct ceph_inode_info *ci;
-       struct ceph_mount_options *opt = mdsc->fsc->mount_options;
-@@ -4517,14 +4615,14 @@ unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
-       unsigned long loop_start = jiffies;
-       unsigned long delay = 0;
--      dout("check_delayed_caps\n");
-+      doutc(cl, "begin\n");
-       spin_lock(&mdsc->cap_delay_lock);
-       while (!list_empty(&mdsc->cap_delay_list)) {
-               ci = list_first_entry(&mdsc->cap_delay_list,
-                                     struct ceph_inode_info,
-                                     i_cap_delay_list);
-               if (time_before(loop_start, ci->i_hold_caps_max - delay_max)) {
--                      dout("%s caps added recently.  Exiting loop", __func__);
-+                      doutc(cl, "caps added recently.  Exiting loop");
-                       delay = ci->i_hold_caps_max;
-                       break;
-               }
-@@ -4536,13 +4634,15 @@ unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
-               inode = igrab(&ci->netfs.inode);
-               if (inode) {
-                       spin_unlock(&mdsc->cap_delay_lock);
--                      dout("check_delayed_caps on %p\n", inode);
-+                      doutc(cl, "on %p %llx.%llx\n", inode,
-+                            ceph_vinop(inode));
-                       ceph_check_caps(ci, 0);
-                       iput(inode);
-                       spin_lock(&mdsc->cap_delay_lock);
-               }
-       }
-       spin_unlock(&mdsc->cap_delay_lock);
-+      doutc(cl, "done\n");
-       return delay;
- }
-@@ -4553,17 +4653,18 @@ unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
- static void flush_dirty_session_caps(struct ceph_mds_session *s)
- {
-       struct ceph_mds_client *mdsc = s->s_mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci;
-       struct inode *inode;
--      dout("flush_dirty_caps\n");
-+      doutc(cl, "begin\n");
-       spin_lock(&mdsc->cap_dirty_lock);
-       while (!list_empty(&s->s_cap_dirty)) {
-               ci = list_first_entry(&s->s_cap_dirty, struct ceph_inode_info,
-                                     i_dirty_item);
-               inode = &ci->netfs.inode;
-               ihold(inode);
--              dout("flush_dirty_caps %llx.%llx\n", ceph_vinop(inode));
-+              doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-               spin_unlock(&mdsc->cap_dirty_lock);
-               ceph_wait_on_async_create(inode);
-               ceph_check_caps(ci, CHECK_CAPS_FLUSH);
-@@ -4571,7 +4672,7 @@ static void flush_dirty_session_caps(struct ceph_mds_session *s)
-               spin_lock(&mdsc->cap_dirty_lock);
-       }
-       spin_unlock(&mdsc->cap_dirty_lock);
--      dout("flush_dirty_caps done\n");
-+      doutc(cl, "done\n");
- }
- void ceph_flush_dirty_caps(struct ceph_mds_client *mdsc)
-@@ -4696,6 +4797,7 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
-                             int mds, int drop, int unless, int force)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_cap *cap;
-       struct ceph_mds_request_release *rel = *p;
-       int used, dirty;
-@@ -4705,9 +4807,9 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
-       used = __ceph_caps_used(ci);
-       dirty = __ceph_caps_dirty(ci);
--      dout("encode_inode_release %p mds%d used|dirty %s drop %s unless %s\n",
--           inode, mds, ceph_cap_string(used|dirty), ceph_cap_string(drop),
--           ceph_cap_string(unless));
-+      doutc(cl, "%p %llx.%llx mds%d used|dirty %s drop %s unless %s\n",
-+            inode, ceph_vinop(inode), mds, ceph_cap_string(used|dirty),
-+            ceph_cap_string(drop), ceph_cap_string(unless));
-       /* only drop unused, clean caps */
-       drop &= ~(used | dirty);
-@@ -4729,12 +4831,13 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
-               if (force || (cap->issued & drop)) {
-                       if (cap->issued & drop) {
-                               int wanted = __ceph_caps_wanted(ci);
--                              dout("encode_inode_release %p cap %p "
--                                   "%s -> %s, wanted %s -> %s\n", inode, cap,
--                                   ceph_cap_string(cap->issued),
--                                   ceph_cap_string(cap->issued & ~drop),
--                                   ceph_cap_string(cap->mds_wanted),
--                                   ceph_cap_string(wanted));
-+                              doutc(cl, "%p %llx.%llx cap %p %s -> %s, "
-+                                    "wanted %s -> %s\n", inode,
-+                                    ceph_vinop(inode), cap,
-+                                    ceph_cap_string(cap->issued),
-+                                    ceph_cap_string(cap->issued & ~drop),
-+                                    ceph_cap_string(cap->mds_wanted),
-+                                    ceph_cap_string(wanted));
-                               cap->issued &= ~drop;
-                               cap->implemented &= ~drop;
-@@ -4743,9 +4846,9 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
-                                   !(wanted & CEPH_CAP_ANY_FILE_WR))
-                                       ci->i_requested_max_size = 0;
-                       } else {
--                              dout("encode_inode_release %p cap %p %s"
--                                   " (force)\n", inode, cap,
--                                   ceph_cap_string(cap->issued));
-+                              doutc(cl, "%p %llx.%llx cap %p %s (force)\n",
-+                                    inode, ceph_vinop(inode), cap,
-+                                    ceph_cap_string(cap->issued));
-                       }
-                       rel->ino = cpu_to_le64(ceph_ino(inode));
-@@ -4760,8 +4863,9 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
-                       *p += sizeof(*rel);
-                       ret = 1;
-               } else {
--                      dout("encode_inode_release %p cap %p %s (noop)\n",
--                           inode, cap, ceph_cap_string(cap->issued));
-+                      doutc(cl, "%p %llx.%llx cap %p %s (noop)\n",
-+                            inode, ceph_vinop(inode), cap,
-+                            ceph_cap_string(cap->issued));
-               }
-       }
-       spin_unlock(&ci->i_ceph_lock);
-@@ -4786,6 +4890,7 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
- {
-       struct ceph_mds_request_release *rel = *p;
-       struct ceph_dentry_info *di = ceph_dentry(dentry);
-+      struct ceph_client *cl;
-       int force = 0;
-       int ret;
-@@ -4805,10 +4910,11 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
-       ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force);
-+      cl = ceph_inode_to_client(dir);
-       spin_lock(&dentry->d_lock);
-       if (ret && di->lease_session && di->lease_session->s_mds == mds) {
--              dout("encode_dentry_release %p mds%d seq %d\n",
--                   dentry, mds, (int)di->lease_seq);
-+              doutc(cl, "%p mds%d seq %d\n",  dentry, mds,
-+                    (int)di->lease_seq);
-               rel->dname_seq = cpu_to_le32(di->lease_seq);
-               __ceph_mdsc_drop_dentry_lease(dentry);
-               spin_unlock(&dentry->d_lock);
-@@ -4834,12 +4940,14 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
- static int remove_capsnaps(struct ceph_mds_client *mdsc, struct inode *inode)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_cap_snap *capsnap;
-       int capsnap_release = 0;
-       lockdep_assert_held(&ci->i_ceph_lock);
--      dout("removing capsnaps, ci is %p, inode is %p\n", ci, inode);
-+      doutc(cl, "removing capsnaps, ci is %p, %p %llx.%llx\n",
-+            ci, inode, ceph_vinop(inode));
-       while (!list_empty(&ci->i_cap_snaps)) {
-               capsnap = list_first_entry(&ci->i_cap_snaps,
-@@ -4858,6 +4966,7 @@ int ceph_purge_inode_cap(struct inode *inode, struct ceph_cap *cap, bool *invali
- {
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       bool is_auth;
-       bool dirty_dropped = false;
-@@ -4865,8 +4974,8 @@ int ceph_purge_inode_cap(struct inode *inode, struct ceph_cap *cap, bool *invali
-       lockdep_assert_held(&ci->i_ceph_lock);
--      dout("removing cap %p, ci is %p, inode is %p\n",
--           cap, ci, &ci->netfs.inode);
-+      doutc(cl, "removing cap %p, ci is %p, %p %llx.%llx\n",
-+            cap, ci, inode, ceph_vinop(inode));
-       is_auth = (cap == ci->i_auth_cap);
-       __ceph_remove_cap(cap, false);
-@@ -4893,19 +5002,19 @@ int ceph_purge_inode_cap(struct inode *inode, struct ceph_cap *cap, bool *invali
-               }
-               if (!list_empty(&ci->i_dirty_item)) {
--                      pr_warn_ratelimited(
--                              " dropping dirty %s state for %p %lld\n",
-+                      pr_warn_ratelimited_client(cl,
-+                              " dropping dirty %s state for %p %llx.%llx\n",
-                               ceph_cap_string(ci->i_dirty_caps),
--                              inode, ceph_ino(inode));
-+                              inode, ceph_vinop(inode));
-                       ci->i_dirty_caps = 0;
-                       list_del_init(&ci->i_dirty_item);
-                       dirty_dropped = true;
-               }
-               if (!list_empty(&ci->i_flushing_item)) {
--                      pr_warn_ratelimited(
--                              " dropping dirty+flushing %s state for %p %lld\n",
-+                      pr_warn_ratelimited_client(cl,
-+                              " dropping dirty+flushing %s state for %p %llx.%llx\n",
-                               ceph_cap_string(ci->i_flushing_caps),
--                              inode, ceph_ino(inode));
-+                              inode, ceph_vinop(inode));
-                       ci->i_flushing_caps = 0;
-                       list_del_init(&ci->i_flushing_item);
-                       mdsc->num_cap_flushing--;
-@@ -4928,8 +5037,9 @@ int ceph_purge_inode_cap(struct inode *inode, struct ceph_cap *cap, bool *invali
-               if (atomic_read(&ci->i_filelock_ref) > 0) {
-                       /* make further file lock syscall return -EIO */
-                       ci->i_ceph_flags |= CEPH_I_ERROR_FILELOCK;
--                      pr_warn_ratelimited(" dropping file locks for %p %lld\n",
--                                          inode, ceph_ino(inode));
-+                      pr_warn_ratelimited_client(cl,
-+                              " dropping file locks for %p %llx.%llx\n",
-+                              inode, ceph_vinop(inode));
-               }
-               if (!ci->i_dirty_caps && ci->i_prealloc_cap_flush) {
-diff --git a/fs/ceph/crypto.c b/fs/ceph/crypto.c
-index 08c385610731..d692ebfddedb 100644
---- a/fs/ceph/crypto.c
-+++ b/fs/ceph/crypto.c
-@@ -211,6 +211,7 @@ void ceph_fscrypt_as_ctx_to_req(struct ceph_mds_request *req,
- static struct inode *parse_longname(const struct inode *parent,
-                                   const char *name, int *name_len)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(parent);
-       struct inode *dir = NULL;
-       struct ceph_vino vino = { .snap = CEPH_NOSNAP };
-       char *inode_number;
-@@ -222,12 +223,12 @@ static struct inode *parse_longname(const struct inode *parent,
-       name++;
-       name_end = strrchr(name, '_');
-       if (!name_end) {
--              dout("Failed to parse long snapshot name: %s\n", name);
-+              doutc(cl, "failed to parse long snapshot name: %s\n", name);
-               return ERR_PTR(-EIO);
-       }
-       *name_len = (name_end - name);
-       if (*name_len <= 0) {
--              pr_err("Failed to parse long snapshot name\n");
-+              pr_err_client(cl, "failed to parse long snapshot name\n");
-               return ERR_PTR(-EIO);
-       }
-@@ -239,7 +240,7 @@ static struct inode *parse_longname(const struct inode *parent,
-               return ERR_PTR(-ENOMEM);
-       ret = kstrtou64(inode_number, 10, &vino.ino);
-       if (ret) {
--              dout("Failed to parse inode number: %s\n", name);
-+              doutc(cl, "failed to parse inode number: %s\n", name);
-               dir = ERR_PTR(ret);
-               goto out;
-       }
-@@ -250,7 +251,7 @@ static struct inode *parse_longname(const struct inode *parent,
-               /* This can happen if we're not mounting cephfs on the root */
-               dir = ceph_get_inode(parent->i_sb, vino, NULL);
-               if (IS_ERR(dir))
--                      dout("Can't find inode %s (%s)\n", inode_number, name);
-+                      doutc(cl, "can't find inode %s (%s)\n", inode_number, name);
-       }
- out:
-@@ -261,6 +262,7 @@ static struct inode *parse_longname(const struct inode *parent,
- int ceph_encode_encrypted_dname(struct inode *parent, struct qstr *d_name,
-                               char *buf)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(parent);
-       struct inode *dir = parent;
-       struct qstr iname;
-       u32 len;
-@@ -329,7 +331,7 @@ int ceph_encode_encrypted_dname(struct inode *parent, struct qstr *d_name,
-       /* base64 encode the encrypted name */
-       elen = ceph_base64_encode(cryptbuf, len, buf);
--      dout("base64-encoded ciphertext name = %.*s\n", elen, buf);
-+      doutc(cl, "base64-encoded ciphertext name = %.*s\n", elen, buf);
-       /* To understand the 240 limit, see CEPH_NOHASH_NAME_MAX comments */
-       WARN_ON(elen > 240);
-@@ -504,7 +506,10 @@ int ceph_fscrypt_decrypt_block_inplace(const struct inode *inode,
-                                 struct page *page, unsigned int len,
-                                 unsigned int offs, u64 lblk_num)
- {
--      dout("%s: len %u offs %u blk %llu\n", __func__, len, offs, lblk_num);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-+
-+      doutc(cl, "%p %llx.%llx len %u offs %u blk %llu\n", inode,
-+            ceph_vinop(inode), len, offs, lblk_num);
-       return fscrypt_decrypt_block_inplace(inode, page, len, offs, lblk_num);
- }
-@@ -513,7 +518,10 @@ int ceph_fscrypt_encrypt_block_inplace(const struct inode *inode,
-                                 unsigned int offs, u64 lblk_num,
-                                 gfp_t gfp_flags)
- {
--      dout("%s: len %u offs %u blk %llu\n", __func__, len, offs, lblk_num);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-+
-+      doutc(cl, "%p %llx.%llx len %u offs %u blk %llu\n", inode,
-+            ceph_vinop(inode), len, offs, lblk_num);
-       return fscrypt_encrypt_block_inplace(inode, page, len, offs, lblk_num,
-                                            gfp_flags);
- }
-@@ -582,6 +590,7 @@ int ceph_fscrypt_decrypt_extents(struct inode *inode, struct page **page,
-                                u64 off, struct ceph_sparse_extent *map,
-                                u32 ext_cnt)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int i, ret = 0;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       u64 objno, objoff;
-@@ -589,7 +598,8 @@ int ceph_fscrypt_decrypt_extents(struct inode *inode, struct page **page,
-       /* Nothing to do for empty array */
-       if (ext_cnt == 0) {
--              dout("%s: empty array, ret 0\n", __func__);
-+              doutc(cl, "%p %llx.%llx empty array, ret 0\n", inode,
-+                    ceph_vinop(inode));
-               return 0;
-       }
-@@ -603,14 +613,17 @@ int ceph_fscrypt_decrypt_extents(struct inode *inode, struct page **page,
-               int fret;
-               if ((ext->off | ext->len) & ~CEPH_FSCRYPT_BLOCK_MASK) {
--                      pr_warn("%s: bad encrypted sparse extent idx %d off %llx len %llx\n",
--                              __func__, i, ext->off, ext->len);
-+                      pr_warn_client(cl,
-+                              "%p %llx.%llx bad encrypted sparse extent "
-+                              "idx %d off %llx len %llx\n",
-+                              inode, ceph_vinop(inode), i, ext->off,
-+                              ext->len);
-                       return -EIO;
-               }
-               fret = ceph_fscrypt_decrypt_pages(inode, &page[pgidx],
-                                                off + pgsoff, ext->len);
--              dout("%s: [%d] 0x%llx~0x%llx fret %d\n", __func__, i,
--                              ext->off, ext->len, fret);
-+              doutc(cl, "%p %llx.%llx [%d] 0x%llx~0x%llx fret %d\n", inode,
-+                    ceph_vinop(inode), i, ext->off, ext->len, fret);
-               if (fret < 0) {
-                       if (ret == 0)
-                               ret = fret;
-@@ -618,7 +631,7 @@ int ceph_fscrypt_decrypt_extents(struct inode *inode, struct page **page,
-               }
-               ret = pgsoff + fret;
-       }
--      dout("%s: ret %d\n", __func__, ret);
-+      doutc(cl, "ret %d\n", ret);
-       return ret;
- }
-diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
-index 2f1e7498cd74..24c08078f5aa 100644
---- a/fs/ceph/debugfs.c
-+++ b/fs/ceph/debugfs.c
-@@ -398,7 +398,7 @@ DEFINE_SIMPLE_ATTRIBUTE(congestion_kb_fops, congestion_kb_get,
- void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc)
- {
--      dout("ceph_fs_debugfs_cleanup\n");
-+      doutc(fsc->client, "begin\n");
-       debugfs_remove(fsc->debugfs_bdi);
-       debugfs_remove(fsc->debugfs_congestion_kb);
-       debugfs_remove(fsc->debugfs_mdsmap);
-@@ -407,13 +407,14 @@ void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc)
-       debugfs_remove(fsc->debugfs_status);
-       debugfs_remove(fsc->debugfs_mdsc);
-       debugfs_remove_recursive(fsc->debugfs_metrics_dir);
-+      doutc(fsc->client, "done\n");
- }
- void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
- {
-       char name[100];
--      dout("ceph_fs_debugfs_init\n");
-+      doutc(fsc->client, "begin\n");
-       fsc->debugfs_congestion_kb =
-               debugfs_create_file("writeback_congestion_kb",
-                                   0600,
-@@ -469,6 +470,7 @@ void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
-                           &metrics_size_fops);
-       debugfs_create_file("caps", 0400, fsc->debugfs_metrics_dir, fsc,
-                           &metrics_caps_fops);
-+      doutc(fsc->client, "done\n");
- }
-diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
-index 1395b71df5cc..6bb95b4e93a8 100644
---- a/fs/ceph/dir.c
-+++ b/fs/ceph/dir.c
-@@ -109,7 +109,9 @@ static int fpos_cmp(loff_t l, loff_t r)
-  * regardless of what dir changes take place on the
-  * server.
-  */
--static int note_last_dentry(struct ceph_dir_file_info *dfi, const char *name,
-+static int note_last_dentry(struct ceph_fs_client *fsc,
-+                          struct ceph_dir_file_info *dfi,
-+                          const char *name,
-                           int len, unsigned next_offset)
- {
-       char *buf = kmalloc(len+1, GFP_KERNEL);
-@@ -120,7 +122,7 @@ static int note_last_dentry(struct ceph_dir_file_info *dfi, const char *name,
-       memcpy(dfi->last_name, name, len);
-       dfi->last_name[len] = 0;
-       dfi->next_offset = next_offset;
--      dout("note_last_dentry '%s'\n", dfi->last_name);
-+      doutc(fsc->client, "'%s'\n", dfi->last_name);
-       return 0;
- }
-@@ -130,6 +132,7 @@ __dcache_find_get_entry(struct dentry *parent, u64 idx,
-                       struct ceph_readdir_cache_control *cache_ctl)
- {
-       struct inode *dir = d_inode(parent);
-+      struct ceph_client *cl = ceph_inode_to_client(dir);
-       struct dentry *dentry;
-       unsigned idx_mask = (PAGE_SIZE / sizeof(struct dentry *)) - 1;
-       loff_t ptr_pos = idx * sizeof(struct dentry *);
-@@ -142,7 +145,7 @@ __dcache_find_get_entry(struct dentry *parent, u64 idx,
-               ceph_readdir_cache_release(cache_ctl);
-               cache_ctl->page = find_lock_page(&dir->i_data, ptr_pgoff);
-               if (!cache_ctl->page) {
--                      dout(" page %lu not found\n", ptr_pgoff);
-+                      doutc(cl, " page %lu not found\n", ptr_pgoff);
-                       return ERR_PTR(-EAGAIN);
-               }
-               /* reading/filling the cache are serialized by
-@@ -185,13 +188,16 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
-       struct ceph_dir_file_info *dfi = file->private_data;
-       struct dentry *parent = file->f_path.dentry;
-       struct inode *dir = d_inode(parent);
-+      struct ceph_fs_client *fsc = ceph_inode_to_fs_client(dir);
-+      struct ceph_client *cl = ceph_inode_to_client(dir);
-       struct dentry *dentry, *last = NULL;
-       struct ceph_dentry_info *di;
-       struct ceph_readdir_cache_control cache_ctl = {};
-       u64 idx = 0;
-       int err = 0;
--      dout("__dcache_readdir %p v%u at %llx\n", dir, (unsigned)shared_gen, ctx->pos);
-+      doutc(cl, "%p %llx.%llx v%u at %llx\n", dir, ceph_vinop(dir),
-+            (unsigned)shared_gen, ctx->pos);
-       /* search start position */
-       if (ctx->pos > 2) {
-@@ -221,7 +227,8 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
-                       dput(dentry);
-               }
--              dout("__dcache_readdir %p cache idx %llu\n", dir, idx);
-+              doutc(cl, "%p %llx.%llx cache idx %llu\n", dir,
-+                    ceph_vinop(dir), idx);
-       }
-@@ -257,8 +264,8 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
-               spin_unlock(&dentry->d_lock);
-               if (emit_dentry) {
--                      dout(" %llx dentry %p %pd %p\n", di->offset,
--                           dentry, dentry, d_inode(dentry));
-+                      doutc(cl, " %llx dentry %p %pd %p\n", di->offset,
-+                            dentry, dentry, d_inode(dentry));
-                       ctx->pos = di->offset;
-                       if (!dir_emit(ctx, dentry->d_name.name,
-                                     dentry->d_name.len, ceph_present_inode(d_inode(dentry)),
-@@ -281,7 +288,8 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
-       if (last) {
-               int ret;
-               di = ceph_dentry(last);
--              ret = note_last_dentry(dfi, last->d_name.name, last->d_name.len,
-+              ret = note_last_dentry(fsc, dfi, last->d_name.name,
-+                                     last->d_name.len,
-                                      fpos_off(di->offset) + 1);
-               if (ret < 0)
-                       err = ret;
-@@ -312,18 +320,21 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-+      struct ceph_client *cl = fsc->client;
-       int i;
-       int err;
-       unsigned frag = -1;
-       struct ceph_mds_reply_info_parsed *rinfo;
--      dout("readdir %p file %p pos %llx\n", inode, file, ctx->pos);
-+      doutc(cl, "%p %llx.%llx file %p pos %llx\n", inode,
-+            ceph_vinop(inode), file, ctx->pos);
-       if (dfi->file_info.flags & CEPH_F_ATEND)
-               return 0;
-       /* always start with . and .. */
-       if (ctx->pos == 0) {
--              dout("readdir off 0 -> '.'\n");
-+              doutc(cl, "%p %llx.%llx off 0 -> '.'\n", inode,
-+                    ceph_vinop(inode));
-               if (!dir_emit(ctx, ".", 1, ceph_present_inode(inode),
-                           inode->i_mode >> 12))
-                       return 0;
-@@ -337,7 +348,8 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-               ino = ceph_present_inode(dentry->d_parent->d_inode);
-               spin_unlock(&dentry->d_lock);
--              dout("readdir off 1 -> '..'\n");
-+              doutc(cl, "%p %llx.%llx off 1 -> '..'\n", inode,
-+                    ceph_vinop(inode));
-               if (!dir_emit(ctx, "..", 2, ino, inode->i_mode >> 12))
-                       return 0;
-               ctx->pos = 2;
-@@ -391,8 +403,8 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                       frag = fpos_frag(ctx->pos);
-               }
--              dout("readdir fetching %llx.%llx frag %x offset '%s'\n",
--                   ceph_vinop(inode), frag, dfi->last_name);
-+              doutc(cl, "fetching %p %llx.%llx frag %x offset '%s'\n",
-+                    inode, ceph_vinop(inode), frag, dfi->last_name);
-               req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS);
-               if (IS_ERR(req))
-                       return PTR_ERR(req);
-@@ -446,12 +458,12 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                       ceph_mdsc_put_request(req);
-                       return err;
-               }
--              dout("readdir got and parsed readdir result=%d on "
--                   "frag %x, end=%d, complete=%d, hash_order=%d\n",
--                   err, frag,
--                   (int)req->r_reply_info.dir_end,
--                   (int)req->r_reply_info.dir_complete,
--                   (int)req->r_reply_info.hash_order);
-+              doutc(cl, "%p %llx.%llx got and parsed readdir result=%d"
-+                    "on frag %x, end=%d, complete=%d, hash_order=%d\n",
-+                    inode, ceph_vinop(inode), err, frag,
-+                    (int)req->r_reply_info.dir_end,
-+                    (int)req->r_reply_info.dir_complete,
-+                    (int)req->r_reply_info.hash_order);
-               rinfo = &req->r_reply_info;
-               if (le32_to_cpu(rinfo->dir_dir->frag) != frag) {
-@@ -481,7 +493,8 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                               dfi->dir_ordered_count = req->r_dir_ordered_cnt;
-                       }
-               } else {
--                      dout("readdir !did_prepopulate\n");
-+                      doutc(cl, "%p %llx.%llx !did_prepopulate\n", inode,
-+                            ceph_vinop(inode));
-                       /* disable readdir cache */
-                       dfi->readdir_cache_idx = -1;
-                       /* preclude from marking dir complete */
-@@ -494,8 +507,8 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                                       rinfo->dir_entries + (rinfo->dir_nr-1);
-                       unsigned next_offset = req->r_reply_info.dir_end ?
-                                       2 : (fpos_off(rde->offset) + 1);
--                      err = note_last_dentry(dfi, rde->name, rde->name_len,
--                                             next_offset);
-+                      err = note_last_dentry(fsc, dfi, rde->name,
-+                                             rde->name_len, next_offset);
-                       if (err) {
-                               ceph_mdsc_put_request(dfi->last_readdir);
-                               dfi->last_readdir = NULL;
-@@ -508,9 +521,9 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-       }
-       rinfo = &dfi->last_readdir->r_reply_info;
--      dout("readdir frag %x num %d pos %llx chunk first %llx\n",
--           dfi->frag, rinfo->dir_nr, ctx->pos,
--           rinfo->dir_nr ? rinfo->dir_entries[0].offset : 0LL);
-+      doutc(cl, "%p %llx.%llx frag %x num %d pos %llx chunk first %llx\n",
-+            inode, ceph_vinop(inode), dfi->frag, rinfo->dir_nr, ctx->pos,
-+            rinfo->dir_nr ? rinfo->dir_entries[0].offset : 0LL);
-       i = 0;
-       /* search start position */
-@@ -530,8 +543,9 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-               struct ceph_mds_reply_dir_entry *rde = rinfo->dir_entries + i;
-               if (rde->offset < ctx->pos) {
--                      pr_warn("%s: rde->offset 0x%llx ctx->pos 0x%llx\n",
--                              __func__, rde->offset, ctx->pos);
-+                      pr_warn_client(cl,
-+                              "%p %llx.%llx rde->offset 0x%llx ctx->pos 0x%llx\n",
-+                              inode, ceph_vinop(inode), rde->offset, ctx->pos);
-                       return -EIO;
-               }
-@@ -539,9 +553,9 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                       return -EIO;
-               ctx->pos = rde->offset;
--              dout("readdir (%d/%d) -> %llx '%.*s' %p\n",
--                   i, rinfo->dir_nr, ctx->pos,
--                   rde->name_len, rde->name, &rde->inode.in);
-+              doutc(cl, "%p %llx.%llx (%d/%d) -> %llx '%.*s' %p\n", inode,
-+                    ceph_vinop(inode), i, rinfo->dir_nr, ctx->pos,
-+                    rde->name_len, rde->name, &rde->inode.in);
-               if (!dir_emit(ctx, rde->name, rde->name_len,
-                             ceph_present_ino(inode->i_sb, le64_to_cpu(rde->inode.in->ino)),
-@@ -552,7 +566,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                        * doesn't have enough memory, etc. So for next readdir
-                        * it will continue.
-                        */
--                      dout("filldir stopping us...\n");
-+                      doutc(cl, "filldir stopping us...\n");
-                       return 0;
-               }
-@@ -583,7 +597,8 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-                       kfree(dfi->last_name);
-                       dfi->last_name = NULL;
-               }
--              dout("readdir next frag is %x\n", frag);
-+              doutc(cl, "%p %llx.%llx next frag is %x\n", inode,
-+                    ceph_vinop(inode), frag);
-               goto more;
-       }
-       dfi->file_info.flags |= CEPH_F_ATEND;
-@@ -598,20 +613,23 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
-               spin_lock(&ci->i_ceph_lock);
-               if (dfi->dir_ordered_count ==
-                               atomic64_read(&ci->i_ordered_count)) {
--                      dout(" marking %p complete and ordered\n", inode);
-+                      doutc(cl, " marking %p %llx.%llx complete and ordered\n",
-+                            inode, ceph_vinop(inode));
-                       /* use i_size to track number of entries in
-                        * readdir cache */
-                       BUG_ON(dfi->readdir_cache_idx < 0);
-                       i_size_write(inode, dfi->readdir_cache_idx *
-                                    sizeof(struct dentry*));
-               } else {
--                      dout(" marking %p complete\n", inode);
-+                      doutc(cl, " marking %llx.%llx complete\n",
-+                            ceph_vinop(inode));
-               }
-               __ceph_dir_set_complete(ci, dfi->dir_release_count,
-                                       dfi->dir_ordered_count);
-               spin_unlock(&ci->i_ceph_lock);
-       }
--      dout("readdir %p file %p done.\n", inode, file);
-+      doutc(cl, "%p %llx.%llx file %p done.\n", inode, ceph_vinop(inode),
-+            file);
-       return 0;
- }
-@@ -657,6 +675,7 @@ static loff_t ceph_dir_llseek(struct file *file, loff_t offset, int whence)
- {
-       struct ceph_dir_file_info *dfi = file->private_data;
-       struct inode *inode = file->f_mapping->host;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       loff_t retval;
-       inode_lock(inode);
-@@ -676,7 +695,8 @@ static loff_t ceph_dir_llseek(struct file *file, loff_t offset, int whence)
-       if (offset >= 0) {
-               if (need_reset_readdir(dfi, offset)) {
--                      dout("dir_llseek dropping %p content\n", file);
-+                      doutc(cl, "%p %llx.%llx dropping %p content\n",
-+                            inode, ceph_vinop(inode), file);
-                       reset_readdir(dfi);
-               } else if (is_hash_order(offset) && offset > file->f_pos) {
-                       /* for hash offset, we don't know if a forward seek
-@@ -705,6 +725,7 @@ struct dentry *ceph_handle_snapdir(struct ceph_mds_request *req,
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
-       struct inode *parent = d_inode(dentry->d_parent); /* we hold i_rwsem */
-+      struct ceph_client *cl = ceph_inode_to_client(parent);
-       /* .snap dir? */
-       if (ceph_snap(parent) == CEPH_NOSNAP &&
-@@ -713,8 +734,9 @@ struct dentry *ceph_handle_snapdir(struct ceph_mds_request *req,
-               struct inode *inode = ceph_get_snapdir(parent);
-               res = d_splice_alias(inode, dentry);
--              dout("ENOENT on snapdir %p '%pd', linking to snapdir %p. Spliced dentry %p\n",
--                   dentry, dentry, inode, res);
-+              doutc(cl, "ENOENT on snapdir %p '%pd', linking to "
-+                    "snapdir %p %llx.%llx. Spliced dentry %p\n",
-+                    dentry, dentry, inode, ceph_vinop(inode), res);
-               if (res)
-                       dentry = res;
-       }
-@@ -735,12 +757,15 @@ struct dentry *ceph_handle_snapdir(struct ceph_mds_request *req,
- struct dentry *ceph_finish_lookup(struct ceph_mds_request *req,
-                                 struct dentry *dentry, int err)
- {
-+      struct ceph_client *cl = req->r_mdsc->fsc->client;
-+
-       if (err == -ENOENT) {
-               /* no trace? */
-               err = 0;
-               if (!req->r_reply_info.head->is_dentry) {
--                      dout("ENOENT and no trace, dentry %p inode %p\n",
--                           dentry, d_inode(dentry));
-+                      doutc(cl,
-+                            "ENOENT and no trace, dentry %p inode %llx.%llx\n",
-+                            dentry, ceph_vinop(d_inode(dentry)));
-                       if (d_really_is_positive(dentry)) {
-                               d_drop(dentry);
-                               err = -ENOENT;
-@@ -773,13 +798,14 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb);
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_request *req;
-       int op;
-       int mask;
-       int err;
--      dout("lookup %p dentry %p '%pd'\n",
--           dir, dentry, dentry);
-+      doutc(cl, "%p %llx.%llx/'%pd' dentry %p\n", dir, ceph_vinop(dir),
-+            dentry, dentry);
-       if (dentry->d_name.len > NAME_MAX)
-               return ERR_PTR(-ENAMETOOLONG);
-@@ -802,7 +828,8 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
-               struct ceph_dentry_info *di = ceph_dentry(dentry);
-               spin_lock(&ci->i_ceph_lock);
--              dout(" dir %p flags are 0x%lx\n", dir, ci->i_ceph_flags);
-+              doutc(cl, " dir %llx.%llx flags are 0x%lx\n",
-+                    ceph_vinop(dir), ci->i_ceph_flags);
-               if (strncmp(dentry->d_name.name,
-                           fsc->mount_options->snapdir_name,
-                           dentry->d_name.len) &&
-@@ -812,7 +839,8 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
-                   __ceph_caps_issued_mask_metric(ci, CEPH_CAP_FILE_SHARED, 1)) {
-                       __ceph_touch_fmode(ci, mdsc, CEPH_FILE_MODE_RD);
-                       spin_unlock(&ci->i_ceph_lock);
--                      dout(" dir %p complete, -ENOENT\n", dir);
-+                      doutc(cl, " dir %llx.%llx complete, -ENOENT\n",
-+                            ceph_vinop(dir));
-                       d_add(dentry, NULL);
-                       di->lease_shared_gen = atomic_read(&ci->i_shared_gen);
-                       return NULL;
-@@ -850,7 +878,7 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
-       }
-       dentry = ceph_finish_lookup(req, dentry, err);
-       ceph_mdsc_put_request(req);  /* will dput(dentry) */
--      dout("lookup result=%p\n", dentry);
-+      doutc(cl, "result=%p\n", dentry);
-       return dentry;
- }
-@@ -885,6 +913,7 @@ static int ceph_mknod(struct mnt_idmap *idmap, struct inode *dir,
-                     struct dentry *dentry, umode_t mode, dev_t rdev)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       struct ceph_acl_sec_ctx as_ctx = {};
-       int err;
-@@ -901,8 +930,8 @@ static int ceph_mknod(struct mnt_idmap *idmap, struct inode *dir,
-               goto out;
-       }
--      dout("mknod in dir %p dentry %p mode 0%ho rdev %d\n",
--           dir, dentry, mode, rdev);
-+      doutc(cl, "%p %llx.%llx/'%pd' dentry %p mode 0%ho rdev %d\n",
-+            dir, ceph_vinop(dir), dentry, dentry, mode, rdev);
-       req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_MKNOD, USE_AUTH_MDS);
-       if (IS_ERR(req)) {
-               err = PTR_ERR(req);
-@@ -993,6 +1022,7 @@ static int ceph_symlink(struct mnt_idmap *idmap, struct inode *dir,
-                       struct dentry *dentry, const char *dest)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       struct ceph_acl_sec_ctx as_ctx = {};
-       umode_t mode = S_IFLNK | 0777;
-@@ -1010,7 +1040,8 @@ static int ceph_symlink(struct mnt_idmap *idmap, struct inode *dir,
-               goto out;
-       }
--      dout("symlink in dir %p dentry %p to '%s'\n", dir, dentry, dest);
-+      doutc(cl, "%p %llx.%llx/'%pd' to '%s'\n", dir, ceph_vinop(dir), dentry,
-+            dest);
-       req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_SYMLINK, USE_AUTH_MDS);
-       if (IS_ERR(req)) {
-               err = PTR_ERR(req);
-@@ -1064,6 +1095,7 @@ static int ceph_mkdir(struct mnt_idmap *idmap, struct inode *dir,
-                     struct dentry *dentry, umode_t mode)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       struct ceph_acl_sec_ctx as_ctx = {};
-       int err;
-@@ -1076,10 +1108,11 @@ static int ceph_mkdir(struct mnt_idmap *idmap, struct inode *dir,
-       if (ceph_snap(dir) == CEPH_SNAPDIR) {
-               /* mkdir .snap/foo is a MKSNAP */
-               op = CEPH_MDS_OP_MKSNAP;
--              dout("mksnap dir %p snap '%pd' dn %p\n", dir,
--                   dentry, dentry);
-+              doutc(cl, "mksnap %llx.%llx/'%pd' dentry %p\n",
-+                    ceph_vinop(dir), dentry, dentry);
-       } else if (ceph_snap(dir) == CEPH_NOSNAP) {
--              dout("mkdir dir %p dn %p mode 0%ho\n", dir, dentry, mode);
-+              doutc(cl, "mkdir %llx.%llx/'%pd' dentry %p mode 0%ho\n",
-+                    ceph_vinop(dir), dentry, dentry, mode);
-               op = CEPH_MDS_OP_MKDIR;
-       } else {
-               err = -EROFS;
-@@ -1144,6 +1177,7 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir,
-                    struct dentry *dentry)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       int err;
-@@ -1161,8 +1195,8 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir,
-       if (err)
-               return err;
--      dout("link in dir %p %llx.%llx old_dentry %p:'%pd' dentry %p:'%pd'\n",
--           dir, ceph_vinop(dir), old_dentry, old_dentry, dentry, dentry);
-+      doutc(cl, "%p %llx.%llx/'%pd' to '%pd'\n", dir, ceph_vinop(dir),
-+            old_dentry, dentry);
-       req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LINK, USE_AUTH_MDS);
-       if (IS_ERR(req)) {
-               d_drop(dentry);
-@@ -1200,13 +1234,15 @@ static void ceph_async_unlink_cb(struct ceph_mds_client *mdsc,
- {
-       struct dentry *dentry = req->r_dentry;
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_dentry_info *di = ceph_dentry(dentry);
-       int result = req->r_err ? req->r_err :
-                       le32_to_cpu(req->r_reply_info.head->result);
-       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);
-       spin_lock(&fsc->async_unlink_conflict_lock);
-       hash_del_rcu(&di->hnode);
-@@ -1240,8 +1276,8 @@ static void ceph_async_unlink_cb(struct ceph_mds_client *mdsc,
-               /* mark inode itself for an error (since metadata is bogus) */
-               mapping_set_error(req->r_old_inode->i_mapping, result);
--              pr_warn("async unlink failure path=(%llx)%s result=%d!\n",
--                      base, IS_ERR(path) ? "<<bad>>" : path, result);
-+              pr_warn_client(cl, "failure path=(%llx)%s result=%d!\n",
-+                             base, IS_ERR(path) ? "<<bad>>" : path, result);
-               ceph_mdsc_free_path(path, pathlen);
-       }
- out:
-@@ -1291,6 +1327,7 @@ static int get_caps_for_async_unlink(struct inode *dir, struct dentry *dentry)
- static int ceph_unlink(struct inode *dir, struct dentry *dentry)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       struct inode *inode = d_inode(dentry);
-       struct ceph_mds_request *req;
-@@ -1300,11 +1337,12 @@ static int ceph_unlink(struct inode *dir, struct dentry *dentry)
-       if (ceph_snap(dir) == CEPH_SNAPDIR) {
-               /* rmdir .snap/foo is RMSNAP */
--              dout("rmsnap dir %p '%pd' dn %p\n", dir, dentry, dentry);
-+              doutc(cl, "rmsnap %llx.%llx/'%pd' dn\n", ceph_vinop(dir),
-+                    dentry);
-               op = CEPH_MDS_OP_RMSNAP;
-       } else if (ceph_snap(dir) == CEPH_NOSNAP) {
--              dout("unlink/rmdir dir %p dn %p inode %p\n",
--                   dir, dentry, inode);
-+              doutc(cl, "unlink/rmdir %llx.%llx/'%pd' inode %llx.%llx\n",
-+                    ceph_vinop(dir), dentry, ceph_vinop(inode));
-               op = d_is_dir(dentry) ?
-                       CEPH_MDS_OP_RMDIR : CEPH_MDS_OP_UNLINK;
-       } else
-@@ -1327,9 +1365,9 @@ static int ceph_unlink(struct inode *dir, struct dentry *dentry)
-           (req->r_dir_caps = get_caps_for_async_unlink(dir, dentry))) {
-               struct ceph_dentry_info *di = ceph_dentry(dentry);
--              dout("async unlink on %llu/%.*s caps=%s", ceph_ino(dir),
--                   dentry->d_name.len, dentry->d_name.name,
--                   ceph_cap_string(req->r_dir_caps));
-+              doutc(cl, "async unlink on %llx.%llx/'%pd' caps=%s",
-+                    ceph_vinop(dir), dentry,
-+                    ceph_cap_string(req->r_dir_caps));
-               set_bit(CEPH_MDS_R_ASYNC, &req->r_req_flags);
-               req->r_callback = ceph_async_unlink_cb;
-               req->r_old_inode = d_inode(dentry);
-@@ -1384,6 +1422,7 @@ static int ceph_rename(struct mnt_idmap *idmap, struct inode *old_dir,
-                      struct dentry *new_dentry, unsigned int flags)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(old_dir->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       int op = CEPH_MDS_OP_RENAME;
-       int err;
-@@ -1413,8 +1452,9 @@ static int ceph_rename(struct mnt_idmap *idmap, struct inode *old_dir,
-       if (err)
-               return err;
--      dout("rename dir %p dentry %p to dir %p dentry %p\n",
--           old_dir, old_dentry, new_dir, new_dentry);
-+      doutc(cl, "%llx.%llx/'%pd' to %llx.%llx/'%pd'\n",
-+            ceph_vinop(old_dir), old_dentry, ceph_vinop(new_dir),
-+            new_dentry);
-       req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS);
-       if (IS_ERR(req))
-               return PTR_ERR(req);
-@@ -1459,9 +1499,10 @@ static int ceph_rename(struct mnt_idmap *idmap, struct inode *old_dir,
- void __ceph_dentry_lease_touch(struct ceph_dentry_info *di)
- {
-       struct dentry *dn = di->dentry;
--      struct ceph_mds_client *mdsc;
-+      struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dn->d_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
--      dout("dentry_lease_touch %p %p '%pd'\n", di, dn, dn);
-+      doutc(cl, "%p %p '%pd'\n", di, dn, dn);
-       di->flags |= CEPH_DENTRY_LEASE_LIST;
-       if (di->flags & CEPH_DENTRY_SHRINK_LIST) {
-@@ -1469,7 +1510,6 @@ void __ceph_dentry_lease_touch(struct ceph_dentry_info *di)
-               return;
-       }
--      mdsc = ceph_sb_to_fs_client(dn->d_sb)->mdsc;
-       spin_lock(&mdsc->dentry_list_lock);
-       list_move_tail(&di->lease_list, &mdsc->dentry_leases);
-       spin_unlock(&mdsc->dentry_list_lock);
-@@ -1493,10 +1533,10 @@ static void __dentry_dir_lease_touch(struct ceph_mds_client* mdsc,
- void __ceph_dentry_dir_lease_touch(struct ceph_dentry_info *di)
- {
-       struct dentry *dn = di->dentry;
--      struct ceph_mds_client *mdsc;
-+      struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dn->d_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
--      dout("dentry_dir_lease_touch %p %p '%pd' (offset 0x%llx)\n",
--           di, dn, dn, di->offset);
-+      doutc(cl, "%p %p '%pd' (offset 0x%llx)\n", di, dn, dn, di->offset);
-       if (!list_empty(&di->lease_list)) {
-               if (di->flags & CEPH_DENTRY_LEASE_LIST) {
-@@ -1516,7 +1556,6 @@ void __ceph_dentry_dir_lease_touch(struct ceph_dentry_info *di)
-               return;
-       }
--      mdsc = ceph_sb_to_fs_client(dn->d_sb)->mdsc;
-       spin_lock(&mdsc->dentry_list_lock);
-       __dentry_dir_lease_touch(mdsc, di),
-       spin_unlock(&mdsc->dentry_list_lock);
-@@ -1757,6 +1796,8 @@ static int dentry_lease_is_valid(struct dentry *dentry, unsigned int flags)
- {
-       struct ceph_dentry_info *di;
-       struct ceph_mds_session *session = NULL;
-+      struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dentry->d_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       u32 seq = 0;
-       int valid = 0;
-@@ -1789,7 +1830,7 @@ static int dentry_lease_is_valid(struct dentry *dentry, unsigned int flags)
-                                        CEPH_MDS_LEASE_RENEW, seq);
-               ceph_put_mds_session(session);
-       }
--      dout("dentry_lease_is_valid - dentry %p = %d\n", dentry, valid);
-+      doutc(cl, "dentry %p = %d\n", dentry, valid);
-       return valid;
- }
-@@ -1832,6 +1873,7 @@ static int dir_lease_is_valid(struct inode *dir, struct dentry *dentry,
-                             struct ceph_mds_client *mdsc)
- {
-       struct ceph_inode_info *ci = ceph_inode(dir);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       int valid;
-       int shared_gen;
-@@ -1853,8 +1895,9 @@ static int dir_lease_is_valid(struct inode *dir, struct dentry *dentry,
-                       valid = 0;
-               spin_unlock(&dentry->d_lock);
-       }
--      dout("dir_lease_is_valid dir %p v%u dentry %p = %d\n",
--           dir, (unsigned)atomic_read(&ci->i_shared_gen), dentry, valid);
-+      doutc(cl, "dir %p %llx.%llx v%u dentry %p '%pd' = %d\n", dir,
-+            ceph_vinop(dir), (unsigned)atomic_read(&ci->i_shared_gen),
-+            dentry, dentry, valid);
-       return valid;
- }
-@@ -1863,10 +1906,11 @@ static int dir_lease_is_valid(struct inode *dir, struct dentry *dentry,
-  */
- static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
- {
-+      struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dentry->d_sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       int valid = 0;
-       struct dentry *parent;
-       struct inode *dir, *inode;
--      struct ceph_mds_client *mdsc;
-       valid = fscrypt_d_revalidate(dentry, flags);
-       if (valid <= 0)
-@@ -1884,16 +1928,16 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
-               inode = d_inode(dentry);
-       }
--      dout("d_revalidate %p '%pd' inode %p offset 0x%llx nokey %d\n", dentry,
--           dentry, inode, ceph_dentry(dentry)->offset,
--           !!(dentry->d_flags & DCACHE_NOKEY_NAME));
-+      doutc(cl, "%p '%pd' inode %p offset 0x%llx nokey %d\n",
-+            dentry, dentry, inode, ceph_dentry(dentry)->offset,
-+            !!(dentry->d_flags & DCACHE_NOKEY_NAME));
-       mdsc = ceph_sb_to_fs_client(dir->i_sb)->mdsc;
-       /* always trust cached snapped dentries, snapdir dentry */
-       if (ceph_snap(dir) != CEPH_NOSNAP) {
--              dout("d_revalidate %p '%pd' inode %p is SNAPPED\n", dentry,
--                   dentry, inode);
-+              doutc(cl, "%p '%pd' inode %p is SNAPPED\n", dentry,
-+                    dentry, inode);
-               valid = 1;
-       } else if (inode && ceph_snap(inode) == CEPH_SNAPDIR) {
-               valid = 1;
-@@ -1948,14 +1992,14 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
-                               break;
-                       }
-                       ceph_mdsc_put_request(req);
--                      dout("d_revalidate %p lookup result=%d\n",
--                           dentry, err);
-+                      doutc(cl, "%p '%pd', lookup result=%d\n", dentry,
-+                            dentry, err);
-               }
-       } else {
-               percpu_counter_inc(&mdsc->metric.d_lease_hit);
-       }
--      dout("d_revalidate %p %s\n", dentry, valid ? "valid" : "invalid");
-+      doutc(cl, "%p '%pd' %s\n", dentry, dentry, valid ? "valid" : "invalid");
-       if (!valid)
-               ceph_dir_clear_complete(dir);
-@@ -1997,7 +2041,7 @@ static void ceph_d_release(struct dentry *dentry)
-       struct ceph_dentry_info *di = ceph_dentry(dentry);
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
--      dout("d_release %p\n", dentry);
-+      doutc(fsc->client, "dentry %p '%pd'\n", dentry, dentry);
-       atomic64_dec(&fsc->mdsc->metric.total_dentries);
-@@ -2018,10 +2062,12 @@ static void ceph_d_release(struct dentry *dentry)
-  */
- static void ceph_d_prune(struct dentry *dentry)
- {
-+      struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dentry->d_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *dir_ci;
-       struct ceph_dentry_info *di;
--      dout("ceph_d_prune %pd %p\n", dentry, dentry);
-+      doutc(cl, "dentry %p '%pd'\n", dentry, dentry);
-       /* do we have a valid parent? */
-       if (IS_ROOT(dentry))
-diff --git a/fs/ceph/export.c b/fs/ceph/export.c
-index 52c4daf2447d..726af69d4d62 100644
---- a/fs/ceph/export.c
-+++ b/fs/ceph/export.c
-@@ -36,6 +36,7 @@ struct ceph_nfs_snapfh {
- static int ceph_encode_snapfh(struct inode *inode, u32 *rawfh, int *max_len,
-                             struct inode *parent_inode)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       static const int snap_handle_length =
-               sizeof(struct ceph_nfs_snapfh) >> 2;
-       struct ceph_nfs_snapfh *sfh = (void *)rawfh;
-@@ -79,13 +80,14 @@ static int ceph_encode_snapfh(struct inode *inode, u32 *rawfh, int *max_len,
-       *max_len = snap_handle_length;
-       ret = FILEID_BTRFS_WITH_PARENT;
- out:
--      dout("encode_snapfh %llx.%llx ret=%d\n", ceph_vinop(inode), ret);
-+      doutc(cl, "%p %llx.%llx ret=%d\n", inode, ceph_vinop(inode), ret);
-       return ret;
- }
- static int ceph_encode_fh(struct inode *inode, u32 *rawfh, int *max_len,
-                         struct inode *parent_inode)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       static const int handle_length =
-               sizeof(struct ceph_nfs_fh) >> 2;
-       static const int connected_handle_length =
-@@ -105,15 +107,15 @@ static int ceph_encode_fh(struct inode *inode, u32 *rawfh, int *max_len,
-       if (parent_inode) {
-               struct ceph_nfs_confh *cfh = (void *)rawfh;
--              dout("encode_fh %llx with parent %llx\n",
--                   ceph_ino(inode), ceph_ino(parent_inode));
-+              doutc(cl, "%p %llx.%llx with parent %p %llx.%llx\n", inode,
-+                    ceph_vinop(inode), parent_inode, ceph_vinop(parent_inode));
-               cfh->ino = ceph_ino(inode);
-               cfh->parent_ino = ceph_ino(parent_inode);
-               *max_len = connected_handle_length;
-               type = FILEID_INO32_GEN_PARENT;
-       } else {
-               struct ceph_nfs_fh *fh = (void *)rawfh;
--              dout("encode_fh %llx\n", ceph_ino(inode));
-+              doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-               fh->ino = ceph_ino(inode);
-               *max_len = handle_length;
-               type = FILEID_INO32_GEN;
-@@ -206,6 +208,7 @@ static struct dentry *__snapfh_to_dentry(struct super_block *sb,
-                                         bool want_parent)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       struct inode *inode;
-       struct ceph_vino vino;
-@@ -278,11 +281,10 @@ static struct dentry *__snapfh_to_dentry(struct super_block *sb,
-       ceph_mdsc_put_request(req);
-       if (want_parent) {
--              dout("snapfh_to_parent %llx.%llx\n err=%d\n",
--                   vino.ino, vino.snap, err);
-+              doutc(cl, "%llx.%llx\n err=%d\n", vino.ino, vino.snap, err);
-       } else {
--              dout("snapfh_to_dentry %llx.%llx parent %llx hash %x err=%d",
--                    vino.ino, vino.snap, sfh->parent_ino, sfh->hash, err);
-+              doutc(cl, "%llx.%llx parent %llx hash %x err=%d", vino.ino,
-+                    vino.snap, sfh->parent_ino, sfh->hash, err);
-       }
-       if (IS_ERR(inode))
-               return ERR_CAST(inode);
-@@ -297,6 +299,7 @@ static struct dentry *ceph_fh_to_dentry(struct super_block *sb,
-                                       struct fid *fid,
-                                       int fh_len, int fh_type)
- {
-+      struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
-       struct ceph_nfs_fh *fh = (void *)fid->raw;
-       if (fh_type == FILEID_BTRFS_WITH_PARENT) {
-@@ -310,7 +313,7 @@ static struct dentry *ceph_fh_to_dentry(struct super_block *sb,
-       if (fh_len < sizeof(*fh) / 4)
-               return NULL;
--      dout("fh_to_dentry %llx\n", fh->ino);
-+      doutc(fsc->client, "%llx\n", fh->ino);
-       return __fh_to_dentry(sb, fh->ino);
- }
-@@ -363,6 +366,7 @@ static struct dentry *__get_parent(struct super_block *sb,
- static struct dentry *ceph_get_parent(struct dentry *child)
- {
-       struct inode *inode = d_inode(child);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct dentry *dn;
-       if (ceph_snap(inode) != CEPH_NOSNAP) {
-@@ -402,8 +406,8 @@ static struct dentry *ceph_get_parent(struct dentry *child)
-               dn = __get_parent(child->d_sb, child, 0);
-       }
- out:
--      dout("get_parent %p ino %llx.%llx err=%ld\n",
--           child, ceph_vinop(inode), (long)PTR_ERR_OR_ZERO(dn));
-+      doutc(cl, "child %p %p %llx.%llx err=%ld\n", child, inode,
-+            ceph_vinop(inode), (long)PTR_ERR_OR_ZERO(dn));
-       return dn;
- }
-@@ -414,6 +418,7 @@ static struct dentry *ceph_fh_to_parent(struct super_block *sb,
-                                       struct fid *fid,
-                                       int fh_len, int fh_type)
- {
-+      struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
-       struct ceph_nfs_confh *cfh = (void *)fid->raw;
-       struct dentry *dentry;
-@@ -427,7 +432,7 @@ static struct dentry *ceph_fh_to_parent(struct super_block *sb,
-       if (fh_len < sizeof(*cfh) / 4)
-               return NULL;
--      dout("fh_to_parent %llx\n", cfh->parent_ino);
-+      doutc(fsc->client, "%llx\n", cfh->parent_ino);
-       dentry = __get_parent(sb, NULL, cfh->ino);
-       if (unlikely(dentry == ERR_PTR(-ENOENT)))
-               dentry = __fh_to_dentry(sb, cfh->parent_ino);
-@@ -526,8 +531,8 @@ static int __get_snap_name(struct dentry *parent, char *name,
-       if (req)
-               ceph_mdsc_put_request(req);
-       kfree(last_name);
--      dout("get_snap_name %p ino %llx.%llx err=%d\n",
--           child, ceph_vinop(inode), err);
-+      doutc(fsc->client, "child dentry %p %p %llx.%llx err=%d\n", child,
-+            inode, ceph_vinop(inode), err);
-       return err;
- }
-@@ -588,9 +593,9 @@ static int ceph_get_name(struct dentry *parent, char *name,
-               ceph_fname_free_buffer(dir, &oname);
-       }
- out:
--      dout("get_name %p ino %llx.%llx err %d %s%s\n",
--                   child, ceph_vinop(inode), err,
--                   err ? "" : "name ", err ? "" : name);
-+      doutc(mdsc->fsc->client, "child dentry %p %p %llx.%llx err %d %s%s\n",
-+            child, inode, ceph_vinop(inode), err, err ? "" : "name ",
-+            err ? "" : name);
-       ceph_mdsc_put_request(req);
-       return err;
- }
-diff --git a/fs/ceph/file.c b/fs/ceph/file.c
-index a03b11cf7887..59a0f149ec82 100644
---- a/fs/ceph/file.c
-+++ b/fs/ceph/file.c
-@@ -19,8 +19,9 @@
- #include "io.h"
- #include "metric.h"
--static __le32 ceph_flags_sys2wire(u32 flags)
-+static __le32 ceph_flags_sys2wire(struct ceph_mds_client *mdsc, u32 flags)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       u32 wire_flags = 0;
-       switch (flags & O_ACCMODE) {
-@@ -48,7 +49,7 @@ static __le32 ceph_flags_sys2wire(u32 flags)
- #undef ceph_sys2wire
-       if (flags)
--              dout("unused open flags: %x\n", flags);
-+              doutc(cl, "unused open flags: %x\n", flags);
-       return cpu_to_le32(wire_flags);
- }
-@@ -189,7 +190,7 @@ prepare_open_request(struct super_block *sb, int flags, int create_mode)
-       if (IS_ERR(req))
-               goto out;
-       req->r_fmode = ceph_flags_to_mode(flags);
--      req->r_args.open.flags = ceph_flags_sys2wire(flags);
-+      req->r_args.open.flags = ceph_flags_sys2wire(mdsc, flags);
-       req->r_args.open.mode = cpu_to_le32(create_mode);
- out:
-       return req;
-@@ -201,11 +202,12 @@ static int ceph_init_file_info(struct inode *inode, struct file *file,
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mount_options *opt =
-               ceph_inode_to_fs_client(&ci->netfs.inode)->mount_options;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_file_info *fi;
-       int ret;
--      dout("%s %p %p 0%o (%s)\n", __func__, inode, file,
--                      inode->i_mode, isdir ? "dir" : "regular");
-+      doutc(cl, "%p %llx.%llx %p 0%o (%s)\n", inode, ceph_vinop(inode),
-+            file, inode->i_mode, isdir ? "dir" : "regular");
-       BUG_ON(inode->i_fop->release != ceph_release);
-       if (isdir) {
-@@ -259,6 +261,7 @@ static int ceph_init_file_info(struct inode *inode, struct file *file,
-  */
- static int ceph_init_file(struct inode *inode, struct file *file, int fmode)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int ret = 0;
-       switch (inode->i_mode & S_IFMT) {
-@@ -271,13 +274,13 @@ static int ceph_init_file(struct inode *inode, struct file *file, int fmode)
-               break;
-       case S_IFLNK:
--              dout("init_file %p %p 0%o (symlink)\n", inode, file,
--                   inode->i_mode);
-+              doutc(cl, "%p %llx.%llx %p 0%o (symlink)\n", inode,
-+                    ceph_vinop(inode), file, inode->i_mode);
-               break;
-       default:
--              dout("init_file %p %p 0%o (special)\n", inode, file,
--                   inode->i_mode);
-+              doutc(cl, "%p %llx.%llx %p 0%o (special)\n", inode,
-+                    ceph_vinop(inode), file, inode->i_mode);
-               /*
-                * we need to drop the open ref now, since we don't
-                * have .release set to ceph_release.
-@@ -296,6 +299,7 @@ static int ceph_init_file(struct inode *inode, struct file *file, int fmode)
- int ceph_renew_caps(struct inode *inode, int fmode)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_request *req;
-       int err, flags, wanted;
-@@ -307,8 +311,9 @@ int ceph_renew_caps(struct inode *inode, int fmode)
-           (!(wanted & CEPH_CAP_ANY_WR) || ci->i_auth_cap)) {
-               int issued = __ceph_caps_issued(ci, NULL);
-               spin_unlock(&ci->i_ceph_lock);
--              dout("renew caps %p want %s issued %s updating mds_wanted\n",
--                   inode, ceph_cap_string(wanted), ceph_cap_string(issued));
-+              doutc(cl, "%p %llx.%llx want %s issued %s updating mds_wanted\n",
-+                    inode, ceph_vinop(inode), ceph_cap_string(wanted),
-+                    ceph_cap_string(issued));
-               ceph_check_caps(ci, 0);
-               return 0;
-       }
-@@ -339,7 +344,8 @@ int ceph_renew_caps(struct inode *inode, int fmode)
-       err = ceph_mdsc_do_request(mdsc, NULL, req);
-       ceph_mdsc_put_request(req);
- out:
--      dout("renew caps %p open result=%d\n", inode, err);
-+      doutc(cl, "%p %llx.%llx open result=%d\n", inode, ceph_vinop(inode),
-+            err);
-       return err < 0 ? err : 0;
- }
-@@ -353,6 +359,7 @@ int ceph_open(struct inode *inode, struct file *file)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       struct ceph_mds_request *req;
-       struct ceph_file_info *fi = file->private_data;
-@@ -360,7 +367,7 @@ int ceph_open(struct inode *inode, struct file *file)
-       int flags, fmode, wanted;
-       if (fi) {
--              dout("open file %p is already opened\n", file);
-+              doutc(cl, "file %p is already opened\n", file);
-               return 0;
-       }
-@@ -374,8 +381,8 @@ int ceph_open(struct inode *inode, struct file *file)
-                       return err;
-       }
--      dout("open inode %p ino %llx.%llx file %p flags %d (%d)\n", inode,
--           ceph_vinop(inode), file, flags, file->f_flags);
-+      doutc(cl, "%p %llx.%llx file %p flags %d (%d)\n", inode,
-+            ceph_vinop(inode), file, flags, file->f_flags);
-       fmode = ceph_flags_to_mode(flags);
-       wanted = ceph_caps_for_mode(fmode);
-@@ -399,9 +406,9 @@ int ceph_open(struct inode *inode, struct file *file)
-               int mds_wanted = __ceph_caps_mds_wanted(ci, true);
-               int issued = __ceph_caps_issued(ci, NULL);
--              dout("open %p fmode %d want %s issued %s using existing\n",
--                   inode, fmode, ceph_cap_string(wanted),
--                   ceph_cap_string(issued));
-+              doutc(cl, "open %p fmode %d want %s issued %s using existing\n",
-+                    inode, fmode, ceph_cap_string(wanted),
-+                    ceph_cap_string(issued));
-               __ceph_touch_fmode(ci, mdsc, fmode);
-               spin_unlock(&ci->i_ceph_lock);
-@@ -421,7 +428,7 @@ int ceph_open(struct inode *inode, struct file *file)
-       spin_unlock(&ci->i_ceph_lock);
--      dout("open fmode %d wants %s\n", fmode, ceph_cap_string(wanted));
-+      doutc(cl, "open fmode %d wants %s\n", fmode, ceph_cap_string(wanted));
-       req = prepare_open_request(inode->i_sb, flags, 0);
-       if (IS_ERR(req)) {
-               err = PTR_ERR(req);
-@@ -435,7 +442,7 @@ int ceph_open(struct inode *inode, struct file *file)
-       if (!err)
-               err = ceph_init_file(inode, file, req->r_fmode);
-       ceph_mdsc_put_request(req);
--      dout("open result=%d on %llx.%llx\n", err, ceph_vinop(inode));
-+      doutc(cl, "open result=%d on %llx.%llx\n", err, ceph_vinop(inode));
- out:
-       return err;
- }
-@@ -515,6 +522,7 @@ static int try_prep_async_create(struct inode *dir, struct dentry *dentry,
- static void restore_deleg_ino(struct inode *dir, u64 ino)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(dir);
-       struct ceph_inode_info *ci = ceph_inode(dir);
-       struct ceph_mds_session *s = NULL;
-@@ -525,7 +533,8 @@ static void restore_deleg_ino(struct inode *dir, u64 ino)
-       if (s) {
-               int err = ceph_restore_deleg_ino(s, ino);
-               if (err)
--                      pr_warn("ceph: unable to restore delegated ino 0x%llx to session: %d\n",
-+                      pr_warn_client(cl,
-+                              "unable to restore delegated ino 0x%llx to session: %d\n",
-                               ino, err);
-               ceph_put_mds_session(s);
-       }
-@@ -557,6 +566,7 @@ static void wake_async_create_waiters(struct inode *inode,
- static void ceph_async_create_cb(struct ceph_mds_client *mdsc,
-                                  struct ceph_mds_request *req)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct dentry *dentry = req->r_dentry;
-       struct inode *dinode = d_inode(dentry);
-       struct inode *tinode = req->r_target_inode;
-@@ -577,7 +587,8 @@ static void ceph_async_create_cb(struct ceph_mds_client *mdsc,
-               char *path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen,
-                                                 &base, 0);
--              pr_warn("async create failure path=(%llx)%s result=%d!\n",
-+              pr_warn_client(cl,
-+                      "async create failure path=(%llx)%s result=%d!\n",
-                       base, IS_ERR(path) ? "<<bad>>" : path, result);
-               ceph_mdsc_free_path(path, pathlen);
-@@ -596,14 +607,15 @@ static void ceph_async_create_cb(struct ceph_mds_client *mdsc,
-               u64 ino = ceph_vino(tinode).ino;
-               if (req->r_deleg_ino != ino)
--                      pr_warn("%s: inode number mismatch! err=%d deleg_ino=0x%llx target=0x%llx\n",
--                              __func__, req->r_err, req->r_deleg_ino, ino);
-+                      pr_warn_client(cl,
-+                              "inode number mismatch! err=%d deleg_ino=0x%llx target=0x%llx\n",
-+                              req->r_err, req->r_deleg_ino, ino);
-               mapping_set_error(tinode->i_mapping, result);
-               wake_async_create_waiters(tinode, req->r_session);
-       } else if (!result) {
--              pr_warn("%s: no req->r_target_inode for 0x%llx\n", __func__,
--                      req->r_deleg_ino);
-+              pr_warn_client(cl, "no req->r_target_inode for 0x%llx\n",
-+                             req->r_deleg_ino);
-       }
- out:
-       ceph_mdsc_release_dir_caps(req);
-@@ -625,6 +637,7 @@ static int ceph_finish_async_create(struct inode *dir, struct inode *inode,
-       struct timespec64 now;
-       struct ceph_string *pool_ns;
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_vino vino = { .ino = req->r_deleg_ino,
-                                 .snap = CEPH_NOSNAP };
-@@ -683,7 +696,7 @@ static int ceph_finish_async_create(struct inode *dir, struct inode *inode,
-                             req->r_fmode, NULL);
-       up_read(&mdsc->snap_rwsem);
-       if (ret) {
--              dout("%s failed to fill inode: %d\n", __func__, ret);
-+              doutc(cl, "failed to fill inode: %d\n", ret);
-               ceph_dir_clear_complete(dir);
-               if (!d_unhashed(dentry))
-                       d_drop(dentry);
-@@ -691,8 +704,8 @@ static int ceph_finish_async_create(struct inode *dir, struct inode *inode,
-       } else {
-               struct dentry *dn;
--              dout("%s d_adding new inode 0x%llx to 0x%llx/%s\n", __func__,
--                      vino.ino, ceph_ino(dir), dentry->d_name.name);
-+              doutc(cl, "d_adding new inode 0x%llx to 0x%llx/%s\n",
-+                    vino.ino, ceph_ino(dir), dentry->d_name.name);
-               ceph_dir_clear_ordered(dir);
-               ceph_init_inode_acls(inode, as_ctx);
-               if (inode->i_state & I_NEW) {
-@@ -731,6 +744,7 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
-                    struct file *file, unsigned flags, umode_t mode)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       struct ceph_mds_request *req;
-       struct inode *new_inode = NULL;
-@@ -740,9 +754,9 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
-       int mask;
-       int err;
--      dout("atomic_open %p dentry %p '%pd' %s flags %d mode 0%o\n",
--           dir, dentry, dentry,
--           d_unhashed(dentry) ? "unhashed" : "hashed", flags, mode);
-+      doutc(cl, "%p %llx.%llx dentry %p '%pd' %s flags %d mode 0%o\n",
-+            dir, ceph_vinop(dir), dentry, dentry,
-+            d_unhashed(dentry) ? "unhashed" : "hashed", flags, mode);
-       if (dentry->d_name.len > NAME_MAX)
-               return -ENAMETOOLONG;
-@@ -880,17 +894,18 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
-               goto out_req;
-       if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) {
-               /* make vfs retry on splice, ENOENT, or symlink */
--              dout("atomic_open finish_no_open on dn %p\n", dn);
-+              doutc(cl, "finish_no_open on dn %p\n", dn);
-               err = finish_no_open(file, dn);
-       } else {
-               if (IS_ENCRYPTED(dir) &&
-                   !fscrypt_has_permitted_context(dir, d_inode(dentry))) {
--                      pr_warn("Inconsistent encryption context (parent %llx:%llx child %llx:%llx)\n",
-+                      pr_warn_client(cl,
-+                              "Inconsistent encryption context (parent %llx:%llx child %llx:%llx)\n",
-                               ceph_vinop(dir), ceph_vinop(d_inode(dentry)));
-                       goto out_req;
-               }
--              dout("atomic_open finish_open on dn %p\n", dn);
-+              doutc(cl, "finish_open on dn %p\n", dn);
-               if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) {
-                       struct inode *newino = d_inode(dentry);
-@@ -905,17 +920,19 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
-       iput(new_inode);
- out_ctx:
-       ceph_release_acl_sec_ctx(&as_ctx);
--      dout("atomic_open result=%d\n", err);
-+      doutc(cl, "result=%d\n", err);
-       return err;
- }
- int ceph_release(struct inode *inode, struct file *file)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       if (S_ISDIR(inode->i_mode)) {
-               struct ceph_dir_file_info *dfi = file->private_data;
--              dout("release inode %p dir file %p\n", inode, file);
-+              doutc(cl, "%p %llx.%llx dir file %p\n", inode,
-+                    ceph_vinop(inode), file);
-               WARN_ON(!list_empty(&dfi->file_info.rw_contexts));
-               ceph_put_fmode(ci, dfi->file_info.fmode, 1);
-@@ -927,7 +944,8 @@ int ceph_release(struct inode *inode, struct file *file)
-               kmem_cache_free(ceph_dir_file_cachep, dfi);
-       } else {
-               struct ceph_file_info *fi = file->private_data;
--              dout("release inode %p regular file %p\n", inode, file);
-+              doutc(cl, "%p %llx.%llx regular file %p\n", inode,
-+                    ceph_vinop(inode), file);
-               WARN_ON(!list_empty(&fi->rw_contexts));
-               ceph_fscache_unuse_cookie(inode, file->f_mode & FMODE_WRITE);
-@@ -963,6 +981,7 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_client *osdc = &fsc->client->osdc;
-       ssize_t ret;
-       u64 off = *ki_pos;
-@@ -971,7 +990,8 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
-       bool sparse = IS_ENCRYPTED(inode) || ceph_test_mount_opt(fsc, SPARSEREAD);
-       u64 objver = 0;
--      dout("sync_read on inode %p %llx~%llx\n", inode, *ki_pos, len);
-+      doutc(cl, "on inode %p %llx.%llx %llx~%llx\n", inode,
-+            ceph_vinop(inode), *ki_pos, len);
-       if (ceph_inode_is_shutdown(inode))
-               return -EIO;
-@@ -1006,8 +1026,8 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
-               /* determine new offset/length if encrypted */
-               ceph_fscrypt_adjust_off_and_len(inode, &read_off, &read_len);
--              dout("sync_read orig %llu~%llu reading %llu~%llu",
--                   off, len, read_off, read_len);
-+              doutc(cl, "orig %llu~%llu reading %llu~%llu", off, len,
-+                    read_off, read_len);
-               req = ceph_osdc_new_request(osdc, &ci->i_layout,
-                                       ci->i_vino, read_off, &read_len, 0, 1,
-@@ -1061,8 +1081,8 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
-                       objver = req->r_version;
-               i_size = i_size_read(inode);
--              dout("sync_read %llu~%llu got %zd i_size %llu%s\n",
--                   off, len, ret, i_size, (more ? " MORE" : ""));
-+              doutc(cl, "%llu~%llu got %zd i_size %llu%s\n", off, len,
-+                    ret, i_size, (more ? " MORE" : ""));
-               /* Fix it to go to end of extent map */
-               if (sparse && ret >= 0)
-@@ -1108,8 +1128,8 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
-                       int zlen = min(len - ret, i_size - off - ret);
-                       int zoff = page_off + ret;
--                      dout("sync_read zero gap %llu~%llu\n",
--                              off + ret, off + ret + zlen);
-+                      doutc(cl, "zero gap %llu~%llu\n", off + ret,
-+                            off + ret + zlen);
-                       ceph_zero_page_vector_range(zoff, zlen, pages);
-                       ret += zlen;
-               }
-@@ -1154,7 +1174,7 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
-               if (last_objver)
-                       *last_objver = objver;
-       }
--      dout("sync_read result %zd retry_op %d\n", ret, *retry_op);
-+      doutc(cl, "result %zd retry_op %d\n", ret, *retry_op);
-       return ret;
- }
-@@ -1163,9 +1183,11 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to,
- {
-       struct file *file = iocb->ki_filp;
-       struct inode *inode = file_inode(file);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
--      dout("sync_read on file %p %llx~%zx %s\n", file, iocb->ki_pos,
--           iov_iter_count(to), (file->f_flags & O_DIRECT) ? "O_DIRECT" : "");
-+      doutc(cl, "on file %p %llx~%zx %s\n", file, iocb->ki_pos,
-+            iov_iter_count(to),
-+            (file->f_flags & O_DIRECT) ? "O_DIRECT" : "");
-       return __ceph_sync_read(inode, &iocb->ki_pos, to, retry_op, NULL);
- }
-@@ -1193,6 +1215,7 @@ static void ceph_aio_retry_work(struct work_struct *work);
- static void ceph_aio_complete(struct inode *inode,
-                             struct ceph_aio_request *aio_req)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       int ret;
-@@ -1206,7 +1229,7 @@ static void ceph_aio_complete(struct inode *inode,
-       if (!ret)
-               ret = aio_req->total_len;
--      dout("ceph_aio_complete %p rc %d\n", inode, ret);
-+      doutc(cl, "%p %llx.%llx rc %d\n", inode, ceph_vinop(inode), ret);
-       if (ret >= 0 && aio_req->write) {
-               int dirty;
-@@ -1245,11 +1268,13 @@ static void ceph_aio_complete_req(struct ceph_osd_request *req)
-       struct ceph_client_metric *metric = &ceph_sb_to_mdsc(inode->i_sb)->metric;
-       unsigned int len = osd_data->bvec_pos.iter.bi_size;
-       bool sparse = (op->op == CEPH_OSD_OP_SPARSE_READ);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       BUG_ON(osd_data->type != CEPH_OSD_DATA_TYPE_BVECS);
-       BUG_ON(!osd_data->num_bvecs);
--      dout("ceph_aio_complete_req %p rc %d bytes %u\n", inode, rc, len);
-+      doutc(cl, "req %p inode %p %llx.%llx, rc %d bytes %u\n", req,
-+            inode, ceph_vinop(inode), rc, len);
-       if (rc == -EOLDSNAPC) {
-               struct ceph_aio_work *aio_work;
-@@ -1390,6 +1415,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_client_metric *metric = &fsc->mdsc->metric;
-       struct ceph_vino vino;
-       struct ceph_osd_request *req;
-@@ -1408,9 +1434,9 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
-       if (write && ceph_snap(file_inode(file)) != CEPH_NOSNAP)
-               return -EROFS;
--      dout("sync_direct_%s on file %p %lld~%u snapc %p seq %lld\n",
--           (write ? "write" : "read"), file, pos, (unsigned)count,
--           snapc, snapc ? snapc->seq : 0);
-+      doutc(cl, "sync_direct_%s on file %p %lld~%u snapc %p seq %lld\n",
-+            (write ? "write" : "read"), file, pos, (unsigned)count,
-+            snapc, snapc ? snapc->seq : 0);
-       if (write) {
-               int ret2;
-@@ -1421,7 +1447,8 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
-                                       pos >> PAGE_SHIFT,
-                                       (pos + count - 1) >> PAGE_SHIFT);
-               if (ret2 < 0)
--                      dout("invalidate_inode_pages2_range returned %d\n", ret2);
-+                      doutc(cl, "invalidate_inode_pages2_range returned %d\n",
-+                            ret2);
-               flags = /* CEPH_OSD_FLAG_ORDERSNAP | */ CEPH_OSD_FLAG_WRITE;
-       } else {
-@@ -1617,6 +1644,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_client *osdc = &fsc->client->osdc;
-       struct ceph_osd_request *req;
-       struct page **pages;
-@@ -1631,8 +1659,8 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-       if (ceph_snap(file_inode(file)) != CEPH_NOSNAP)
-               return -EROFS;
--      dout("sync_write on file %p %lld~%u snapc %p seq %lld\n",
--           file, pos, (unsigned)count, snapc, snapc->seq);
-+      doutc(cl, "on file %p %lld~%u snapc %p seq %lld\n", file, pos,
-+            (unsigned)count, snapc, snapc->seq);
-       ret = filemap_write_and_wait_range(inode->i_mapping,
-                                          pos, pos + count - 1);
-@@ -1676,9 +1704,9 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-               last = (pos + len) != (write_pos + write_len);
-               rmw = first || last;
--              dout("sync_write ino %llx %lld~%llu adjusted %lld~%llu -- %srmw\n",
--                   ci->i_vino.ino, pos, len, write_pos, write_len,
--                   rmw ? "" : "no ");
-+              doutc(cl, "ino %llx %lld~%llu adjusted %lld~%llu -- %srmw\n",
-+                    ci->i_vino.ino, pos, len, write_pos, write_len,
-+                    rmw ? "" : "no ");
-               /*
-                * The data is emplaced into the page as it would be if it were
-@@ -1887,7 +1915,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-                       left -= ret;
-               }
-               if (ret < 0) {
--                      dout("sync_write write failed with %d\n", ret);
-+                      doutc(cl, "write failed with %d\n", ret);
-                       ceph_release_page_vector(pages, num_pages);
-                       break;
-               }
-@@ -1897,7 +1925,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-                                                        write_pos, write_len,
-                                                        GFP_KERNEL);
-                       if (ret < 0) {
--                              dout("encryption failed with %d\n", ret);
-+                              doutc(cl, "encryption failed with %d\n", ret);
-                               ceph_release_page_vector(pages, num_pages);
-                               break;
-                       }
-@@ -1916,7 +1944,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-                       break;
-               }
--              dout("sync_write write op %lld~%llu\n", write_pos, write_len);
-+              doutc(cl, "write op %lld~%llu\n", write_pos, write_len);
-               osd_req_op_extent_osd_data_pages(req, rmw ? 1 : 0, pages, write_len,
-                                                offset_in_page(write_pos), false,
-                                                true);
-@@ -1947,7 +1975,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-                                         req->r_end_latency, len, ret);
-               ceph_osdc_put_request(req);
-               if (ret != 0) {
--                      dout("sync_write osd write returned %d\n", ret);
-+                      doutc(cl, "osd write returned %d\n", ret);
-                       /* Version changed! Must re-do the rmw cycle */
-                       if ((assert_ver && (ret == -ERANGE || ret == -EOVERFLOW)) ||
-                           (!assert_ver && ret == -EEXIST)) {
-@@ -1977,13 +2005,13 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-                               pos >> PAGE_SHIFT,
-                               (pos + len - 1) >> PAGE_SHIFT);
-               if (ret < 0) {
--                      dout("invalidate_inode_pages2_range returned %d\n",
--                           ret);
-+                      doutc(cl, "invalidate_inode_pages2_range returned %d\n",
-+                            ret);
-                       ret = 0;
-               }
-               pos += len;
-               written += len;
--              dout("sync_write written %d\n", written);
-+              doutc(cl, "written %d\n", written);
-               if (pos > i_size_read(inode)) {
-                       check_caps = ceph_inode_set_size(inode, pos);
-                       if (check_caps)
-@@ -1997,7 +2025,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
-               ret = written;
-               iocb->ki_pos = pos;
-       }
--      dout("sync_write returning %d\n", ret);
-+      doutc(cl, "returning %d\n", ret);
-       return ret;
- }
-@@ -2016,13 +2044,14 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to)
-       struct inode *inode = file_inode(filp);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       bool direct_lock = iocb->ki_flags & IOCB_DIRECT;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       ssize_t ret;
-       int want = 0, got = 0;
-       int retry_op = 0, read = 0;
- again:
--      dout("aio_read %p %llx.%llx %llu~%u trying to get caps on %p\n",
--           inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, inode);
-+      doutc(cl, "%llu~%u trying to get caps on %p %llx.%llx\n",
-+            iocb->ki_pos, (unsigned)len, inode, ceph_vinop(inode));
-       if (ceph_inode_is_shutdown(inode))
-               return -ESTALE;
-@@ -2050,9 +2079,9 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to)
-           (iocb->ki_flags & IOCB_DIRECT) ||
-           (fi->flags & CEPH_F_SYNC)) {
--              dout("aio_sync_read %p %llx.%llx %llu~%u got cap refs on %s\n",
--                   inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len,
--                   ceph_cap_string(got));
-+              doutc(cl, "sync %p %llx.%llx %llu~%u got cap refs on %s\n",
-+                    inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len,
-+                    ceph_cap_string(got));
-               if (!ceph_has_inline_data(ci)) {
-                       if (!retry_op &&
-@@ -2070,16 +2099,16 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to)
-               }
-       } else {
-               CEPH_DEFINE_RW_CONTEXT(rw_ctx, got);
--              dout("aio_read %p %llx.%llx %llu~%u got cap refs on %s\n",
--                   inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len,
--                   ceph_cap_string(got));
-+              doutc(cl, "async %p %llx.%llx %llu~%u got cap refs on %s\n",
-+                    inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len,
-+                    ceph_cap_string(got));
-               ceph_add_rw_context(fi, &rw_ctx);
-               ret = generic_file_read_iter(iocb, to);
-               ceph_del_rw_context(fi, &rw_ctx);
-       }
--      dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n",
--           inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret);
-+      doutc(cl, "%p %llx.%llx dropping cap refs on %s = %d\n",
-+            inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret);
-       ceph_put_cap_refs(ci, got);
-       if (direct_lock)
-@@ -2139,8 +2168,8 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to)
-               /* hit EOF or hole? */
-               if (retry_op == CHECK_EOF && iocb->ki_pos < i_size &&
-                   ret < len) {
--                      dout("sync_read hit hole, ppos %lld < size %lld"
--                           ", reading more\n", iocb->ki_pos, i_size);
-+                      doutc(cl, "hit hole, ppos %lld < size %lld, reading more\n",
-+                            iocb->ki_pos, i_size);
-                       read += ret;
-                       len -= ret;
-@@ -2235,6 +2264,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_client *osdc = &fsc->client->osdc;
-       struct ceph_cap_flush *prealloc_cf;
-       ssize_t count, written = 0;
-@@ -2302,8 +2332,9 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
-       if (err)
-               goto out;
--      dout("aio_write %p %llx.%llx %llu~%zd getting caps. i_size %llu\n",
--           inode, ceph_vinop(inode), pos, count, i_size_read(inode));
-+      doutc(cl, "%p %llx.%llx %llu~%zd getting caps. i_size %llu\n",
-+            inode, ceph_vinop(inode), pos, count,
-+            i_size_read(inode));
-       if (!(fi->flags & CEPH_F_SYNC) && !direct_lock)
-               want |= CEPH_CAP_FILE_BUFFER;
-       if (fi->fmode & CEPH_FILE_MODE_LAZY)
-@@ -2319,8 +2350,8 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
-       inode_inc_iversion_raw(inode);
--      dout("aio_write %p %llx.%llx %llu~%zd got cap refs on %s\n",
--           inode, ceph_vinop(inode), pos, count, ceph_cap_string(got));
-+      doutc(cl, "%p %llx.%llx %llu~%zd got cap refs on %s\n",
-+            inode, ceph_vinop(inode), pos, count, ceph_cap_string(got));
-       if ((got & (CEPH_CAP_FILE_BUFFER|CEPH_CAP_FILE_LAZYIO)) == 0 ||
-           (iocb->ki_flags & IOCB_DIRECT) || (fi->flags & CEPH_F_SYNC) ||
-@@ -2380,14 +2411,14 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
-                       ceph_check_caps(ci, CHECK_CAPS_FLUSH);
-       }
--      dout("aio_write %p %llx.%llx %llu~%u  dropping cap refs on %s\n",
--           inode, ceph_vinop(inode), pos, (unsigned)count,
--           ceph_cap_string(got));
-+      doutc(cl, "%p %llx.%llx %llu~%u  dropping cap refs on %s\n",
-+            inode, ceph_vinop(inode), pos, (unsigned)count,
-+            ceph_cap_string(got));
-       ceph_put_cap_refs(ci, got);
-       if (written == -EOLDSNAPC) {
--              dout("aio_write %p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n",
--                   inode, ceph_vinop(inode), pos, (unsigned)count);
-+              doutc(cl, "%p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n",
-+                    inode, ceph_vinop(inode), pos, (unsigned)count);
-               goto retry_snap;
-       }
-@@ -2559,14 +2590,15 @@ static long ceph_fallocate(struct file *file, int mode,
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_cap_flush *prealloc_cf;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int want, got = 0;
-       int dirty;
-       int ret = 0;
-       loff_t endoff = 0;
-       loff_t size;
--      dout("%s %p %llx.%llx mode %x, offset %llu length %llu\n", __func__,
--           inode, ceph_vinop(inode), mode, offset, length);
-+      doutc(cl, "%p %llx.%llx mode %x, offset %llu length %llu\n",
-+            inode, ceph_vinop(inode), mode, offset, length);
-       if (mode != (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
-               return -EOPNOTSUPP;
-@@ -2695,6 +2727,7 @@ static void put_rd_wr_caps(struct ceph_inode_info *src_ci, int src_got,
- static int is_file_size_ok(struct inode *src_inode, struct inode *dst_inode,
-                          loff_t src_off, loff_t dst_off, size_t len)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(src_inode);
-       loff_t size, endoff;
-       size = i_size_read(src_inode);
-@@ -2705,8 +2738,8 @@ static int is_file_size_ok(struct inode *src_inode, struct inode *dst_inode,
-        * inode.
-        */
-       if (src_off + len > size) {
--              dout("Copy beyond EOF (%llu + %zu > %llu)\n",
--                   src_off, len, size);
-+              doutc(cl, "Copy beyond EOF (%llu + %zu > %llu)\n", src_off,
-+                    len, size);
-               return -EOPNOTSUPP;
-       }
-       size = i_size_read(dst_inode);
-@@ -2782,6 +2815,7 @@ static ssize_t ceph_do_objects_copy(struct ceph_inode_info *src_ci, u64 *src_off
-       u64 src_objnum, src_objoff, dst_objnum, dst_objoff;
-       u32 src_objlen, dst_objlen;
-       u32 object_size = src_ci->i_layout.object_size;
-+      struct ceph_client *cl = fsc->client;
-       int ret;
-       src_oloc.pool = src_ci->i_layout.pool_id;
-@@ -2823,9 +2857,10 @@ static ssize_t ceph_do_objects_copy(struct ceph_inode_info *src_ci, u64 *src_off
-               if (ret) {
-                       if (ret == -EOPNOTSUPP) {
-                               fsc->have_copy_from2 = false;
--                              pr_notice("OSDs don't support copy-from2; disabling copy offload\n");
-+                              pr_notice_client(cl,
-+                                      "OSDs don't support copy-from2; disabling copy offload\n");
-                       }
--                      dout("ceph_osdc_copy_from returned %d\n", ret);
-+                      doutc(cl, "returned %d\n", ret);
-                       if (!bytes)
-                               bytes = ret;
-                       goto out;
-@@ -2852,6 +2887,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-       struct ceph_inode_info *dst_ci = ceph_inode(dst_inode);
-       struct ceph_cap_flush *prealloc_cf;
-       struct ceph_fs_client *src_fsc = ceph_inode_to_fs_client(src_inode);
-+      struct ceph_client *cl = src_fsc->client;
-       loff_t size;
-       ssize_t ret = -EIO, bytes;
-       u64 src_objnum, dst_objnum, src_objoff, dst_objoff;
-@@ -2894,7 +2930,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-           (src_ci->i_layout.stripe_count != 1) ||
-           (dst_ci->i_layout.stripe_count != 1) ||
-           (src_ci->i_layout.object_size != dst_ci->i_layout.object_size)) {
--              dout("Invalid src/dst files layout\n");
-+              doutc(cl, "Invalid src/dst files layout\n");
-               return -EOPNOTSUPP;
-       }
-@@ -2912,12 +2948,12 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-       /* Start by sync'ing the source and destination files */
-       ret = file_write_and_wait_range(src_file, src_off, (src_off + len));
-       if (ret < 0) {
--              dout("failed to write src file (%zd)\n", ret);
-+              doutc(cl, "failed to write src file (%zd)\n", ret);
-               goto out;
-       }
-       ret = file_write_and_wait_range(dst_file, dst_off, (dst_off + len));
-       if (ret < 0) {
--              dout("failed to write dst file (%zd)\n", ret);
-+              doutc(cl, "failed to write dst file (%zd)\n", ret);
-               goto out;
-       }
-@@ -2929,7 +2965,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-       err = get_rd_wr_caps(src_file, &src_got,
-                            dst_file, (dst_off + len), &dst_got);
-       if (err < 0) {
--              dout("get_rd_wr_caps returned %d\n", err);
-+              doutc(cl, "get_rd_wr_caps returned %d\n", err);
-               ret = -EOPNOTSUPP;
-               goto out;
-       }
-@@ -2944,7 +2980,8 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-                                           dst_off >> PAGE_SHIFT,
-                                           (dst_off + len) >> PAGE_SHIFT);
-       if (ret < 0) {
--              dout("Failed to invalidate inode pages (%zd)\n", ret);
-+              doutc(cl, "Failed to invalidate inode pages (%zd)\n",
-+                          ret);
-               ret = 0; /* XXX */
-       }
-       ceph_calc_file_object_mapping(&src_ci->i_layout, src_off,
-@@ -2965,7 +3002,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-        * starting at the src_off
-        */
-       if (src_objoff) {
--              dout("Initial partial copy of %u bytes\n", src_objlen);
-+              doutc(cl, "Initial partial copy of %u bytes\n", src_objlen);
-               /*
-                * we need to temporarily drop all caps as we'll be calling
-@@ -2976,7 +3013,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-                                      &dst_off, src_objlen, flags);
-               /* Abort on short copies or on error */
-               if (ret < (long)src_objlen) {
--                      dout("Failed partial copy (%zd)\n", ret);
-+                      doutc(cl, "Failed partial copy (%zd)\n", ret);
-                       goto out;
-               }
-               len -= ret;
-@@ -2998,7 +3035,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-                       ret = bytes;
-               goto out_caps;
-       }
--      dout("Copied %zu bytes out of %zu\n", bytes, len);
-+      doutc(cl, "Copied %zu bytes out of %zu\n", bytes, len);
-       len -= bytes;
-       ret += bytes;
-@@ -3026,13 +3063,13 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
-        * there were errors in remote object copies (len >= object_size).
-        */
-       if (len && (len < src_ci->i_layout.object_size)) {
--              dout("Final partial copy of %zu bytes\n", len);
-+              doutc(cl, "Final partial copy of %zu bytes\n", len);
-               bytes = do_splice_direct(src_file, &src_off, dst_file,
-                                        &dst_off, len, flags);
-               if (bytes > 0)
-                       ret += bytes;
-               else
--                      dout("Failed partial copy (%zd)\n", bytes);
-+                      doutc(cl, "Failed partial copy (%zd)\n", bytes);
-       }
- out:
-diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
-index db6977c15c28..808b5a69f028 100644
---- a/fs/ceph/inode.c
-+++ b/fs/ceph/inode.c
-@@ -129,6 +129,8 @@ void ceph_as_ctx_to_req(struct ceph_mds_request *req,
- struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino,
-                            struct inode *newino)
- {
-+      struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct inode *inode;
-       if (ceph_vino_is_reserved(vino))
-@@ -145,12 +147,13 @@ struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino,
-       }
-       if (!inode) {
--              dout("No inode found for %llx.%llx\n", vino.ino, vino.snap);
-+              doutc(cl, "no inode found for %llx.%llx\n", vino.ino, vino.snap);
-               return ERR_PTR(-ENOMEM);
-       }
--      dout("get_inode on %llu=%llx.%llx got %p new %d\n", ceph_present_inode(inode),
--           ceph_vinop(inode), inode, !!(inode->i_state & I_NEW));
-+      doutc(cl, "on %llx=%llx.%llx got %p new %d\n",
-+            ceph_present_inode(inode), ceph_vinop(inode), inode,
-+            !!(inode->i_state & I_NEW));
-       return inode;
- }
-@@ -159,6 +162,7 @@ struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino,
-  */
- struct inode *ceph_get_snapdir(struct inode *parent)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(parent);
-       struct ceph_vino vino = {
-               .ino = ceph_ino(parent),
-               .snap = CEPH_SNAPDIR,
-@@ -171,14 +175,14 @@ struct inode *ceph_get_snapdir(struct inode *parent)
-               return inode;
-       if (!S_ISDIR(parent->i_mode)) {
--              pr_warn_once("bad snapdir parent type (mode=0%o)\n",
--                           parent->i_mode);
-+              pr_warn_once_client(cl, "bad snapdir parent type (mode=0%o)\n",
-+                                  parent->i_mode);
-               goto err;
-       }
-       if (!(inode->i_state & I_NEW) && !S_ISDIR(inode->i_mode)) {
--              pr_warn_once("bad snapdir inode type (mode=0%o)\n",
--                           inode->i_mode);
-+              pr_warn_once_client(cl, "bad snapdir inode type (mode=0%o)\n",
-+                                  inode->i_mode);
-               goto err;
-       }
-@@ -203,7 +207,7 @@ struct inode *ceph_get_snapdir(struct inode *parent)
-                       inode->i_flags |= S_ENCRYPTED;
-                       ci->fscrypt_auth_len = pci->fscrypt_auth_len;
-               } else {
--                      dout("Failed to alloc snapdir fscrypt_auth\n");
-+                      doutc(cl, "Failed to alloc snapdir fscrypt_auth\n");
-                       ret = -ENOMEM;
-                       goto err;
-               }
-@@ -249,6 +253,8 @@ const struct inode_operations ceph_file_iops = {
- static struct ceph_inode_frag *__get_or_create_frag(struct ceph_inode_info *ci,
-                                                   u32 f)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct rb_node **p;
-       struct rb_node *parent = NULL;
-       struct ceph_inode_frag *frag;
-@@ -279,8 +285,7 @@ static struct ceph_inode_frag *__get_or_create_frag(struct ceph_inode_info *ci,
-       rb_link_node(&frag->node, parent, p);
-       rb_insert_color(&frag->node, &ci->i_fragtree);
--      dout("get_or_create_frag added %llx.%llx frag %x\n",
--           ceph_vinop(&ci->netfs.inode), f);
-+      doutc(cl, "added %p %llx.%llx frag %x\n", inode, ceph_vinop(inode), f);
-       return frag;
- }
-@@ -313,6 +318,7 @@ struct ceph_inode_frag *__ceph_find_frag(struct ceph_inode_info *ci, u32 f)
- static u32 __ceph_choose_frag(struct ceph_inode_info *ci, u32 v,
-                             struct ceph_inode_frag *pfrag, int *found)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode);
-       u32 t = ceph_frag_make(0, 0);
-       struct ceph_inode_frag *frag;
-       unsigned nway, i;
-@@ -336,8 +342,8 @@ static u32 __ceph_choose_frag(struct ceph_inode_info *ci, u32 v,
-               /* choose child */
-               nway = 1 << frag->split_by;
--              dout("choose_frag(%x) %x splits by %d (%d ways)\n", v, t,
--                   frag->split_by, nway);
-+              doutc(cl, "frag(%x) %x splits by %d (%d ways)\n", v, t,
-+                    frag->split_by, nway);
-               for (i = 0; i < nway; i++) {
-                       n = ceph_frag_make_child(t, frag->split_by, i);
-                       if (ceph_frag_contains_value(n, v)) {
-@@ -347,7 +353,7 @@ static u32 __ceph_choose_frag(struct ceph_inode_info *ci, u32 v,
-               }
-               BUG_ON(i == nway);
-       }
--      dout("choose_frag(%x) = %x\n", v, t);
-+      doutc(cl, "frag(%x) = %x\n", v, t);
-       return t;
- }
-@@ -371,6 +377,7 @@ static int ceph_fill_dirfrag(struct inode *inode,
-                            struct ceph_mds_reply_dirfrag *dirinfo)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_frag *frag;
-       u32 id = le32_to_cpu(dirinfo->frag);
-       int mds = le32_to_cpu(dirinfo->auth);
-@@ -395,14 +402,14 @@ static int ceph_fill_dirfrag(struct inode *inode,
-                       goto out;
-               if (frag->split_by == 0) {
-                       /* tree leaf, remove */
--                      dout("fill_dirfrag removed %llx.%llx frag %x"
--                           " (no ref)\n", ceph_vinop(inode), id);
-+                      doutc(cl, "removed %p %llx.%llx frag %x (no ref)\n",
-+                            inode, ceph_vinop(inode), id);
-                       rb_erase(&frag->node, &ci->i_fragtree);
-                       kfree(frag);
-               } else {
-                       /* tree branch, keep and clear */
--                      dout("fill_dirfrag cleared %llx.%llx frag %x"
--                           " referral\n", ceph_vinop(inode), id);
-+                      doutc(cl, "cleared %p %llx.%llx frag %x referral\n",
-+                            inode, ceph_vinop(inode), id);
-                       frag->mds = -1;
-                       frag->ndist = 0;
-               }
-@@ -415,8 +422,9 @@ static int ceph_fill_dirfrag(struct inode *inode,
-       if (IS_ERR(frag)) {
-               /* this is not the end of the world; we can continue
-                  with bad/inaccurate delegation info */
--              pr_err("fill_dirfrag ENOMEM on mds ref %llx.%llx fg %x\n",
--                     ceph_vinop(inode), le32_to_cpu(dirinfo->frag));
-+              pr_err_client(cl, "ENOMEM on mds ref %p %llx.%llx fg %x\n",
-+                            inode, ceph_vinop(inode),
-+                            le32_to_cpu(dirinfo->frag));
-               err = -ENOMEM;
-               goto out;
-       }
-@@ -425,8 +433,8 @@ static int ceph_fill_dirfrag(struct inode *inode,
-       frag->ndist = min_t(u32, ndist, CEPH_MAX_DIRFRAG_REP);
-       for (i = 0; i < frag->ndist; i++)
-               frag->dist[i] = le32_to_cpu(dirinfo->dist[i]);
--      dout("fill_dirfrag %llx.%llx frag %x ndist=%d\n",
--           ceph_vinop(inode), frag->frag, frag->ndist);
-+      doutc(cl, "%p %llx.%llx frag %x ndist=%d\n", inode,
-+            ceph_vinop(inode), frag->frag, frag->ndist);
- out:
-       mutex_unlock(&ci->i_fragtree_mutex);
-@@ -454,6 +462,7 @@ static int ceph_fill_fragtree(struct inode *inode,
-                             struct ceph_frag_tree_head *fragtree,
-                             struct ceph_mds_reply_dirfrag *dirinfo)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_inode_frag *frag, *prev_frag = NULL;
-       struct rb_node *rb_node;
-@@ -489,15 +498,15 @@ static int ceph_fill_fragtree(struct inode *inode,
-                    frag_tree_split_cmp, NULL);
-       }
--      dout("fill_fragtree %llx.%llx\n", ceph_vinop(inode));
-+      doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-       rb_node = rb_first(&ci->i_fragtree);
-       for (i = 0; i < nsplits; i++) {
-               id = le32_to_cpu(fragtree->splits[i].frag);
-               split_by = le32_to_cpu(fragtree->splits[i].by);
-               if (split_by == 0 || ceph_frag_bits(id) + split_by > 24) {
--                      pr_err("fill_fragtree %llx.%llx invalid split %d/%u, "
--                             "frag %x split by %d\n", ceph_vinop(inode),
--                             i, nsplits, id, split_by);
-+                      pr_err_client(cl, "%p %llx.%llx invalid split %d/%u, "
-+                             "frag %x split by %d\n", inode,
-+                             ceph_vinop(inode), i, nsplits, id, split_by);
-                       continue;
-               }
-               frag = NULL;
-@@ -529,7 +538,7 @@ static int ceph_fill_fragtree(struct inode *inode,
-               if (frag->split_by == 0)
-                       ci->i_fragtree_nsplits++;
-               frag->split_by = split_by;
--              dout(" frag %x split by %d\n", frag->frag, frag->split_by);
-+              doutc(cl, " frag %x split by %d\n", frag->frag, frag->split_by);
-               prev_frag = frag;
-       }
-       while (rb_node) {
-@@ -554,6 +563,7 @@ static int ceph_fill_fragtree(struct inode *inode,
-  */
- struct inode *ceph_alloc_inode(struct super_block *sb)
- {
-+      struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
-       struct ceph_inode_info *ci;
-       int i;
-@@ -561,7 +571,7 @@ struct inode *ceph_alloc_inode(struct super_block *sb)
-       if (!ci)
-               return NULL;
--      dout("alloc_inode %p\n", &ci->netfs.inode);
-+      doutc(fsc->client, "%p\n", &ci->netfs.inode);
-       /* Set parameters for the netfs library */
-       netfs_inode_init(&ci->netfs, &ceph_netfs_ops);
-@@ -675,10 +685,11 @@ void ceph_evict_inode(struct inode *inode)
- {
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_frag *frag;
-       struct rb_node *n;
--      dout("evict_inode %p ino %llx.%llx\n", inode, ceph_vinop(inode));
-+      doutc(cl, "%p ino %llx.%llx\n", inode, ceph_vinop(inode));
-       percpu_counter_dec(&mdsc->metric.total_inodes);
-@@ -701,8 +712,8 @@ void ceph_evict_inode(struct inode *inode)
-        */
-       if (ci->i_snap_realm) {
-               if (ceph_snap(inode) == CEPH_NOSNAP) {
--                      dout(" dropping residual ref to snap realm %p\n",
--                           ci->i_snap_realm);
-+                      doutc(cl, " dropping residual ref to snap realm %p\n",
-+                            ci->i_snap_realm);
-                       ceph_change_snap_realm(inode, NULL);
-               } else {
-                       ceph_put_snapid_map(mdsc, ci->i_snapid_map);
-@@ -743,15 +754,16 @@ static inline blkcnt_t calc_inode_blocks(u64 size)
- int ceph_fill_file_size(struct inode *inode, int issued,
-                       u32 truncate_seq, u64 truncate_size, u64 size)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       int queue_trunc = 0;
-       loff_t isize = i_size_read(inode);
-       if (ceph_seq_cmp(truncate_seq, ci->i_truncate_seq) > 0 ||
-           (truncate_seq == ci->i_truncate_seq && size > isize)) {
--              dout("size %lld -> %llu\n", isize, size);
-+              doutc(cl, "size %lld -> %llu\n", isize, size);
-               if (size > 0 && S_ISDIR(inode->i_mode)) {
--                      pr_err("fill_file_size non-zero size for directory\n");
-+                      pr_err_client(cl, "non-zero size for directory\n");
-                       size = 0;
-               }
-               i_size_write(inode, size);
-@@ -764,8 +776,8 @@ int ceph_fill_file_size(struct inode *inode, int issued,
-                       ceph_fscache_update(inode);
-               ci->i_reported_size = size;
-               if (truncate_seq != ci->i_truncate_seq) {
--                      dout("%s truncate_seq %u -> %u\n", __func__,
--                           ci->i_truncate_seq, truncate_seq);
-+                      doutc(cl, "truncate_seq %u -> %u\n",
-+                            ci->i_truncate_seq, truncate_seq);
-                       ci->i_truncate_seq = truncate_seq;
-                       /* the MDS should have revoked these caps */
-@@ -794,14 +806,15 @@ int ceph_fill_file_size(struct inode *inode, int issued,
-        * anyway.
-        */
-       if (ceph_seq_cmp(truncate_seq, ci->i_truncate_seq) >= 0) {
--              dout("%s truncate_size %lld -> %llu, encrypted %d\n", __func__,
--                   ci->i_truncate_size, truncate_size, !!IS_ENCRYPTED(inode));
-+              doutc(cl, "truncate_size %lld -> %llu, encrypted %d\n",
-+                    ci->i_truncate_size, truncate_size,
-+                    !!IS_ENCRYPTED(inode));
-               ci->i_truncate_size = truncate_size;
-               if (IS_ENCRYPTED(inode)) {
--                      dout("%s truncate_pagecache_size %lld -> %llu\n",
--                           __func__, ci->i_truncate_pagecache_size, size);
-+                      doutc(cl, "truncate_pagecache_size %lld -> %llu\n",
-+                            ci->i_truncate_pagecache_size, size);
-                       ci->i_truncate_pagecache_size = size;
-               } else {
-                       ci->i_truncate_pagecache_size = truncate_size;
-@@ -814,6 +827,7 @@ void ceph_fill_file_time(struct inode *inode, int issued,
-                        u64 time_warp_seq, struct timespec64 *ctime,
-                        struct timespec64 *mtime, struct timespec64 *atime)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct timespec64 ictime = inode_get_ctime(inode);
-       int warn = 0;
-@@ -825,7 +839,7 @@ void ceph_fill_file_time(struct inode *inode, int issued,
-                     CEPH_CAP_XATTR_EXCL)) {
-               if (ci->i_version == 0 ||
-                   timespec64_compare(ctime, &ictime) > 0) {
--                      dout("ctime %lld.%09ld -> %lld.%09ld inc w/ cap\n",
-+                      doutc(cl, "ctime %lld.%09ld -> %lld.%09ld inc w/ cap\n",
-                            ictime.tv_sec, ictime.tv_nsec,
-                            ctime->tv_sec, ctime->tv_nsec);
-                       inode_set_ctime_to_ts(inode, *ctime);
-@@ -833,11 +847,10 @@ void ceph_fill_file_time(struct inode *inode, int issued,
-               if (ci->i_version == 0 ||
-                   ceph_seq_cmp(time_warp_seq, ci->i_time_warp_seq) > 0) {
-                       /* the MDS did a utimes() */
--                      dout("mtime %lld.%09ld -> %lld.%09ld "
--                           "tw %d -> %d\n",
--                           inode->i_mtime.tv_sec, inode->i_mtime.tv_nsec,
--                           mtime->tv_sec, mtime->tv_nsec,
--                           ci->i_time_warp_seq, (int)time_warp_seq);
-+                      doutc(cl, "mtime %lld.%09ld -> %lld.%09ld tw %d -> %d\n",
-+                            inode->i_mtime.tv_sec, inode->i_mtime.tv_nsec,
-+                            mtime->tv_sec, mtime->tv_nsec,
-+                            ci->i_time_warp_seq, (int)time_warp_seq);
-                       inode->i_mtime = *mtime;
-                       inode->i_atime = *atime;
-@@ -845,17 +858,17 @@ void ceph_fill_file_time(struct inode *inode, int issued,
-               } else if (time_warp_seq == ci->i_time_warp_seq) {
-                       /* nobody did utimes(); take the max */
-                       if (timespec64_compare(mtime, &inode->i_mtime) > 0) {
--                              dout("mtime %lld.%09ld -> %lld.%09ld inc\n",
--                                   inode->i_mtime.tv_sec,
--                                   inode->i_mtime.tv_nsec,
--                                   mtime->tv_sec, mtime->tv_nsec);
-+                              doutc(cl, "mtime %lld.%09ld -> %lld.%09ld inc\n",
-+                                    inode->i_mtime.tv_sec,
-+                                    inode->i_mtime.tv_nsec,
-+                                    mtime->tv_sec, mtime->tv_nsec);
-                               inode->i_mtime = *mtime;
-                       }
-                       if (timespec64_compare(atime, &inode->i_atime) > 0) {
--                              dout("atime %lld.%09ld -> %lld.%09ld inc\n",
--                                   inode->i_atime.tv_sec,
--                                   inode->i_atime.tv_nsec,
--                                   atime->tv_sec, atime->tv_nsec);
-+                              doutc(cl, "atime %lld.%09ld -> %lld.%09ld inc\n",
-+                                    inode->i_atime.tv_sec,
-+                                    inode->i_atime.tv_nsec,
-+                                    atime->tv_sec, atime->tv_nsec);
-                               inode->i_atime = *atime;
-                       }
-               } else if (issued & CEPH_CAP_FILE_EXCL) {
-@@ -875,13 +888,16 @@ void ceph_fill_file_time(struct inode *inode, int issued,
-               }
-       }
-       if (warn) /* time_warp_seq shouldn't go backwards */
--              dout("%p mds time_warp_seq %llu < %u\n",
--                   inode, time_warp_seq, ci->i_time_warp_seq);
-+              doutc(cl, "%p mds time_warp_seq %llu < %u\n", inode,
-+                    time_warp_seq, ci->i_time_warp_seq);
- }
- #if IS_ENABLED(CONFIG_FS_ENCRYPTION)
--static int decode_encrypted_symlink(const char *encsym, int enclen, u8 **decsym)
-+static int decode_encrypted_symlink(struct ceph_mds_client *mdsc,
-+                                  const char *encsym,
-+                                  int enclen, u8 **decsym)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       int declen;
-       u8 *sym;
-@@ -891,8 +907,9 @@ static int decode_encrypted_symlink(const char *encsym, int enclen, u8 **decsym)
-       declen = ceph_base64_decode(encsym, enclen, sym);
-       if (declen < 0) {
--              pr_err("%s: can't decode symlink (%d). Content: %.*s\n",
--                     __func__, declen, enclen, encsym);
-+              pr_err_client(cl,
-+                      "can't decode symlink (%d). Content: %.*s\n",
-+                      declen, enclen, encsym);
-               kfree(sym);
-               return -EIO;
-       }
-@@ -901,7 +918,9 @@ static int decode_encrypted_symlink(const char *encsym, int enclen, u8 **decsym)
-       return declen;
- }
- #else
--static int decode_encrypted_symlink(const char *encsym, int symlen, u8 **decsym)
-+static int decode_encrypted_symlink(struct ceph_mds_client *mdsc,
-+                                  const char *encsym,
-+                                  int symlen, u8 **decsym)
- {
-       return -EOPNOTSUPP;
- }
-@@ -918,6 +937,7 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-                   struct ceph_cap_reservation *caps_reservation)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_reply_inode *info = iinfo->in;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       int issued, new_issued, info_caps;
-@@ -936,25 +956,26 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-       lockdep_assert_held(&mdsc->snap_rwsem);
--      dout("%s %p ino %llx.%llx v %llu had %llu\n", __func__,
--           inode, ceph_vinop(inode), le64_to_cpu(info->version),
--           ci->i_version);
-+      doutc(cl, "%p ino %llx.%llx v %llu had %llu\n", inode, ceph_vinop(inode),
-+            le64_to_cpu(info->version), ci->i_version);
-       /* Once I_NEW is cleared, we can't change type or dev numbers */
-       if (inode->i_state & I_NEW) {
-               inode->i_mode = mode;
-       } else {
-               if (inode_wrong_type(inode, mode)) {
--                      pr_warn_once("inode type changed! (ino %llx.%llx is 0%o, mds says 0%o)\n",
--                                   ceph_vinop(inode), inode->i_mode, mode);
-+                      pr_warn_once_client(cl,
-+                              "inode type changed! (ino %llx.%llx is 0%o, mds says 0%o)\n",
-+                              ceph_vinop(inode), inode->i_mode, mode);
-                       return -ESTALE;
-               }
-               if ((S_ISCHR(mode) || S_ISBLK(mode)) && inode->i_rdev != rdev) {
--                      pr_warn_once("dev inode rdev changed! (ino %llx.%llx is %u:%u, mds says %u:%u)\n",
--                                   ceph_vinop(inode), MAJOR(inode->i_rdev),
--                                   MINOR(inode->i_rdev), MAJOR(rdev),
--                                   MINOR(rdev));
-+                      pr_warn_once_client(cl,
-+                              "dev inode rdev changed! (ino %llx.%llx is %u:%u, mds says %u:%u)\n",
-+                              ceph_vinop(inode), MAJOR(inode->i_rdev),
-+                              MINOR(inode->i_rdev), MAJOR(rdev),
-+                              MINOR(rdev));
-                       return -ESTALE;
-               }
-       }
-@@ -976,8 +997,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-       if (iinfo->xattr_len > 4) {
-               xattr_blob = ceph_buffer_new(iinfo->xattr_len, GFP_NOFS);
-               if (!xattr_blob)
--                      pr_err("%s ENOMEM xattr blob %d bytes\n", __func__,
--                             iinfo->xattr_len);
-+                      pr_err_client(cl, "ENOMEM xattr blob %d bytes\n",
-+                                    iinfo->xattr_len);
-       }
-       if (iinfo->pool_ns_len > 0)
-@@ -1031,9 +1052,10 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-               inode->i_mode = mode;
-               inode->i_uid = make_kuid(&init_user_ns, le32_to_cpu(info->uid));
-               inode->i_gid = make_kgid(&init_user_ns, le32_to_cpu(info->gid));
--              dout("%p mode 0%o uid.gid %d.%d\n", inode, inode->i_mode,
--                   from_kuid(&init_user_ns, inode->i_uid),
--                   from_kgid(&init_user_ns, inode->i_gid));
-+              doutc(cl, "%p %llx.%llx mode 0%o uid.gid %d.%d\n", inode,
-+                    ceph_vinop(inode), inode->i_mode,
-+                    from_kuid(&init_user_ns, inode->i_uid),
-+                    from_kgid(&init_user_ns, inode->i_gid));
-               ceph_decode_timespec64(&ci->i_btime, &iinfo->btime);
-               ceph_decode_timespec64(&ci->i_snap_btime, &iinfo->snap_btime);
-       }
-@@ -1089,7 +1111,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-                       if (size == round_up(fsize, CEPH_FSCRYPT_BLOCK_SIZE)) {
-                               size = fsize;
-                       } else {
--                              pr_warn("fscrypt size mismatch: size=%llu fscrypt_file=%llu, discarding fscrypt_file size.\n",
-+                              pr_warn_client(cl,
-+                                      "fscrypt size mismatch: size=%llu fscrypt_file=%llu, discarding fscrypt_file size.\n",
-                                       info->size, size);
-                       }
-               }
-@@ -1101,8 +1124,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-               /* only update max_size on auth cap */
-               if ((info->cap.flags & CEPH_CAP_FLAG_AUTH) &&
-                   ci->i_max_size != le64_to_cpu(info->max_size)) {
--                      dout("max_size %lld -> %llu\n", ci->i_max_size,
--                                      le64_to_cpu(info->max_size));
-+                      doutc(cl, "max_size %lld -> %llu\n",
-+                          ci->i_max_size, le64_to_cpu(info->max_size));
-                       ci->i_max_size = le64_to_cpu(info->max_size);
-               }
-       }
-@@ -1165,15 +1188,17 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-                       if (IS_ENCRYPTED(inode)) {
-                               if (symlen != i_size_read(inode))
--                                      pr_err("%s %llx.%llx BAD symlink size %lld\n",
--                                              __func__, ceph_vinop(inode),
-+                                      pr_err_client(cl,
-+                                              "%p %llx.%llx BAD symlink size %lld\n",
-+                                              inode, ceph_vinop(inode),
-                                               i_size_read(inode));
--                              err = decode_encrypted_symlink(iinfo->symlink,
-+                              err = decode_encrypted_symlink(mdsc, iinfo->symlink,
-                                                              symlen, (u8 **)&sym);
-                               if (err < 0) {
--                                      pr_err("%s decoding encrypted symlink failed: %d\n",
--                                              __func__, err);
-+                                      pr_err_client(cl,
-+                                              "decoding encrypted symlink failed: %d\n",
-+                                              err);
-                                       goto out;
-                               }
-                               symlen = err;
-@@ -1181,8 +1206,9 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-                               inode->i_blocks = calc_inode_blocks(symlen);
-                       } else {
-                               if (symlen != i_size_read(inode)) {
--                                      pr_err("%s %llx.%llx BAD symlink size %lld\n",
--                                              __func__, ceph_vinop(inode),
-+                                      pr_err_client(cl,
-+                                              "%p %llx.%llx BAD symlink size %lld\n",
-+                                              inode, ceph_vinop(inode),
-                                               i_size_read(inode));
-                                       i_size_write(inode, symlen);
-                                       inode->i_blocks = calc_inode_blocks(symlen);
-@@ -1217,8 +1243,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-               inode->i_fop = &ceph_dir_fops;
-               break;
-       default:
--              pr_err("%s %llx.%llx BAD mode 0%o\n", __func__,
--                     ceph_vinop(inode), inode->i_mode);
-+              pr_err_client(cl, "%p %llx.%llx BAD mode 0%o\n", inode,
-+                            ceph_vinop(inode), inode->i_mode);
-       }
-       /* were we issued a capability? */
-@@ -1239,7 +1265,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-                           (info_caps & CEPH_CAP_FILE_SHARED) &&
-                           (issued & CEPH_CAP_FILE_EXCL) == 0 &&
-                           !__ceph_dir_is_complete(ci)) {
--                              dout(" marking %p complete (empty)\n", inode);
-+                              doutc(cl, " marking %p complete (empty)\n",
-+                                    inode);
-                               i_size_write(inode, 0);
-                               __ceph_dir_set_complete(ci,
-                                       atomic64_read(&ci->i_release_count),
-@@ -1248,8 +1275,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-                       wake = true;
-               } else {
--                      dout(" %p got snap_caps %s\n", inode,
--                           ceph_cap_string(info_caps));
-+                      doutc(cl, " %p got snap_caps %s\n", inode,
-+                            ceph_cap_string(info_caps));
-                       ci->i_snap_caps |= info_caps;
-               }
-       }
-@@ -1265,8 +1292,8 @@ int ceph_fill_inode(struct inode *inode, struct page *locked_page,
-       if (cap_fmode >= 0) {
-               if (!info_caps)
--                      pr_warn("mds issued no caps on %llx.%llx\n",
--                              ceph_vinop(inode));
-+                      pr_warn_client(cl, "mds issued no caps on %llx.%llx\n",
-+                                     ceph_vinop(inode));
-               __ceph_touch_fmode(ci, mdsc, cap_fmode);
-       }
-@@ -1312,14 +1339,14 @@ static void __update_dentry_lease(struct inode *dir, struct dentry *dentry,
-                                 unsigned long from_time,
-                                 struct ceph_mds_session **old_lease_session)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(dir);
-       struct ceph_dentry_info *di = ceph_dentry(dentry);
-       unsigned mask = le16_to_cpu(lease->mask);
-       long unsigned duration = le32_to_cpu(lease->duration_ms);
-       long unsigned ttl = from_time + (duration * HZ) / 1000;
-       long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000;
--      dout("update_dentry_lease %p duration %lu ms ttl %lu\n",
--           dentry, duration, ttl);
-+      doutc(cl, "%p duration %lu ms ttl %lu\n", dentry, duration, ttl);
-       /* only track leases on regular dentries */
-       if (ceph_snap(dir) != CEPH_NOSNAP)
-@@ -1420,6 +1447,7 @@ static void update_dentry_lease_careful(struct dentry *dentry,
-  */
- static int splice_dentry(struct dentry **pdn, struct inode *in)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(in);
-       struct dentry *dn = *pdn;
-       struct dentry *realdn;
-@@ -1451,23 +1479,21 @@ static int splice_dentry(struct dentry **pdn, struct inode *in)
-               d_drop(dn);
-       realdn = d_splice_alias(in, dn);
-       if (IS_ERR(realdn)) {
--              pr_err("splice_dentry error %ld %p inode %p ino %llx.%llx\n",
--                     PTR_ERR(realdn), dn, in, ceph_vinop(in));
-+              pr_err_client(cl, "error %ld %p inode %p ino %llx.%llx\n",
-+                            PTR_ERR(realdn), dn, in, ceph_vinop(in));
-               return PTR_ERR(realdn);
-       }
-       if (realdn) {
--              dout("dn %p (%d) spliced with %p (%d) "
--                   "inode %p ino %llx.%llx\n",
--                   dn, d_count(dn),
--                   realdn, d_count(realdn),
--                   d_inode(realdn), ceph_vinop(d_inode(realdn)));
-+              doutc(cl, "dn %p (%d) spliced with %p (%d) inode %p ino %llx.%llx\n",
-+                    dn, d_count(dn), realdn, d_count(realdn),
-+                    d_inode(realdn), ceph_vinop(d_inode(realdn)));
-               dput(dn);
-               *pdn = realdn;
-       } else {
-               BUG_ON(!ceph_dentry(dn));
--              dout("dn %p attached to %p ino %llx.%llx\n",
--                   dn, d_inode(dn), ceph_vinop(d_inode(dn)));
-+              doutc(cl, "dn %p attached to %p ino %llx.%llx\n", dn,
-+                    d_inode(dn), ceph_vinop(d_inode(dn)));
-       }
-       return 0;
- }
-@@ -1490,13 +1516,14 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-       struct inode *in = NULL;
-       struct ceph_vino tvino, dvino;
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
-+      struct ceph_client *cl = fsc->client;
-       int err = 0;
--      dout("fill_trace %p is_dentry %d is_target %d\n", req,
--           rinfo->head->is_dentry, rinfo->head->is_target);
-+      doutc(cl, "%p is_dentry %d is_target %d\n", req,
-+            rinfo->head->is_dentry, rinfo->head->is_target);
-       if (!rinfo->head->is_target && !rinfo->head->is_dentry) {
--              dout("fill_trace reply is empty!\n");
-+              doutc(cl, "reply is empty!\n");
-               if (rinfo->head->result == 0 && req->r_parent)
-                       ceph_invalidate_dir_request(req);
-               return 0;
-@@ -1553,13 +1580,13 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-                       tvino.snap = le64_to_cpu(rinfo->targeti.in->snapid);
- retry_lookup:
-                       dn = d_lookup(parent, &dname);
--                      dout("d_lookup on parent=%p name=%.*s got %p\n",
--                           parent, dname.len, dname.name, dn);
-+                      doutc(cl, "d_lookup on parent=%p name=%.*s got %p\n",
-+                            parent, dname.len, dname.name, dn);
-                       if (!dn) {
-                               dn = d_alloc(parent, &dname);
--                              dout("d_alloc %p '%.*s' = %p\n", parent,
--                                   dname.len, dname.name, dn);
-+                              doutc(cl, "d_alloc %p '%.*s' = %p\n", parent,
-+                                    dname.len, dname.name, dn);
-                               if (!dn) {
-                                       dput(parent);
-                                       ceph_fname_free_buffer(dir, &oname);
-@@ -1575,8 +1602,8 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-                       } else if (d_really_is_positive(dn) &&
-                                  (ceph_ino(d_inode(dn)) != tvino.ino ||
-                                   ceph_snap(d_inode(dn)) != tvino.snap)) {
--                              dout(" dn %p points to wrong inode %p\n",
--                                   dn, d_inode(dn));
-+                              doutc(cl, " dn %p points to wrong inode %p\n",
-+                                    dn, d_inode(dn));
-                               ceph_dir_clear_ordered(dir);
-                               d_delete(dn);
-                               dput(dn);
-@@ -1601,8 +1628,8 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-                                rinfo->head->result == 0) ?  req->r_fmode : -1,
-                               &req->r_caps_reservation);
-               if (err < 0) {
--                      pr_err("ceph_fill_inode badness %p %llx.%llx\n",
--                              in, ceph_vinop(in));
-+                      pr_err_client(cl, "badness %p %llx.%llx\n", in,
-+                                    ceph_vinop(in));
-                       req->r_target_inode = NULL;
-                       if (in->i_state & I_NEW)
-                               discard_new_inode(in);
-@@ -1652,36 +1679,32 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-               have_lease = have_dir_cap ||
-                       le32_to_cpu(rinfo->dlease->duration_ms);
-               if (!have_lease)
--                      dout("fill_trace  no dentry lease or dir cap\n");
-+                      doutc(cl, "no dentry lease or dir cap\n");
-               /* rename? */
-               if (req->r_old_dentry && req->r_op == CEPH_MDS_OP_RENAME) {
-                       struct inode *olddir = req->r_old_dentry_dir;
-                       BUG_ON(!olddir);
--                      dout(" src %p '%pd' dst %p '%pd'\n",
--                           req->r_old_dentry,
--                           req->r_old_dentry,
--                           dn, dn);
--                      dout("fill_trace doing d_move %p -> %p\n",
--                           req->r_old_dentry, dn);
-+                      doutc(cl, " src %p '%pd' dst %p '%pd'\n",
-+                            req->r_old_dentry, req->r_old_dentry, dn, dn);
-+                      doutc(cl, "doing d_move %p -> %p\n", req->r_old_dentry, dn);
-                       /* d_move screws up sibling dentries' offsets */
-                       ceph_dir_clear_ordered(dir);
-                       ceph_dir_clear_ordered(olddir);
-                       d_move(req->r_old_dentry, dn);
--                      dout(" src %p '%pd' dst %p '%pd'\n",
--                           req->r_old_dentry,
--                           req->r_old_dentry,
--                           dn, dn);
-+                      doutc(cl, " src %p '%pd' dst %p '%pd'\n",
-+                            req->r_old_dentry, req->r_old_dentry, dn, dn);
-                       /* ensure target dentry is invalidated, despite
-                          rehashing bug in vfs_rename_dir */
-                       ceph_invalidate_dentry_lease(dn);
--                      dout("dn %p gets new offset %lld\n", req->r_old_dentry,
--                           ceph_dentry(req->r_old_dentry)->offset);
-+                      doutc(cl, "dn %p gets new offset %lld\n",
-+                            req->r_old_dentry,
-+                            ceph_dentry(req->r_old_dentry)->offset);
-                       /* swap r_dentry and r_old_dentry in case that
-                        * splice_dentry() gets called later. This is safe
-@@ -1693,9 +1716,9 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-               /* null dentry? */
-               if (!rinfo->head->is_target) {
--                      dout("fill_trace null dentry\n");
-+                      doutc(cl, "null dentry\n");
-                       if (d_really_is_positive(dn)) {
--                              dout("d_delete %p\n", dn);
-+                              doutc(cl, "d_delete %p\n", dn);
-                               ceph_dir_clear_ordered(dir);
-                               d_delete(dn);
-                       } else if (have_lease) {
-@@ -1719,9 +1742,9 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-                               goto done;
-                       dn = req->r_dentry;  /* may have spliced */
-               } else if (d_really_is_positive(dn) && d_inode(dn) != in) {
--                      dout(" %p links to %p %llx.%llx, not %llx.%llx\n",
--                           dn, d_inode(dn), ceph_vinop(d_inode(dn)),
--                           ceph_vinop(in));
-+                      doutc(cl, " %p links to %p %llx.%llx, not %llx.%llx\n",
-+                            dn, d_inode(dn), ceph_vinop(d_inode(dn)),
-+                            ceph_vinop(in));
-                       d_invalidate(dn);
-                       have_lease = false;
-               }
-@@ -1731,7 +1754,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-                                           rinfo->dlease, session,
-                                           req->r_request_started);
-               }
--              dout(" final dn %p\n", dn);
-+              doutc(cl, " final dn %p\n", dn);
-       } else if ((req->r_op == CEPH_MDS_OP_LOOKUPSNAP ||
-                   req->r_op == CEPH_MDS_OP_MKSNAP) &&
-                  test_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags) &&
-@@ -1742,7 +1765,8 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-               BUG_ON(!dir);
-               BUG_ON(ceph_snap(dir) != CEPH_SNAPDIR);
-               BUG_ON(!req->r_dentry);
--              dout(" linking snapped dir %p to dn %p\n", in, req->r_dentry);
-+              doutc(cl, " linking snapped dir %p to dn %p\n", in,
-+                    req->r_dentry);
-               ceph_dir_clear_ordered(dir);
-               ihold(in);
-               err = splice_dentry(&req->r_dentry, in);
-@@ -1764,7 +1788,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
-                                           &dvino, ptvino);
-       }
- done:
--      dout("fill_trace done err=%d\n", err);
-+      doutc(cl, "done err=%d\n", err);
-       return err;
- }
-@@ -1775,6 +1799,7 @@ static int readdir_prepopulate_inodes_only(struct ceph_mds_request *req,
-                                          struct ceph_mds_session *session)
- {
-       struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
-+      struct ceph_client *cl = session->s_mdsc->fsc->client;
-       int i, err = 0;
-       for (i = 0; i < rinfo->dir_nr; i++) {
-@@ -1789,14 +1814,14 @@ static int readdir_prepopulate_inodes_only(struct ceph_mds_request *req,
-               in = ceph_get_inode(req->r_dentry->d_sb, vino, NULL);
-               if (IS_ERR(in)) {
-                       err = PTR_ERR(in);
--                      dout("new_inode badness got %d\n", err);
-+                      doutc(cl, "badness got %d\n", err);
-                       continue;
-               }
-               rc = ceph_fill_inode(in, NULL, &rde->inode, NULL, session,
-                                    -1, &req->r_caps_reservation);
-               if (rc < 0) {
--                      pr_err("ceph_fill_inode badness on %p got %d\n",
--                             in, rc);
-+                      pr_err_client(cl, "inode badness on %p got %d\n", in,
-+                                    rc);
-                       err = rc;
-                       if (in->i_state & I_NEW) {
-                               ihold(in);
-@@ -1825,6 +1850,7 @@ static int fill_readdir_cache(struct inode *dir, struct dentry *dn,
-                             struct ceph_readdir_cache_control *ctl,
-                             struct ceph_mds_request *req)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(dir);
-       struct ceph_inode_info *ci = ceph_inode(dir);
-       unsigned nsize = PAGE_SIZE / sizeof(struct dentry*);
-       unsigned idx = ctl->index % nsize;
-@@ -1850,11 +1876,11 @@ static int fill_readdir_cache(struct inode *dir, struct dentry *dn,
-       if (req->r_dir_release_cnt == atomic64_read(&ci->i_release_count) &&
-           req->r_dir_ordered_cnt == atomic64_read(&ci->i_ordered_count)) {
--              dout("readdir cache dn %p idx %d\n", dn, ctl->index);
-+              doutc(cl, "dn %p idx %d\n", dn, ctl->index);
-               ctl->dentries[idx] = dn;
-               ctl->index++;
-       } else {
--              dout("disable readdir cache\n");
-+              doutc(cl, "disable readdir cache\n");
-               ctl->index = -1;
-       }
-       return 0;
-@@ -1867,6 +1893,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-       struct inode *inode = d_inode(parent);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
-+      struct ceph_client *cl = session->s_mdsc->fsc->client;
-       struct qstr dname;
-       struct dentry *dn;
-       struct inode *in;
-@@ -1894,19 +1921,18 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-       if (rinfo->dir_dir &&
-           le32_to_cpu(rinfo->dir_dir->frag) != frag) {
--              dout("readdir_prepopulate got new frag %x -> %x\n",
--                   frag, le32_to_cpu(rinfo->dir_dir->frag));
-+              doutc(cl, "got new frag %x -> %x\n", frag,
-+                          le32_to_cpu(rinfo->dir_dir->frag));
-               frag = le32_to_cpu(rinfo->dir_dir->frag);
-               if (!rinfo->hash_order)
-                       req->r_readdir_offset = 2;
-       }
-       if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) {
--              dout("readdir_prepopulate %d items under SNAPDIR dn %p\n",
--                   rinfo->dir_nr, parent);
-+              doutc(cl, "%d items under SNAPDIR dn %p\n",
-+                    rinfo->dir_nr, parent);
-       } else {
--              dout("readdir_prepopulate %d items under dn %p\n",
--                   rinfo->dir_nr, parent);
-+              doutc(cl, "%d items under dn %p\n", rinfo->dir_nr, parent);
-               if (rinfo->dir_dir)
-                       ceph_fill_dirfrag(d_inode(parent), rinfo->dir_dir);
-@@ -1950,15 +1976,15 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
- retry_lookup:
-               dn = d_lookup(parent, &dname);
--              dout("d_lookup on parent=%p name=%.*s got %p\n",
--                   parent, dname.len, dname.name, dn);
-+              doutc(cl, "d_lookup on parent=%p name=%.*s got %p\n",
-+                    parent, dname.len, dname.name, dn);
-               if (!dn) {
-                       dn = d_alloc(parent, &dname);
--                      dout("d_alloc %p '%.*s' = %p\n", parent,
--                           dname.len, dname.name, dn);
-+                      doutc(cl, "d_alloc %p '%.*s' = %p\n", parent,
-+                            dname.len, dname.name, dn);
-                       if (!dn) {
--                              dout("d_alloc badness\n");
-+                              doutc(cl, "d_alloc badness\n");
-                               err = -ENOMEM;
-                               goto out;
-                       }
-@@ -1971,8 +1997,8 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-                          (ceph_ino(d_inode(dn)) != tvino.ino ||
-                           ceph_snap(d_inode(dn)) != tvino.snap)) {
-                       struct ceph_dentry_info *di = ceph_dentry(dn);
--                      dout(" dn %p points to wrong inode %p\n",
--                           dn, d_inode(dn));
-+                      doutc(cl, " dn %p points to wrong inode %p\n",
-+                            dn, d_inode(dn));
-                       spin_lock(&dn->d_lock);
-                       if (di->offset > 0 &&
-@@ -1994,7 +2020,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-               } else {
-                       in = ceph_get_inode(parent->d_sb, tvino, NULL);
-                       if (IS_ERR(in)) {
--                              dout("new_inode badness\n");
-+                              doutc(cl, "new_inode badness\n");
-                               d_drop(dn);
-                               dput(dn);
-                               err = PTR_ERR(in);
-@@ -2005,7 +2031,8 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-               ret = ceph_fill_inode(in, NULL, &rde->inode, NULL, session,
-                                     -1, &req->r_caps_reservation);
-               if (ret < 0) {
--                      pr_err("ceph_fill_inode badness on %p\n", in);
-+                      pr_err_client(cl, "badness on %p %llx.%llx\n", in,
-+                                    ceph_vinop(in));
-                       if (d_really_is_negative(dn)) {
-                               if (in->i_state & I_NEW) {
-                                       ihold(in);
-@@ -2022,8 +2049,8 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-               if (d_really_is_negative(dn)) {
-                       if (ceph_security_xattr_deadlock(in)) {
--                              dout(" skip splicing dn %p to inode %p"
--                                   " (security xattr deadlock)\n", dn, in);
-+                              doutc(cl, " skip splicing dn %p to inode %p"
-+                                    " (security xattr deadlock)\n", dn, in);
-                               iput(in);
-                               skipped++;
-                               goto next_item;
-@@ -2055,17 +2082,18 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
-               req->r_readdir_cache_idx = cache_ctl.index;
-       }
-       ceph_readdir_cache_release(&cache_ctl);
--      dout("readdir_prepopulate done\n");
-+      doutc(cl, "done\n");
-       return err;
- }
- bool ceph_inode_set_size(struct inode *inode, loff_t size)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       bool ret;
-       spin_lock(&ci->i_ceph_lock);
--      dout("set_size %p %llu -> %llu\n", inode, i_size_read(inode), size);
-+      doutc(cl, "set_size %p %llu -> %llu\n", inode, i_size_read(inode), size);
-       i_size_write(inode, size);
-       ceph_fscache_update(inode);
-       inode->i_blocks = calc_inode_blocks(size);
-@@ -2080,21 +2108,24 @@ bool ceph_inode_set_size(struct inode *inode, loff_t size)
- void ceph_queue_inode_work(struct inode *inode, int work_bit)
- {
-       struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       set_bit(work_bit, &ci->i_work_mask);
-       ihold(inode);
-       if (queue_work(fsc->inode_wq, &ci->i_work)) {
--              dout("queue_inode_work %p, mask=%lx\n", inode, ci->i_work_mask);
-+              doutc(cl, "%p %llx.%llx mask=%lx\n", inode,
-+                    ceph_vinop(inode), ci->i_work_mask);
-       } else {
--              dout("queue_inode_work %p already queued, mask=%lx\n",
--                   inode, ci->i_work_mask);
-+              doutc(cl, "%p %llx.%llx already queued, mask=%lx\n",
-+                    inode, ceph_vinop(inode), ci->i_work_mask);
-               iput(inode);
-       }
- }
- static void ceph_do_invalidate_pages(struct inode *inode)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       u32 orig_gen;
-       int check = 0;
-@@ -2104,8 +2135,9 @@ static void ceph_do_invalidate_pages(struct inode *inode)
-       mutex_lock(&ci->i_truncate_mutex);
-       if (ceph_inode_is_shutdown(inode)) {
--              pr_warn_ratelimited("%s: inode %llx.%llx is shut down\n",
--                                  __func__, ceph_vinop(inode));
-+              pr_warn_ratelimited_client(cl,
-+                      "%p %llx.%llx is shut down\n", inode,
-+                      ceph_vinop(inode));
-               mapping_set_error(inode->i_mapping, -EIO);
-               truncate_pagecache(inode, 0);
-               mutex_unlock(&ci->i_truncate_mutex);
-@@ -2113,8 +2145,8 @@ static void ceph_do_invalidate_pages(struct inode *inode)
-       }
-       spin_lock(&ci->i_ceph_lock);
--      dout("invalidate_pages %p gen %d revoking %d\n", inode,
--           ci->i_rdcache_gen, ci->i_rdcache_revoking);
-+      doutc(cl, "%p %llx.%llx gen %d revoking %d\n", inode,
-+            ceph_vinop(inode), ci->i_rdcache_gen, ci->i_rdcache_revoking);
-       if (ci->i_rdcache_revoking != ci->i_rdcache_gen) {
-               if (__ceph_caps_revoking_other(ci, NULL, CEPH_CAP_FILE_CACHE))
-                       check = 1;
-@@ -2126,21 +2158,21 @@ static void ceph_do_invalidate_pages(struct inode *inode)
-       spin_unlock(&ci->i_ceph_lock);
-       if (invalidate_inode_pages2(inode->i_mapping) < 0) {
--              pr_err("invalidate_inode_pages2 %llx.%llx failed\n",
--                     ceph_vinop(inode));
-+              pr_err_client(cl, "invalidate_inode_pages2 %llx.%llx failed\n",
-+                            ceph_vinop(inode));
-       }
-       spin_lock(&ci->i_ceph_lock);
-       if (orig_gen == ci->i_rdcache_gen &&
-           orig_gen == ci->i_rdcache_revoking) {
--              dout("invalidate_pages %p gen %d successful\n", inode,
--                   ci->i_rdcache_gen);
-+              doutc(cl, "%p %llx.%llx gen %d successful\n", inode,
-+                    ceph_vinop(inode), ci->i_rdcache_gen);
-               ci->i_rdcache_revoking--;
-               check = 1;
-       } else {
--              dout("invalidate_pages %p gen %d raced, now %d revoking %d\n",
--                   inode, orig_gen, ci->i_rdcache_gen,
--                   ci->i_rdcache_revoking);
-+              doutc(cl, "%p %llx.%llx gen %d raced, now %d revoking %d\n",
-+                    inode, ceph_vinop(inode), orig_gen, ci->i_rdcache_gen,
-+                    ci->i_rdcache_revoking);
-               if (__ceph_caps_revoking_other(ci, NULL, CEPH_CAP_FILE_CACHE))
-                       check = 1;
-       }
-@@ -2157,6 +2189,7 @@ static void ceph_do_invalidate_pages(struct inode *inode)
-  */
- void __ceph_do_pending_vmtruncate(struct inode *inode)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       u64 to;
-       int wrbuffer_refs, finish = 0;
-@@ -2165,7 +2198,8 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
- retry:
-       spin_lock(&ci->i_ceph_lock);
-       if (ci->i_truncate_pending == 0) {
--              dout("%s %p none pending\n", __func__, inode);
-+              doutc(cl, "%p %llx.%llx none pending\n", inode,
-+                    ceph_vinop(inode));
-               spin_unlock(&ci->i_ceph_lock);
-               mutex_unlock(&ci->i_truncate_mutex);
-               return;
-@@ -2177,7 +2211,8 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
-        */
-       if (ci->i_wrbuffer_ref_head < ci->i_wrbuffer_ref) {
-               spin_unlock(&ci->i_ceph_lock);
--              dout("%s %p flushing snaps first\n", __func__, inode);
-+              doutc(cl, "%p %llx.%llx flushing snaps first\n", inode,
-+                    ceph_vinop(inode));
-               filemap_write_and_wait_range(&inode->i_data, 0,
-                                            inode->i_sb->s_maxbytes);
-               goto retry;
-@@ -2188,8 +2223,8 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
-       to = ci->i_truncate_pagecache_size;
-       wrbuffer_refs = ci->i_wrbuffer_ref;
--      dout("%s %p (%d) to %lld\n", __func__, inode,
--           ci->i_truncate_pending, to);
-+      doutc(cl, "%p %llx.%llx (%d) to %lld\n", inode, ceph_vinop(inode),
-+            ci->i_truncate_pending, to);
-       spin_unlock(&ci->i_ceph_lock);
-       ceph_fscache_resize(inode, to);
-@@ -2217,9 +2252,10 @@ static void ceph_inode_work(struct work_struct *work)
-       struct ceph_inode_info *ci = container_of(work, struct ceph_inode_info,
-                                                i_work);
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       if (test_and_clear_bit(CEPH_I_WORK_WRITEBACK, &ci->i_work_mask)) {
--              dout("writeback %p\n", inode);
-+              doutc(cl, "writeback %p %llx.%llx\n", inode, ceph_vinop(inode));
-               filemap_fdatawrite(&inode->i_data);
-       }
-       if (test_and_clear_bit(CEPH_I_WORK_INVALIDATE_PAGES, &ci->i_work_mask))
-@@ -2291,6 +2327,7 @@ static int fill_fscrypt_truncate(struct inode *inode,
-                                struct ceph_mds_request *req,
-                                struct iattr *attr)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       int boff = attr->ia_size % CEPH_FSCRYPT_BLOCK_SIZE;
-       loff_t pos, orig_pos = round_down(attr->ia_size,
-@@ -2313,9 +2350,9 @@ static int fill_fscrypt_truncate(struct inode *inode,
-       issued = __ceph_caps_issued(ci, NULL);
--      dout("%s size %lld -> %lld got cap refs on %s, issued %s\n", __func__,
--           i_size, attr->ia_size, ceph_cap_string(got),
--           ceph_cap_string(issued));
-+      doutc(cl, "size %lld -> %lld got cap refs on %s, issued %s\n",
-+            i_size, attr->ia_size, ceph_cap_string(got),
-+            ceph_cap_string(issued));
-       /* Try to writeback the dirty pagecaches */
-       if (issued & (CEPH_CAP_FILE_BUFFER)) {
-@@ -2370,8 +2407,7 @@ static int fill_fscrypt_truncate(struct inode *inode,
-        * If the Rados object doesn't exist, it will be set to 0.
-        */
-       if (!objver) {
--              dout("%s hit hole, ppos %lld < size %lld\n", __func__,
--                   pos, i_size);
-+              doutc(cl, "hit hole, ppos %lld < size %lld\n", pos, i_size);
-               header.data_len = cpu_to_le32(8 + 8 + 4);
-               header.file_offset = 0;
-@@ -2380,8 +2416,8 @@ static int fill_fscrypt_truncate(struct inode *inode,
-               header.data_len = cpu_to_le32(8 + 8 + 4 + CEPH_FSCRYPT_BLOCK_SIZE);
-               header.file_offset = cpu_to_le64(orig_pos);
--              dout("%s encrypt block boff/bsize %d/%lu\n", __func__,
--                   boff, CEPH_FSCRYPT_BLOCK_SIZE);
-+              doutc(cl, "encrypt block boff/bsize %d/%lu\n", boff,
-+                    CEPH_FSCRYPT_BLOCK_SIZE);
-               /* truncate and zero out the extra contents for the last block */
-               memset(iov.iov_base + boff, 0, PAGE_SIZE - boff);
-@@ -2409,8 +2445,8 @@ static int fill_fscrypt_truncate(struct inode *inode,
-       }
-       req->r_pagelist = pagelist;
- out:
--      dout("%s %p size dropping cap refs on %s\n", __func__,
--           inode, ceph_cap_string(got));
-+      doutc(cl, "%p %llx.%llx size dropping cap refs on %s\n", inode,
-+            ceph_vinop(inode), ceph_cap_string(got));
-       ceph_put_cap_refs(ci, got);
-       if (iov.iov_base)
-               kunmap_local(iov.iov_base);
-@@ -2428,6 +2464,7 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-       unsigned int ia_valid = attr->ia_valid;
-       struct ceph_mds_request *req;
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_cap_flush *prealloc_cf;
-       loff_t isize = i_size_read(inode);
-       int issued;
-@@ -2466,7 +2503,8 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-               }
-       }
--      dout("setattr %p issued %s\n", inode, ceph_cap_string(issued));
-+      doutc(cl, "%p %llx.%llx issued %s\n", inode, ceph_vinop(inode),
-+            ceph_cap_string(issued));
- #if IS_ENABLED(CONFIG_FS_ENCRYPTION)
-       if (cia && cia->fscrypt_auth) {
-               u32 len = ceph_fscrypt_auth_len(cia->fscrypt_auth);
-@@ -2477,8 +2515,8 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-                       goto out;
-               }
--              dout("setattr %llx:%llx fscrypt_auth len %u to %u)\n",
--                      ceph_vinop(inode), ci->fscrypt_auth_len, len);
-+              doutc(cl, "%p %llx.%llx fscrypt_auth len %u to %u)\n", inode,
-+                    ceph_vinop(inode), ci->fscrypt_auth_len, len);
-               /* It should never be re-set once set */
-               WARN_ON_ONCE(ci->fscrypt_auth);
-@@ -2506,9 +2544,10 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
- #endif /* CONFIG_FS_ENCRYPTION */
-       if (ia_valid & ATTR_UID) {
--              dout("setattr %p uid %d -> %d\n", inode,
--                   from_kuid(&init_user_ns, inode->i_uid),
--                   from_kuid(&init_user_ns, attr->ia_uid));
-+              doutc(cl, "%p %llx.%llx uid %d -> %d\n", inode,
-+                    ceph_vinop(inode),
-+                    from_kuid(&init_user_ns, inode->i_uid),
-+                    from_kuid(&init_user_ns, attr->ia_uid));
-               if (issued & CEPH_CAP_AUTH_EXCL) {
-                       inode->i_uid = attr->ia_uid;
-                       dirtied |= CEPH_CAP_AUTH_EXCL;
-@@ -2521,9 +2560,10 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-               }
-       }
-       if (ia_valid & ATTR_GID) {
--              dout("setattr %p gid %d -> %d\n", inode,
--                   from_kgid(&init_user_ns, inode->i_gid),
--                   from_kgid(&init_user_ns, attr->ia_gid));
-+              doutc(cl, "%p %llx.%llx gid %d -> %d\n", inode,
-+                    ceph_vinop(inode),
-+                    from_kgid(&init_user_ns, inode->i_gid),
-+                    from_kgid(&init_user_ns, attr->ia_gid));
-               if (issued & CEPH_CAP_AUTH_EXCL) {
-                       inode->i_gid = attr->ia_gid;
-                       dirtied |= CEPH_CAP_AUTH_EXCL;
-@@ -2536,8 +2576,8 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-               }
-       }
-       if (ia_valid & ATTR_MODE) {
--              dout("setattr %p mode 0%o -> 0%o\n", inode, inode->i_mode,
--                   attr->ia_mode);
-+              doutc(cl, "%p %llx.%llx mode 0%o -> 0%o\n", inode,
-+                    ceph_vinop(inode), inode->i_mode, attr->ia_mode);
-               if (issued & CEPH_CAP_AUTH_EXCL) {
-                       inode->i_mode = attr->ia_mode;
-                       dirtied |= CEPH_CAP_AUTH_EXCL;
-@@ -2551,9 +2591,10 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-       }
-       if (ia_valid & ATTR_ATIME) {
--              dout("setattr %p atime %lld.%ld -> %lld.%ld\n", inode,
--                   inode->i_atime.tv_sec, inode->i_atime.tv_nsec,
--                   attr->ia_atime.tv_sec, attr->ia_atime.tv_nsec);
-+              doutc(cl, "%p %llx.%llx atime %lld.%ld -> %lld.%ld\n",
-+                    inode, ceph_vinop(inode), inode->i_atime.tv_sec,
-+                    inode->i_atime.tv_nsec, attr->ia_atime.tv_sec,
-+                    attr->ia_atime.tv_nsec);
-               if (issued & CEPH_CAP_FILE_EXCL) {
-                       ci->i_time_warp_seq++;
-                       inode->i_atime = attr->ia_atime;
-@@ -2573,7 +2614,8 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-               }
-       }
-       if (ia_valid & ATTR_SIZE) {
--              dout("setattr %p size %lld -> %lld\n", inode, isize, attr->ia_size);
-+              doutc(cl, "%p %llx.%llx size %lld -> %lld\n", inode,
-+                    ceph_vinop(inode), isize, attr->ia_size);
-               /*
-                * Only when the new size is smaller and not aligned to
-                * CEPH_FSCRYPT_BLOCK_SIZE will the RMW is needed.
-@@ -2624,9 +2666,10 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-               }
-       }
-       if (ia_valid & ATTR_MTIME) {
--              dout("setattr %p mtime %lld.%ld -> %lld.%ld\n", inode,
--                   inode->i_mtime.tv_sec, inode->i_mtime.tv_nsec,
--                   attr->ia_mtime.tv_sec, attr->ia_mtime.tv_nsec);
-+              doutc(cl, "%p %llx.%llx mtime %lld.%ld -> %lld.%ld\n",
-+                    inode, ceph_vinop(inode), inode->i_mtime.tv_sec,
-+                    inode->i_mtime.tv_nsec, attr->ia_mtime.tv_sec,
-+                    attr->ia_mtime.tv_nsec);
-               if (issued & CEPH_CAP_FILE_EXCL) {
-                       ci->i_time_warp_seq++;
-                       inode->i_mtime = attr->ia_mtime;
-@@ -2650,11 +2693,12 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-       if (ia_valid & ATTR_CTIME) {
-               bool only = (ia_valid & (ATTR_SIZE|ATTR_MTIME|ATTR_ATIME|
-                                        ATTR_MODE|ATTR_UID|ATTR_GID)) == 0;
--              dout("setattr %p ctime %lld.%ld -> %lld.%ld (%s)\n", inode,
--                   inode_get_ctime(inode).tv_sec,
--                   inode_get_ctime(inode).tv_nsec,
--                   attr->ia_ctime.tv_sec, attr->ia_ctime.tv_nsec,
--                   only ? "ctime only" : "ignored");
-+              doutc(cl, "%p %llx.%llx ctime %lld.%ld -> %lld.%ld (%s)\n",
-+                    inode, ceph_vinop(inode), inode_get_ctime(inode).tv_sec,
-+                    inode_get_ctime(inode).tv_nsec,
-+                    attr->ia_ctime.tv_sec, attr->ia_ctime.tv_nsec,
-+                    only ? "ctime only" : "ignored");
-+
-               if (only) {
-                       /*
-                        * if kernel wants to dirty ctime but nothing else,
-@@ -2672,7 +2716,8 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-               }
-       }
-       if (ia_valid & ATTR_FILE)
--              dout("setattr %p ATTR_FILE ... hrm!\n", inode);
-+              doutc(cl, "%p %llx.%llx ATTR_FILE ... hrm!\n", inode,
-+                    ceph_vinop(inode));
-       if (dirtied) {
-               inode_dirty_flags = __ceph_mark_dirty_caps(ci, dirtied,
-@@ -2713,16 +2758,17 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr,
-                */
-               err = ceph_mdsc_do_request(mdsc, NULL, req);
-               if (err == -EAGAIN && truncate_retry--) {
--                      dout("setattr %p result=%d (%s locally, %d remote), retry it!\n",
--                           inode, err, ceph_cap_string(dirtied), mask);
-+                      doutc(cl, "%p %llx.%llx result=%d (%s locally, %d remote), retry it!\n",
-+                            inode, ceph_vinop(inode), err,
-+                            ceph_cap_string(dirtied), mask);
-                       ceph_mdsc_put_request(req);
-                       ceph_free_cap_flush(prealloc_cf);
-                       goto retry;
-               }
-       }
- out:
--      dout("setattr %p result=%d (%s locally, %d remote)\n", inode, err,
--           ceph_cap_string(dirtied), mask);
-+      doutc(cl, "%p %llx.%llx result=%d (%s locally, %d remote)\n", inode,
-+            ceph_vinop(inode), err, ceph_cap_string(dirtied), mask);
-       ceph_mdsc_put_request(req);
-       ceph_free_cap_flush(prealloc_cf);
-@@ -2811,18 +2857,20 @@ int __ceph_do_getattr(struct inode *inode, struct page *locked_page,
-                     int mask, bool force)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       struct ceph_mds_request *req;
-       int mode;
-       int err;
-       if (ceph_snap(inode) == CEPH_SNAPDIR) {
--              dout("do_getattr inode %p SNAPDIR\n", inode);
-+              doutc(cl, "inode %p %llx.%llx SNAPDIR\n", inode,
-+                    ceph_vinop(inode));
-               return 0;
-       }
--      dout("do_getattr inode %p mask %s mode 0%o\n",
--           inode, ceph_cap_string(mask), inode->i_mode);
-+      doutc(cl, "inode %p %llx.%llx mask %s mode 0%o\n", inode,
-+            ceph_vinop(inode), ceph_cap_string(mask), inode->i_mode);
-       if (!force && ceph_caps_issued_mask_metric(ceph_inode(inode), mask, 1))
-                       return 0;
-@@ -2849,7 +2897,7 @@ int __ceph_do_getattr(struct inode *inode, struct page *locked_page,
-               }
-       }
-       ceph_mdsc_put_request(req);
--      dout("do_getattr result=%d\n", err);
-+      doutc(cl, "result=%d\n", err);
-       return err;
- }
-@@ -2857,6 +2905,7 @@ int ceph_do_getvxattr(struct inode *inode, const char *name, void *value,
-                     size_t size)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       struct ceph_mds_request *req;
-       int mode = USE_AUTH_MDS;
-@@ -2886,7 +2935,7 @@ int ceph_do_getvxattr(struct inode *inode, const char *name, void *value,
-       xattr_value = req->r_reply_info.xattr_info.xattr_value;
-       xattr_value_len = req->r_reply_info.xattr_info.xattr_value_len;
--      dout("do_getvxattr xattr_value_len:%zu, size:%zu\n", xattr_value_len, size);
-+      doutc(cl, "xattr_value_len:%zu, size:%zu\n", xattr_value_len, size);
-       err = (int)xattr_value_len;
-       if (size == 0)
-@@ -2901,7 +2950,7 @@ int ceph_do_getvxattr(struct inode *inode, const char *name, void *value,
- put:
-       ceph_mdsc_put_request(req);
- out:
--      dout("do_getvxattr result=%d\n", err);
-+      doutc(cl, "result=%d\n", err);
-       return err;
- }
-diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c
-index 3f617146e4ad..e861de3c79b9 100644
---- a/fs/ceph/ioctl.c
-+++ b/fs/ceph/ioctl.c
-@@ -245,6 +245,7 @@ static long ceph_ioctl_lazyio(struct file *file)
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       if ((fi->fmode & CEPH_FILE_MODE_LAZY) == 0) {
-               spin_lock(&ci->i_ceph_lock);
-@@ -252,11 +253,13 @@ static long ceph_ioctl_lazyio(struct file *file)
-               ci->i_nr_by_mode[ffs(CEPH_FILE_MODE_LAZY)]++;
-               __ceph_touch_fmode(ci, mdsc, fi->fmode);
-               spin_unlock(&ci->i_ceph_lock);
--              dout("ioctl_layzio: file %p marked lazy\n", file);
-+              doutc(cl, "file %p %p %llx.%llx marked lazy\n", file, inode,
-+                    ceph_vinop(inode));
-               ceph_check_caps(ci, 0);
-       } else {
--              dout("ioctl_layzio: file %p already lazy\n", file);
-+              doutc(cl, "file %p %p %llx.%llx already lazy\n", file, inode,
-+                    ceph_vinop(inode));
-       }
-       return 0;
- }
-@@ -355,10 +358,12 @@ static const char *ceph_ioctl_cmd_name(const unsigned int cmd)
- long ceph_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
- {
-+      struct inode *inode = file_inode(file);
-+      struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
-       int ret;
--      dout("ioctl file %p cmd %s arg %lu\n", file,
--           ceph_ioctl_cmd_name(cmd), arg);
-+      doutc(fsc->client, "file %p %p %llx.%llx cmd %s arg %lu\n", file,
-+            inode, ceph_vinop(inode), ceph_ioctl_cmd_name(cmd), arg);
-       switch (cmd) {
-       case CEPH_IOC_GET_LAYOUT:
-               return ceph_ioctl_get_layout(file, (void __user *)arg);
-diff --git a/fs/ceph/locks.c b/fs/ceph/locks.c
-index cb51c7e9c8e2..e07ad29ff8b9 100644
---- a/fs/ceph/locks.c
-+++ b/fs/ceph/locks.c
-@@ -77,6 +77,7 @@ static int ceph_lock_message(u8 lock_type, u16 operation, struct inode *inode,
-                            int cmd, u8 wait, struct file_lock *fl)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *req;
-       int err;
-       u64 length = 0;
-@@ -111,10 +112,10 @@ static int ceph_lock_message(u8 lock_type, u16 operation, struct inode *inode,
-       owner = secure_addr(fl->fl_owner);
--      dout("ceph_lock_message: rule: %d, op: %d, owner: %llx, pid: %llu, "
--           "start: %llu, length: %llu, wait: %d, type: %d\n", (int)lock_type,
--           (int)operation, owner, (u64)fl->fl_pid, fl->fl_start, length,
--           wait, fl->fl_type);
-+      doutc(cl, "rule: %d, op: %d, owner: %llx, pid: %llu, "
-+                  "start: %llu, length: %llu, wait: %d, type: %d\n",
-+                  (int)lock_type, (int)operation, owner, (u64)fl->fl_pid,
-+                  fl->fl_start, length, wait, fl->fl_type);
-       req->r_args.filelock_change.rule = lock_type;
-       req->r_args.filelock_change.type = cmd;
-@@ -147,16 +148,17 @@ static int ceph_lock_message(u8 lock_type, u16 operation, struct inode *inode,
-       }
-       ceph_mdsc_put_request(req);
--      dout("ceph_lock_message: rule: %d, op: %d, pid: %llu, start: %llu, "
--           "length: %llu, wait: %d, type: %d, err code %d\n", (int)lock_type,
--           (int)operation, (u64)fl->fl_pid, fl->fl_start,
--           length, wait, fl->fl_type, err);
-+      doutc(cl, "rule: %d, op: %d, pid: %llu, start: %llu, "
-+            "length: %llu, wait: %d, type: %d, err code %d\n",
-+            (int)lock_type, (int)operation, (u64)fl->fl_pid,
-+            fl->fl_start, length, wait, fl->fl_type, err);
-       return err;
- }
- static int ceph_lock_wait_for_completion(struct ceph_mds_client *mdsc,
-                                          struct ceph_mds_request *req)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_request *intr_req;
-       struct inode *inode = req->r_inode;
-       int err, lock_type;
-@@ -174,8 +176,7 @@ static int ceph_lock_wait_for_completion(struct ceph_mds_client *mdsc,
-       if (!err)
-               return 0;
--      dout("ceph_lock_wait_for_completion: request %llu was interrupted\n",
--           req->r_tid);
-+      doutc(cl, "request %llu was interrupted\n", req->r_tid);
-       mutex_lock(&mdsc->mutex);
-       if (test_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags)) {
-@@ -246,6 +247,7 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl)
- {
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int err = 0;
-       u16 op = CEPH_MDS_OP_SETFILELOCK;
-       u8 wait = 0;
-@@ -257,7 +259,7 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl)
-       if (ceph_inode_is_shutdown(inode))
-               return -ESTALE;
--      dout("ceph_lock, fl_owner: %p\n", fl->fl_owner);
-+      doutc(cl, "fl_owner: %p\n", fl->fl_owner);
-       /* set wait bit as appropriate, then make command as Ceph expects it*/
-       if (IS_GETLK(cmd))
-@@ -292,7 +294,7 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl)
-       err = ceph_lock_message(CEPH_LOCK_FCNTL, op, inode, lock_cmd, wait, fl);
-       if (!err) {
-               if (op == CEPH_MDS_OP_SETFILELOCK && F_UNLCK != fl->fl_type) {
--                      dout("mds locked, locking locally\n");
-+                      doutc(cl, "locking locally\n");
-                       err = posix_lock_file(file, fl, NULL);
-                       if (err) {
-                               /* undo! This should only happen if
-@@ -300,8 +302,8 @@ int ceph_lock(struct file *file, int cmd, struct file_lock *fl)
-                                * deadlock. */
-                               ceph_lock_message(CEPH_LOCK_FCNTL, op, inode,
-                                                 CEPH_LOCK_UNLOCK, 0, fl);
--                              dout("got %d on posix_lock_file, undid lock\n",
--                                   err);
-+                              doutc(cl, "got %d on posix_lock_file, undid lock\n",
-+                                    err);
-                       }
-               }
-       }
-@@ -312,6 +314,7 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl)
- {
-       struct inode *inode = file_inode(file);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int err = 0;
-       u8 wait = 0;
-       u8 lock_cmd;
-@@ -322,7 +325,7 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl)
-       if (ceph_inode_is_shutdown(inode))
-               return -ESTALE;
--      dout("ceph_flock, fl_file: %p\n", fl->fl_file);
-+      doutc(cl, "fl_file: %p\n", fl->fl_file);
-       spin_lock(&ci->i_ceph_lock);
-       if (ci->i_ceph_flags & CEPH_I_ERROR_FILELOCK) {
-@@ -359,7 +362,8 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl)
-                       ceph_lock_message(CEPH_LOCK_FLOCK,
-                                         CEPH_MDS_OP_SETFILELOCK,
-                                         inode, CEPH_LOCK_UNLOCK, 0, fl);
--                      dout("got %d on locks_lock_file_wait, undid lock\n", err);
-+                      doutc(cl, "got %d on locks_lock_file_wait, undid lock\n",
-+                            err);
-               }
-       }
-       return err;
-@@ -371,6 +375,7 @@ int ceph_flock(struct file *file, int cmd, struct file_lock *fl)
-  */
- void ceph_count_locks(struct inode *inode, int *fcntl_count, int *flock_count)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct file_lock *lock;
-       struct file_lock_context *ctx;
-@@ -386,17 +391,20 @@ void ceph_count_locks(struct inode *inode, int *fcntl_count, int *flock_count)
-                       ++(*flock_count);
-               spin_unlock(&ctx->flc_lock);
-       }
--      dout("counted %d flock locks and %d fcntl locks\n",
--           *flock_count, *fcntl_count);
-+      doutc(cl, "counted %d flock locks and %d fcntl locks\n",
-+            *flock_count, *fcntl_count);
- }
- /*
-  * Given a pointer to a lock, convert it to a ceph filelock
-  */
--static int lock_to_ceph_filelock(struct file_lock *lock,
-+static int lock_to_ceph_filelock(struct inode *inode,
-+                               struct file_lock *lock,
-                                struct ceph_filelock *cephlock)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int err = 0;
-+
-       cephlock->start = cpu_to_le64(lock->fl_start);
-       cephlock->length = cpu_to_le64(lock->fl_end - lock->fl_start + 1);
-       cephlock->client = cpu_to_le64(0);
-@@ -414,7 +422,7 @@ static int lock_to_ceph_filelock(struct file_lock *lock,
-               cephlock->type = CEPH_LOCK_UNLOCK;
-               break;
-       default:
--              dout("Have unknown lock type %d\n", lock->fl_type);
-+              doutc(cl, "Have unknown lock type %d\n", lock->fl_type);
-               err = -EINVAL;
-       }
-@@ -432,13 +440,14 @@ int ceph_encode_locks_to_buffer(struct inode *inode,
- {
-       struct file_lock *lock;
-       struct file_lock_context *ctx = locks_inode_context(inode);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       int err = 0;
-       int seen_fcntl = 0;
-       int seen_flock = 0;
-       int l = 0;
--      dout("encoding %d flock and %d fcntl locks\n", num_flock_locks,
--           num_fcntl_locks);
-+      doutc(cl, "encoding %d flock and %d fcntl locks\n", num_flock_locks,
-+            num_fcntl_locks);
-       if (!ctx)
-               return 0;
-@@ -450,7 +459,7 @@ int ceph_encode_locks_to_buffer(struct inode *inode,
-                       err = -ENOSPC;
-                       goto fail;
-               }
--              err = lock_to_ceph_filelock(lock, &flocks[l]);
-+              err = lock_to_ceph_filelock(inode, lock, &flocks[l]);
-               if (err)
-                       goto fail;
-               ++l;
-@@ -461,7 +470,7 @@ int ceph_encode_locks_to_buffer(struct inode *inode,
-                       err = -ENOSPC;
-                       goto fail;
-               }
--              err = lock_to_ceph_filelock(lock, &flocks[l]);
-+              err = lock_to_ceph_filelock(inode, lock, &flocks[l]);
-               if (err)
-                       goto fail;
-               ++l;
-diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
-index 11289ce8a8cc..56609b80880c 100644
---- a/fs/ceph/mds_client.c
-+++ b/fs/ceph/mds_client.c
-@@ -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 @@ static int parse_reply_info_readdir(void **p, void *end,
- 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 @@ static int parse_reply_info_filelock(void **p, void *end,
- 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;
- }
-@@ -831,6 +835,7 @@ 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_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,8 +860,8 @@ 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;
-@@ -872,8 +877,8 @@ int ceph_wait_on_conflict_unlink(struct dentry *dentry)
-       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 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
- 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 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
-               *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 @@ int ceph_iterate_session_caps(struct ceph_mds_session *session,
- 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)
-@@ -2127,6 +2150,7 @@ static bool drop_negative_children(struct dentry *dentry)
- 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;
-@@ -2146,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))
-@@ -2188,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);
-               }
-@@ -2208,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);
-@@ -2228,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);
-@@ -2236,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;
-               }
-       }
-@@ -2253,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);
- }
- /*
-@@ -2267,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;
-@@ -2325,7 +2355,7 @@ static void ceph_send_cap_releases(struct ceph_mds_client *mdsc,
-                       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;
-               }
-@@ -2345,13 +2375,13 @@ static void ceph_send_cap_releases(struct ceph_mds_client *mdsc,
-               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;
-@@ -2374,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");
-       }
- }
-@@ -2411,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");
-         }
- }
-@@ -2612,6 +2644,7 @@ static u8 *get_fscrypt_altname(const struct ceph_mds_request *req, u32 *plen)
- 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;
-@@ -2637,8 +2670,7 @@ char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
-               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 &&
-@@ -2716,15 +2748,15 @@ char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
-                * 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;
- }
-@@ -2787,22 +2819,22 @@ static int set_request_path_attr(struct ceph_mds_client *mdsc, struct inode *rin
-                                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(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;
-@@ -3103,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;
-@@ -3121,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;
-              }
-       }
-@@ -3137,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;
-@@ -3206,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;
- }
-@@ -3234,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;
-@@ -3246,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;
-               }
-@@ -3289,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;
-       }
-@@ -3305,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
-@@ -3397,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);
-@@ -3425,7 +3459,7 @@ static void __do_request(struct ceph_mds_client *mdsc,
-       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);
-@@ -3439,6 +3473,7 @@ static void __do_request(struct ceph_mds_client *mdsc,
- 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);
-@@ -3448,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);
-       }
- }
-@@ -3459,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);
-@@ -3472,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);
-               }
-@@ -3482,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 */
-@@ -3503,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;
-               }
-       }
-@@ -3512,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);
-@@ -3531,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 {
-@@ -3548,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
-@@ -3586,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;
- }
-@@ -3606,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)
-@@ -3628,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 */
-@@ -3638,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;
-       }
-@@ -3648,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;
-       }
-@@ -3666,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;
-       }
-@@ -3696,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;
-@@ -3706,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
-@@ -3746,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;
-       }
-@@ -3810,7 +3852,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
-                       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);
-@@ -3839,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;
-@@ -3856,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) {
-               /*
-@@ -3877,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;
-@@ -3898,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);
- }
-@@ -3937,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;
-@@ -3984,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;
-               }
-       }
-@@ -4000,23 +4046,25 @@ 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);
-               session->s_features = features;
-               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;
-                       renewed_caps(mdsc, session, 0);
-@@ -4045,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);
-@@ -4054,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);
-@@ -4076,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);
-@@ -4085,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);
-@@ -4095,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);
-       }
-@@ -4112,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);
-       }
-@@ -4150,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)
-@@ -4295,6 +4347,7 @@ static struct dentry* d_find_primary(struct inode *inode)
- 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;
-@@ -4331,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 */
-@@ -4483,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) {
-@@ -4521,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);
-@@ -4551,6 +4605,7 @@ static int encode_snap_realms(struct ceph_mds_client *mdsc,
- 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;
-@@ -4559,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)
-@@ -4575,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);
-@@ -4710,7 +4765,8 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
- 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;
- }
-@@ -4729,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++) {
-@@ -4747,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 */
-@@ -4805,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);
-@@ -4849,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);
-@@ -4870,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);
-               }
-       }
-@@ -4898,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;
-@@ -4909,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;
-@@ -4927,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... */
-       }
-@@ -5000,7 +5057,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
- 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);
- }
-@@ -5008,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)
-@@ -5047,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))
-@@ -5058,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:
-@@ -5088,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++;
-@@ -5095,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);
-       }
- }
-@@ -5128,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;
-@@ -5257,6 +5320,7 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)
-  */
- 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;
-@@ -5264,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;
-       /*
-@@ -5292,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);
-       }
-@@ -5311,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);
-@@ -5326,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");
- }
- /*
-@@ -5334,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) {
-@@ -5373,8 +5439,8 @@ static void flush_mdlog_and_wait_mdsc_unsafe_requests(struct ceph_mds_client *md
-                       } 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);
-@@ -5392,17 +5458,18 @@ static void flush_mdlog_and_wait_mdsc_unsafe_requests(struct ceph_mds_client *md
-       }
-       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);
-@@ -5418,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);
-@@ -5441,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);
-@@ -5463,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));
-@@ -5491,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)
-@@ -5499,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++) {
-@@ -5530,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.
-@@ -5551,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;
-@@ -5565,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;
-@@ -5582,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);
-@@ -5627,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:
-@@ -5642,6 +5711,7 @@ void ceph_mdsc_handle_fsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
-  */
- 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;
-@@ -5656,13 +5726,12 @@ 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;
-       }
-@@ -5696,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;
-@@ -5727,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);
- }
-@@ -5736,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);
-@@ -5775,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);
-diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c
-index 66afb18df76b..a476d5e6d39f 100644
---- a/fs/ceph/mdsmap.c
-+++ b/fs/ceph/mdsmap.c
-@@ -11,6 +11,7 @@
- #include <linux/ceph/messenger.h>
- #include <linux/ceph/decode.h>
-+#include "mds_client.h"
- #include "super.h"
- #define CEPH_MDS_IS_READY(i, ignore_laggy) \
-@@ -117,6 +118,7 @@ static int __decode_and_drop_compat_set(void **p, void* end)
- struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
-                                      void *end, bool msgr2)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mdsmap *m;
-       const void *start = *p;
-       int i, j, n;
-@@ -234,20 +236,18 @@ struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
-                       *p = info_end;
-               }
--              dout("mdsmap_decode %d/%d %lld mds%d.%d %s %s%s\n",
--                   i+1, n, global_id, mds, inc,
--                   ceph_pr_addr(&addr),
--                   ceph_mds_state_name(state),
--                   laggy ? "(laggy)" : "");
-+              doutc(cl, "%d/%d %lld mds%d.%d %s %s%s\n", i+1, n, global_id,
-+                    mds, inc, ceph_pr_addr(&addr),
-+                    ceph_mds_state_name(state), laggy ? "(laggy)" : "");
-               if (mds < 0 || mds >= m->possible_max_rank) {
--                      pr_warn("mdsmap_decode got incorrect mds(%d)\n", mds);
-+                      pr_warn_client(cl, "got incorrect mds(%d)\n", mds);
-                       continue;
-               }
-               if (state <= 0) {
--                      dout("mdsmap_decode got incorrect state(%s)\n",
--                           ceph_mds_state_name(state));
-+                      doutc(cl, "got incorrect state(%s)\n",
-+                            ceph_mds_state_name(state));
-                       continue;
-               }
-@@ -387,16 +387,16 @@ struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
-               ceph_decode_64_safe(p, end, m->m_max_xattr_size, bad_ext);
-       }
- bad_ext:
--      dout("mdsmap_decode m_enabled: %d, m_damaged: %d, m_num_laggy: %d\n",
--           !!m->m_enabled, !!m->m_damaged, m->m_num_laggy);
-+      doutc(cl, "m_enabled: %d, m_damaged: %d, m_num_laggy: %d\n",
-+            !!m->m_enabled, !!m->m_damaged, m->m_num_laggy);
-       *p = end;
--      dout("mdsmap_decode success epoch %u\n", m->m_epoch);
-+      doutc(cl, "success epoch %u\n", m->m_epoch);
-       return m;
- nomem:
-       err = -ENOMEM;
-       goto out_err;
- corrupt:
--      pr_err("corrupt mdsmap\n");
-+      pr_err_client(cl, "corrupt mdsmap\n");
-       print_hex_dump(KERN_DEBUG, "mdsmap: ",
-                      DUMP_PREFIX_OFFSET, 16, 1,
-                      start, end - start, true);
-diff --git a/fs/ceph/metric.c b/fs/ceph/metric.c
-index 6d3584f16f9a..871c1090e520 100644
---- a/fs/ceph/metric.c
-+++ b/fs/ceph/metric.c
-@@ -31,6 +31,7 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
-       struct ceph_client_metric *m = &mdsc->metric;
-       u64 nr_caps = atomic64_read(&m->total_caps);
-       u32 header_len = sizeof(struct ceph_metric_header);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_msg *msg;
-       s64 sum;
-       s32 items = 0;
-@@ -51,8 +52,8 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
-       msg = ceph_msg_new(CEPH_MSG_CLIENT_METRICS, len, GFP_NOFS, true);
-       if (!msg) {
--              pr_err("send metrics to mds%d, failed to allocate message\n",
--                     s->s_mds);
-+              pr_err_client(cl, "to mds%d, failed to allocate message\n",
-+                            s->s_mds);
-               return false;
-       }
-diff --git a/fs/ceph/quota.c b/fs/ceph/quota.c
-index ca4932e6f71b..06ee397e0c3a 100644
---- a/fs/ceph/quota.c
-+++ b/fs/ceph/quota.c
-@@ -43,6 +43,7 @@ void ceph_handle_quota(struct ceph_mds_client *mdsc,
- {
-       struct super_block *sb = mdsc->fsc->sb;
-       struct ceph_mds_quota *h = msg->front.iov_base;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_vino vino;
-       struct inode *inode;
-       struct ceph_inode_info *ci;
-@@ -51,8 +52,8 @@ void ceph_handle_quota(struct ceph_mds_client *mdsc,
-               return;
-       if (msg->front.iov_len < sizeof(*h)) {
--              pr_err("%s corrupt message mds%d len %d\n", __func__,
--                     session->s_mds, (int)msg->front.iov_len);
-+              pr_err_client(cl, "corrupt message mds%d len %d\n",
-+                            session->s_mds, (int)msg->front.iov_len);
-               ceph_msg_dump(msg);
-               goto out;
-       }
-@@ -62,7 +63,7 @@ void ceph_handle_quota(struct ceph_mds_client *mdsc,
-       vino.snap = CEPH_NOSNAP;
-       inode = ceph_find_inode(sb, vino);
-       if (!inode) {
--              pr_warn("Failed to find inode %llu\n", vino.ino);
-+              pr_warn_client(cl, "failed to find inode %llx\n", vino.ino);
-               goto out;
-       }
-       ci = ceph_inode(inode);
-@@ -85,6 +86,7 @@ find_quotarealm_inode(struct ceph_mds_client *mdsc, u64 ino)
- {
-       struct ceph_quotarealm_inode *qri = NULL;
-       struct rb_node **node, *parent = NULL;
-+      struct ceph_client *cl = mdsc->fsc->client;
-       mutex_lock(&mdsc->quotarealms_inodes_mutex);
-       node = &(mdsc->quotarealms_inodes.rb_node);
-@@ -110,7 +112,7 @@ find_quotarealm_inode(struct ceph_mds_client *mdsc, u64 ino)
-                       rb_link_node(&qri->node, parent, node);
-                       rb_insert_color(&qri->node, &mdsc->quotarealms_inodes);
-               } else
--                      pr_warn("Failed to alloc quotarealms_inode\n");
-+                      pr_warn_client(cl, "Failed to alloc quotarealms_inode\n");
-       }
-       mutex_unlock(&mdsc->quotarealms_inodes_mutex);
-@@ -129,6 +131,7 @@ static struct inode *lookup_quotarealm_inode(struct ceph_mds_client *mdsc,
-                                            struct super_block *sb,
-                                            struct ceph_snap_realm *realm)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_quotarealm_inode *qri;
-       struct inode *in;
-@@ -161,8 +164,8 @@ static struct inode *lookup_quotarealm_inode(struct ceph_mds_client *mdsc,
-       }
-       if (IS_ERR(in)) {
--              dout("Can't lookup inode %llx (err: %ld)\n",
--                   realm->ino, PTR_ERR(in));
-+              doutc(cl, "Can't lookup inode %llx (err: %ld)\n", realm->ino,
-+                    PTR_ERR(in));
-               qri->timeout = jiffies + msecs_to_jiffies(60 * 1000); /* XXX */
-       } else {
-               qri->timeout = 0;
-@@ -212,6 +215,7 @@ static int get_quota_realm(struct ceph_mds_client *mdsc, struct inode *inode,
-                          enum quota_get_realm which_quota,
-                          struct ceph_snap_realm **realmp, bool retry)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci = NULL;
-       struct ceph_snap_realm *realm, *next;
-       struct inode *in;
-@@ -227,8 +231,9 @@ static int get_quota_realm(struct ceph_mds_client *mdsc, struct inode *inode,
-       if (realm)
-               ceph_get_snap_realm(mdsc, realm);
-       else
--              pr_err_ratelimited("get_quota_realm: ino (%llx.%llx) "
--                                 "null i_snap_realm\n", ceph_vinop(inode));
-+              pr_err_ratelimited_client(cl,
-+                              "%p %llx.%llx null i_snap_realm\n",
-+                              inode, ceph_vinop(inode));
-       while (realm) {
-               bool has_inode;
-@@ -322,6 +327,7 @@ static bool check_quota_exceeded(struct inode *inode, enum quota_check_op op,
-                                loff_t delta)
- {
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci;
-       struct ceph_snap_realm *realm, *next;
-       struct inode *in;
-@@ -337,8 +343,9 @@ static bool check_quota_exceeded(struct inode *inode, enum quota_check_op op,
-       if (realm)
-               ceph_get_snap_realm(mdsc, realm);
-       else
--              pr_err_ratelimited("check_quota_exceeded: ino (%llx.%llx) "
--                                 "null i_snap_realm\n", ceph_vinop(inode));
-+              pr_err_ratelimited_client(cl,
-+                              "%p %llx.%llx null i_snap_realm\n",
-+                              inode, ceph_vinop(inode));
-       while (realm) {
-               bool has_inode;
-@@ -388,7 +395,7 @@ static bool check_quota_exceeded(struct inode *inode, enum quota_check_op op,
-                       break;
-               default:
-                       /* Shouldn't happen */
--                      pr_warn("Invalid quota check op (%d)\n", op);
-+                      pr_warn_client(cl, "Invalid quota check op (%d)\n", op);
-                       exceeded = true; /* Just break the loop */
-               }
-               iput(in);
-diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
-index d0d3612f28f0..73c526954749 100644
---- a/fs/ceph/snap.c
-+++ b/fs/ceph/snap.c
-@@ -138,7 +138,7 @@ static struct ceph_snap_realm *ceph_create_snap_realm(
-       __insert_snap_realm(&mdsc->snap_realms, realm);
-       mdsc->num_snap_realms++;
--      dout("%s %llx %p\n", __func__, realm->ino, realm);
-+      doutc(mdsc->fsc->client, "%llx %p\n", realm->ino, realm);
-       return realm;
- }
-@@ -150,6 +150,7 @@ static struct ceph_snap_realm *ceph_create_snap_realm(
- static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc,
-                                                  u64 ino)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct rb_node *n = mdsc->snap_realms.rb_node;
-       struct ceph_snap_realm *r;
-@@ -162,7 +163,7 @@ static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc,
-               else if (ino > r->ino)
-                       n = n->rb_right;
-               else {
--                      dout("%s %llx %p\n", __func__, r->ino, r);
-+                      doutc(cl, "%llx %p\n", r->ino, r);
-                       return r;
-               }
-       }
-@@ -188,9 +189,10 @@ static void __put_snap_realm(struct ceph_mds_client *mdsc,
- static void __destroy_snap_realm(struct ceph_mds_client *mdsc,
-                                struct ceph_snap_realm *realm)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       lockdep_assert_held_write(&mdsc->snap_rwsem);
--      dout("%s %p %llx\n", __func__, realm, realm->ino);
-+      doutc(cl, "%p %llx\n", realm, realm->ino);
-       rb_erase(&realm->node, &mdsc->snap_realms);
-       mdsc->num_snap_realms--;
-@@ -290,6 +292,7 @@ static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc,
-                                   struct ceph_snap_realm *realm,
-                                   u64 parentino)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_snap_realm *parent;
-       lockdep_assert_held_write(&mdsc->snap_rwsem);
-@@ -303,8 +306,8 @@ static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc,
-               if (IS_ERR(parent))
-                       return PTR_ERR(parent);
-       }
--      dout("%s %llx %p: %llx %p -> %llx %p\n", __func__, realm->ino,
--           realm, realm->parent_ino, realm->parent, parentino, parent);
-+      doutc(cl, "%llx %p: %llx %p -> %llx %p\n", realm->ino, realm,
-+            realm->parent_ino, realm->parent, parentino, parent);
-       if (realm->parent) {
-               list_del_init(&realm->child_item);
-               ceph_put_snap_realm(mdsc, realm->parent);
-@@ -334,6 +337,7 @@ static int build_snap_context(struct ceph_mds_client *mdsc,
-                             struct list_head *realm_queue,
-                             struct list_head *dirty_realms)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_snap_realm *parent = realm->parent;
-       struct ceph_snap_context *snapc;
-       int err = 0;
-@@ -361,10 +365,10 @@ static int build_snap_context(struct ceph_mds_client *mdsc,
-           realm->cached_context->seq == realm->seq &&
-           (!parent ||
-            realm->cached_context->seq >= parent->cached_context->seq)) {
--              dout("%s %llx %p: %p seq %lld (%u snaps) (unchanged)\n",
--                   __func__, realm->ino, realm, realm->cached_context,
--                   realm->cached_context->seq,
--                   (unsigned int)realm->cached_context->num_snaps);
-+              doutc(cl, "%llx %p: %p seq %lld (%u snaps) (unchanged)\n",
-+                    realm->ino, realm, realm->cached_context,
-+                    realm->cached_context->seq,
-+                    (unsigned int)realm->cached_context->num_snaps);
-               return 0;
-       }
-@@ -401,8 +405,8 @@ static int build_snap_context(struct ceph_mds_client *mdsc,
-       sort(snapc->snaps, num, sizeof(u64), cmpu64_rev, NULL);
-       snapc->num_snaps = num;
--      dout("%s %llx %p: %p seq %lld (%u snaps)\n", __func__, realm->ino,
--           realm, snapc, snapc->seq, (unsigned int) snapc->num_snaps);
-+      doutc(cl, "%llx %p: %p seq %lld (%u snaps)\n", realm->ino, realm,
-+            snapc, snapc->seq, (unsigned int) snapc->num_snaps);
-       ceph_put_snap_context(realm->cached_context);
-       realm->cached_context = snapc;
-@@ -419,7 +423,7 @@ static int build_snap_context(struct ceph_mds_client *mdsc,
-               ceph_put_snap_context(realm->cached_context);
-               realm->cached_context = NULL;
-       }
--      pr_err("%s %llx %p fail %d\n", __func__, realm->ino, realm, err);
-+      pr_err_client(cl, "%llx %p fail %d\n", realm->ino, realm, err);
-       return err;
- }
-@@ -430,6 +434,7 @@ static void rebuild_snap_realms(struct ceph_mds_client *mdsc,
-                               struct ceph_snap_realm *realm,
-                               struct list_head *dirty_realms)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       LIST_HEAD(realm_queue);
-       int last = 0;
-       bool skip = false;
-@@ -455,8 +460,8 @@ static void rebuild_snap_realms(struct ceph_mds_client *mdsc,
-               last = build_snap_context(mdsc, _realm, &realm_queue,
-                                         dirty_realms);
--              dout("%s %llx %p, %s\n", __func__, _realm->ino, _realm,
--                   last > 0 ? "is deferred" : !last ? "succeeded" : "failed");
-+              doutc(cl, "%llx %p, %s\n", realm->ino, realm,
-+                    last > 0 ? "is deferred" : !last ? "succeeded" : "failed");
-               /* is any child in the list ? */
-               list_for_each_entry(child, &_realm->children, child_item) {
-@@ -526,6 +531,7 @@ static void ceph_queue_cap_snap(struct ceph_inode_info *ci,
-                               struct ceph_cap_snap **pcapsnap)
- {
-       struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_snap_context *old_snapc, *new_snapc;
-       struct ceph_cap_snap *capsnap = *pcapsnap;
-       struct ceph_buffer *old_blob = NULL;
-@@ -551,14 +557,14 @@ static void ceph_queue_cap_snap(struct ceph_inode_info *ci,
-                  as no new writes are allowed to start when pending, so any
-                  writes in progress now were started before the previous
-                  cap_snap.  lucky us. */
--              dout("%s %p %llx.%llx already pending\n",
--                   __func__, inode, ceph_vinop(inode));
-+              doutc(cl, "%p %llx.%llx already pending\n", inode,
-+                    ceph_vinop(inode));
-               goto update_snapc;
-       }
-       if (ci->i_wrbuffer_ref_head == 0 &&
-           !(dirty & (CEPH_CAP_ANY_EXCL|CEPH_CAP_FILE_WR))) {
--              dout("%s %p %llx.%llx nothing dirty|writing\n",
--                   __func__, inode, ceph_vinop(inode));
-+              doutc(cl, "%p %llx.%llx nothing dirty|writing\n", inode,
-+                    ceph_vinop(inode));
-               goto update_snapc;
-       }
-@@ -578,15 +584,15 @@ static void ceph_queue_cap_snap(struct ceph_inode_info *ci,
-       } else {
-               if (!(used & CEPH_CAP_FILE_WR) &&
-                   ci->i_wrbuffer_ref_head == 0) {
--                      dout("%s %p %llx.%llx no new_snap|dirty_page|writing\n",
--                           __func__, inode, ceph_vinop(inode));
-+                      doutc(cl, "%p %llx.%llx no new_snap|dirty_page|writing\n",
-+                            inode, ceph_vinop(inode));
-                       goto update_snapc;
-               }
-       }
--      dout("%s %p %llx.%llx cap_snap %p queuing under %p %s %s\n",
--           __func__, inode, ceph_vinop(inode), capsnap, old_snapc,
--           ceph_cap_string(dirty), capsnap->need_flush ? "" : "no_flush");
-+      doutc(cl, "%p %llx.%llx cap_snap %p queuing under %p %s %s\n",
-+            inode, ceph_vinop(inode), capsnap, old_snapc,
-+            ceph_cap_string(dirty), capsnap->need_flush ? "" : "no_flush");
-       ihold(inode);
-       capsnap->follows = old_snapc->seq;
-@@ -618,9 +624,9 @@ static void ceph_queue_cap_snap(struct ceph_inode_info *ci,
-       list_add_tail(&capsnap->ci_item, &ci->i_cap_snaps);
-       if (used & CEPH_CAP_FILE_WR) {
--              dout("%s %p %llx.%llx cap_snap %p snapc %p seq %llu used WR,"
--                   " now pending\n", __func__, inode, ceph_vinop(inode),
--                   capsnap, old_snapc, old_snapc->seq);
-+              doutc(cl, "%p %llx.%llx cap_snap %p snapc %p seq %llu used WR,"
-+                    " now pending\n", inode, ceph_vinop(inode), capsnap,
-+                    old_snapc, old_snapc->seq);
-               capsnap->writing = 1;
-       } else {
-               /* note mtime, size NOW. */
-@@ -637,7 +643,7 @@ static void ceph_queue_cap_snap(struct ceph_inode_info *ci,
-               ci->i_head_snapc = NULL;
-       } else {
-               ci->i_head_snapc = ceph_get_snap_context(new_snapc);
--              dout(" new snapc is %p\n", new_snapc);
-+              doutc(cl, " new snapc is %p\n", new_snapc);
-       }
-       spin_unlock(&ci->i_ceph_lock);
-@@ -658,6 +664,7 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
- {
-       struct inode *inode = &ci->netfs.inode;
-       struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
-+      struct ceph_client *cl = mdsc->fsc->client;
-       BUG_ON(capsnap->writing);
-       capsnap->size = i_size_read(inode);
-@@ -670,11 +677,12 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
-       capsnap->truncate_size = ci->i_truncate_size;
-       capsnap->truncate_seq = ci->i_truncate_seq;
-       if (capsnap->dirty_pages) {
--              dout("%s %p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu "
--                   "still has %d dirty pages\n", __func__, inode,
--                   ceph_vinop(inode), capsnap, capsnap->context,
--                   capsnap->context->seq, ceph_cap_string(capsnap->dirty),
--                   capsnap->size, capsnap->dirty_pages);
-+              doutc(cl, "%p %llx.%llx cap_snap %p snapc %p %llu %s "
-+                    "s=%llu still has %d dirty pages\n", inode,
-+                    ceph_vinop(inode), capsnap, capsnap->context,
-+                    capsnap->context->seq,
-+                    ceph_cap_string(capsnap->dirty),
-+                    capsnap->size, capsnap->dirty_pages);
-               return 0;
-       }
-@@ -683,20 +691,20 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
-        * And trigger to flush the buffer immediately.
-        */
-       if (ci->i_wrbuffer_ref) {
--              dout("%s %p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu "
--                   "used WRBUFFER, delaying\n", __func__, inode,
--                   ceph_vinop(inode), capsnap, capsnap->context,
--                   capsnap->context->seq, ceph_cap_string(capsnap->dirty),
--                   capsnap->size);
-+              doutc(cl, "%p %llx.%llx cap_snap %p snapc %p %llu %s "
-+                    "s=%llu used WRBUFFER, delaying\n", inode,
-+                    ceph_vinop(inode), capsnap, capsnap->context,
-+                    capsnap->context->seq, ceph_cap_string(capsnap->dirty),
-+                    capsnap->size);
-               ceph_queue_writeback(inode);
-               return 0;
-       }
-       ci->i_ceph_flags |= CEPH_I_FLUSH_SNAPS;
--      dout("%s %p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu\n",
--           __func__, inode, ceph_vinop(inode), capsnap, capsnap->context,
--           capsnap->context->seq, ceph_cap_string(capsnap->dirty),
--           capsnap->size);
-+      doutc(cl, "%p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu\n",
-+            inode, ceph_vinop(inode), capsnap, capsnap->context,
-+            capsnap->context->seq, ceph_cap_string(capsnap->dirty),
-+            capsnap->size);
-       spin_lock(&mdsc->snap_flush_lock);
-       if (list_empty(&ci->i_snap_flush_item)) {
-@@ -714,11 +722,12 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
- static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc,
-                                 struct ceph_snap_realm *realm)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci;
-       struct inode *lastinode = NULL;
-       struct ceph_cap_snap *capsnap = NULL;
--      dout("%s %p %llx inode\n", __func__, realm, realm->ino);
-+      doutc(cl, "%p %llx inode\n", realm, realm->ino);
-       spin_lock(&realm->inodes_with_caps_lock);
-       list_for_each_entry(ci, &realm->inodes_with_caps, i_snap_realm_item) {
-@@ -737,8 +746,9 @@ static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc,
-               if (!capsnap) {
-                       capsnap = kmem_cache_zalloc(ceph_cap_snap_cachep, GFP_NOFS);
-                       if (!capsnap) {
--                              pr_err("ENOMEM allocating ceph_cap_snap on %p\n",
--                                     inode);
-+                              pr_err_client(cl,
-+                                      "ENOMEM allocating ceph_cap_snap on %p\n",
-+                                      inode);
-                               return;
-                       }
-               }
-@@ -756,7 +766,7 @@ static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc,
-       if (capsnap)
-               kmem_cache_free(ceph_cap_snap_cachep, capsnap);
--      dout("%s %p %llx done\n", __func__, realm, realm->ino);
-+      doutc(cl, "%p %llx done\n", realm, realm->ino);
- }
- /*
-@@ -770,6 +780,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-                          void *p, void *e, bool deletion,
-                          struct ceph_snap_realm **realm_ret)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_mds_snap_realm *ri;    /* encoded */
-       __le64 *snaps;                     /* encoded */
-       __le64 *prior_parent_snaps;        /* encoded */
-@@ -784,7 +795,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-       lockdep_assert_held_write(&mdsc->snap_rwsem);
--      dout("%s deletion=%d\n", __func__, deletion);
-+      doutc(cl, "deletion=%d\n", deletion);
- more:
-       realm = NULL;
-       rebuild_snapcs = 0;
-@@ -814,8 +825,8 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-       rebuild_snapcs += err;
-       if (le64_to_cpu(ri->seq) > realm->seq) {
--              dout("%s updating %llx %p %lld -> %lld\n", __func__,
--                   realm->ino, realm, realm->seq, le64_to_cpu(ri->seq));
-+              doutc(cl, "updating %llx %p %lld -> %lld\n", realm->ino,
-+                    realm, realm->seq, le64_to_cpu(ri->seq));
-               /* update realm parameters, snap lists */
-               realm->seq = le64_to_cpu(ri->seq);
-               realm->created = le64_to_cpu(ri->created);
-@@ -838,16 +849,16 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-               rebuild_snapcs = 1;
-       } else if (!realm->cached_context) {
--              dout("%s %llx %p seq %lld new\n", __func__,
--                   realm->ino, realm, realm->seq);
-+              doutc(cl, "%llx %p seq %lld new\n", realm->ino, realm,
-+                    realm->seq);
-               rebuild_snapcs = 1;
-       } else {
--              dout("%s %llx %p seq %lld unchanged\n", __func__,
--                   realm->ino, realm, realm->seq);
-+              doutc(cl, "%llx %p seq %lld unchanged\n", realm->ino, realm,
-+                    realm->seq);
-       }
--      dout("done with %llx %p, rebuild_snapcs=%d, %p %p\n", realm->ino,
--           realm, rebuild_snapcs, p, e);
-+      doutc(cl, "done with %llx %p, rebuild_snapcs=%d, %p %p\n", realm->ino,
-+            realm, rebuild_snapcs, p, e);
-       /*
-        * this will always track the uppest parent realm from which
-@@ -895,7 +906,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-               ceph_put_snap_realm(mdsc, realm);
-       if (first_realm)
-               ceph_put_snap_realm(mdsc, first_realm);
--      pr_err("%s error %d\n", __func__, err);
-+      pr_err_client(cl, "error %d\n", err);
-       /*
-        * When receiving a corrupted snap trace we don't know what
-@@ -909,11 +920,12 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-       WRITE_ONCE(mdsc->fsc->mount_state, CEPH_MOUNT_FENCE_IO);
-       ret = ceph_monc_blocklist_add(&client->monc, &client->msgr.inst.addr);
-       if (ret)
--              pr_err("%s failed to blocklist %s: %d\n", __func__,
--                     ceph_pr_addr(&client->msgr.inst.addr), ret);
-+              pr_err_client(cl, "failed to blocklist %s: %d\n",
-+                            ceph_pr_addr(&client->msgr.inst.addr), ret);
--      WARN(1, "%s: %s%sdo remount to continue%s",
--           __func__, ret ? "" : ceph_pr_addr(&client->msgr.inst.addr),
-+      WARN(1, "[client.%lld] %s %s%sdo remount to continue%s",
-+           client->monc.auth->global_id, __func__,
-+           ret ? "" : ceph_pr_addr(&client->msgr.inst.addr),
-            ret ? "" : " was blocklisted, ",
-            err == -EIO ? " after corrupted snaptrace is fixed" : "");
-@@ -929,11 +941,12 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
-  */
- static void flush_snaps(struct ceph_mds_client *mdsc)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_inode_info *ci;
-       struct inode *inode;
-       struct ceph_mds_session *session = NULL;
--      dout("%s\n", __func__);
-+      doutc(cl, "begin\n");
-       spin_lock(&mdsc->snap_flush_lock);
-       while (!list_empty(&mdsc->snap_flush_list)) {
-               ci = list_first_entry(&mdsc->snap_flush_list,
-@@ -948,7 +961,7 @@ static void flush_snaps(struct ceph_mds_client *mdsc)
-       spin_unlock(&mdsc->snap_flush_lock);
-       ceph_put_mds_session(session);
--      dout("%s done\n", __func__);
-+      doutc(cl, "done\n");
- }
- /**
-@@ -1004,6 +1017,7 @@ void ceph_handle_snap(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;
-       int mds = session->s_mds;
-       u64 split;
-@@ -1034,8 +1048,8 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
-       trace_len = le32_to_cpu(h->trace_len);
-       p += sizeof(*h);
--      dout("%s from mds%d op %s split %llx tracelen %d\n", __func__,
--           mds, ceph_snap_op_name(op), split, trace_len);
-+      doutc(cl, "from mds%d op %s split %llx tracelen %d\n", mds,
-+            ceph_snap_op_name(op), split, trace_len);
-       down_write(&mdsc->snap_rwsem);
-       locked_rwsem = 1;
-@@ -1066,7 +1080,7 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
-                               goto out;
-               }
--              dout("splitting snap_realm %llx %p\n", realm->ino, realm);
-+              doutc(cl, "splitting snap_realm %llx %p\n", realm->ino, realm);
-               for (i = 0; i < num_split_inos; i++) {
-                       struct ceph_vino vino = {
-                               .ino = le64_to_cpu(split_inos[i]),
-@@ -1091,13 +1105,13 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
-                        */
-                       if (ci->i_snap_realm->created >
-                           le64_to_cpu(ri->created)) {
--                              dout(" leaving %p %llx.%llx in newer realm %llx %p\n",
--                                   inode, ceph_vinop(inode), ci->i_snap_realm->ino,
--                                   ci->i_snap_realm);
-+                              doutc(cl, " leaving %p %llx.%llx in newer realm %llx %p\n",
-+                                    inode, ceph_vinop(inode), ci->i_snap_realm->ino,
-+                                    ci->i_snap_realm);
-                               goto skip_inode;
-                       }
--                      dout(" will move %p %llx.%llx to split realm %llx %p\n",
--                           inode, ceph_vinop(inode), realm->ino, realm);
-+                      doutc(cl, " will move %p %llx.%llx to split realm %llx %p\n",
-+                            inode, ceph_vinop(inode), realm->ino, realm);
-                       ceph_get_snap_realm(mdsc, realm);
-                       ceph_change_snap_realm(inode, realm);
-@@ -1158,7 +1172,7 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
-       return;
- bad:
--      pr_err("%s corrupt snap message from mds%d\n", __func__, mds);
-+      pr_err_client(cl, "corrupt snap message from mds%d\n", mds);
-       ceph_msg_dump(msg);
- out:
-       if (locked_rwsem)
-@@ -1174,6 +1188,7 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc,
- struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
-                                           u64 snap)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_snapid_map *sm, *exist;
-       struct rb_node **p, *parent;
-       int ret;
-@@ -1196,8 +1211,8 @@ struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
-       }
-       spin_unlock(&mdsc->snapid_map_lock);
-       if (exist) {
--              dout("%s found snapid map %llx -> %x\n", __func__,
--                   exist->snap, exist->dev);
-+              doutc(cl, "found snapid map %llx -> %x\n", exist->snap,
-+                    exist->dev);
-               return exist;
-       }
-@@ -1241,13 +1256,12 @@ struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
-       if (exist) {
-               free_anon_bdev(sm->dev);
-               kfree(sm);
--              dout("%s found snapid map %llx -> %x\n", __func__,
--                   exist->snap, exist->dev);
-+              doutc(cl, "found snapid map %llx -> %x\n", exist->snap,
-+                    exist->dev);
-               return exist;
-       }
--      dout("%s create snapid map %llx -> %x\n", __func__,
--           sm->snap, sm->dev);
-+      doutc(cl, "create snapid map %llx -> %x\n", sm->snap, sm->dev);
-       return sm;
- }
-@@ -1272,6 +1286,7 @@ void ceph_put_snapid_map(struct ceph_mds_client* mdsc,
- void ceph_trim_snapid_map(struct ceph_mds_client *mdsc)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_snapid_map *sm;
-       unsigned long now;
-       LIST_HEAD(to_free);
-@@ -1293,7 +1308,7 @@ void ceph_trim_snapid_map(struct ceph_mds_client *mdsc)
-       while (!list_empty(&to_free)) {
-               sm = list_first_entry(&to_free, struct ceph_snapid_map, lru);
-               list_del(&sm->lru);
--              dout("trim snapid map %llx -> %x\n", sm->snap, sm->dev);
-+              doutc(cl, "trim snapid map %llx -> %x\n", sm->snap, sm->dev);
-               free_anon_bdev(sm->dev);
-               kfree(sm);
-       }
-@@ -1301,6 +1316,7 @@ void ceph_trim_snapid_map(struct ceph_mds_client *mdsc)
- void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc)
- {
-+      struct ceph_client *cl = mdsc->fsc->client;
-       struct ceph_snapid_map *sm;
-       struct rb_node *p;
-       LIST_HEAD(to_free);
-@@ -1319,8 +1335,8 @@ void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc)
-               list_del(&sm->lru);
-               free_anon_bdev(sm->dev);
-               if (WARN_ON_ONCE(atomic_read(&sm->ref))) {
--                      pr_err("snapid map %llx -> %x still in use\n",
--                             sm->snap, sm->dev);
-+                      pr_err_client(cl, "snapid map %llx -> %x still in use\n",
-+                                    sm->snap, sm->dev);
-               }
-               kfree(sm);
-       }
-diff --git a/fs/ceph/super.c b/fs/ceph/super.c
-index 29026ba4f022..9139f102351b 100644
---- a/fs/ceph/super.c
-+++ b/fs/ceph/super.c
-@@ -46,9 +46,10 @@ static void ceph_put_super(struct super_block *s)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(s);
--      dout("put_super\n");
-+      doutc(fsc->client, "begin\n");
-       ceph_fscrypt_free_dummy_policy(fsc);
-       ceph_mdsc_close_sessions(fsc->mdsc);
-+      doutc(fsc->client, "done\n");
- }
- static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
-@@ -59,13 +60,13 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
-       int i, err;
-       u64 data_pool;
-+      doutc(fsc->client, "begin\n");
-       if (fsc->mdsc->mdsmap->m_num_data_pg_pools == 1) {
-               data_pool = fsc->mdsc->mdsmap->m_data_pg_pools[0];
-       } else {
-               data_pool = CEPH_NOPOOL;
-       }
--      dout("statfs\n");
-       err = ceph_monc_do_statfs(monc, data_pool, &st);
-       if (err < 0)
-               return err;
-@@ -113,24 +114,26 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
-       /* fold the fs_cluster_id into the upper bits */
-       buf->f_fsid.val[1] = monc->fs_cluster_id;
-+      doutc(fsc->client, "done\n");
-       return 0;
- }
- static int ceph_sync_fs(struct super_block *sb, int wait)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
-+      struct ceph_client *cl = fsc->client;
-       if (!wait) {
--              dout("sync_fs (non-blocking)\n");
-+              doutc(cl, "(non-blocking)\n");
-               ceph_flush_dirty_caps(fsc->mdsc);
--              dout("sync_fs (non-blocking) done\n");
-+              doutc(cl, "(non-blocking) done\n");
-               return 0;
-       }
--      dout("sync_fs (blocking)\n");
-+      doutc(cl, "(blocking)\n");
-       ceph_osdc_sync(&fsc->client->osdc);
-       ceph_mdsc_sync(fsc->mdsc);
--      dout("sync_fs (blocking) done\n");
-+      doutc(cl, "(blocking) done\n");
-       return 0;
- }
-@@ -349,7 +352,7 @@ static int ceph_parse_source(struct fs_parameter *param, struct fs_context *fc)
-       char *dev_name = param->string, *dev_name_end;
-       int ret;
--      dout("%s '%s'\n", __func__, dev_name);
-+      dout("'%s'\n", dev_name);
-       if (!dev_name || !*dev_name)
-               return invalfc(fc, "Empty source");
-@@ -421,7 +424,7 @@ static int ceph_parse_mount_param(struct fs_context *fc,
-               return ret;
-       token = fs_parse(fc, ceph_mount_parameters, param, &result);
--      dout("%s fs_parse '%s' token %d\n", __func__, param->key, token);
-+      dout("%s: fs_parse '%s' token %d\n",__func__, param->key, token);
-       if (token < 0)
-               return token;
-@@ -891,7 +894,7 @@ static void flush_fs_workqueues(struct ceph_fs_client *fsc)
- static void destroy_fs_client(struct ceph_fs_client *fsc)
- {
--      dout("destroy_fs_client %p\n", fsc);
-+      doutc(fsc->client, "%p\n", fsc);
-       spin_lock(&ceph_fsc_lock);
-       list_del(&fsc->metric_wakeup);
-@@ -906,7 +909,7 @@ static void destroy_fs_client(struct ceph_fs_client *fsc)
-       ceph_destroy_client(fsc->client);
-       kfree(fsc);
--      dout("destroy_fs_client %p done\n", fsc);
-+      dout("%s: %p done\n", __func__, fsc);
- }
- /*
-@@ -1028,7 +1031,7 @@ void ceph_umount_begin(struct super_block *sb)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
--      dout("ceph_umount_begin - starting forced umount\n");
-+      doutc(fsc->client, "starting forced umount\n");
-       if (!fsc)
-               return;
-       fsc->mount_state = CEPH_MOUNT_SHUTDOWN;
-@@ -1056,13 +1059,14 @@ static struct dentry *open_root_dentry(struct ceph_fs_client *fsc,
-                                      const char *path,
-                                      unsigned long started)
- {
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       struct ceph_mds_request *req = NULL;
-       int err;
-       struct dentry *root;
-       /* open dir */
--      dout("open_root_inode opening '%s'\n", path);
-+      doutc(cl, "opening '%s'\n", path);
-       req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_GETATTR, USE_ANY_MDS);
-       if (IS_ERR(req))
-               return ERR_CAST(req);
-@@ -1082,13 +1086,13 @@ static struct dentry *open_root_dentry(struct ceph_fs_client *fsc,
-       if (err == 0) {
-               struct inode *inode = req->r_target_inode;
-               req->r_target_inode = NULL;
--              dout("open_root_inode success\n");
-+              doutc(cl, "success\n");
-               root = d_make_root(inode);
-               if (!root) {
-                       root = ERR_PTR(-ENOMEM);
-                       goto out;
-               }
--              dout("open_root_inode success, root dentry is %p\n", root);
-+              doutc(cl, "success, root dentry is %p\n", root);
-       } else {
-               root = ERR_PTR(err);
-       }
-@@ -1147,11 +1151,12 @@ static int ceph_apply_test_dummy_encryption(struct super_block *sb,
- static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc,
-                                     struct fs_context *fc)
- {
-+      struct ceph_client *cl = fsc->client;
-       int err;
-       unsigned long started = jiffies;  /* note the start time */
-       struct dentry *root;
--      dout("mount start %p\n", fsc);
-+      doutc(cl, "mount start %p\n", fsc);
-       mutex_lock(&fsc->client->mount_mutex);
-       if (!fsc->sb->s_root) {
-@@ -1174,7 +1179,7 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc,
-               if (err)
-                       goto out;
--              dout("mount opening path '%s'\n", path);
-+              doutc(cl, "mount opening path '%s'\n", path);
-               ceph_fs_debugfs_init(fsc);
-@@ -1189,7 +1194,7 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc,
-       }
-       fsc->mount_state = CEPH_MOUNT_MOUNTED;
--      dout("mount success\n");
-+      doutc(cl, "mount success\n");
-       mutex_unlock(&fsc->client->mount_mutex);
-       return root;
-@@ -1202,9 +1207,10 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc,
- static int ceph_set_super(struct super_block *s, struct fs_context *fc)
- {
-       struct ceph_fs_client *fsc = s->s_fs_info;
-+      struct ceph_client *cl = fsc->client;
-       int ret;
--      dout("set_super %p\n", s);
-+      doutc(cl, "%p\n", s);
-       s->s_maxbytes = MAX_LFS_FILESIZE;
-@@ -1238,30 +1244,31 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
-       struct ceph_mount_options *fsopt = new->mount_options;
-       struct ceph_options *opt = new->client->options;
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
-+      struct ceph_client *cl = fsc->client;
--      dout("ceph_compare_super %p\n", sb);
-+      doutc(cl, "%p\n", sb);
-       if (compare_mount_options(fsopt, opt, fsc)) {
--              dout("monitor(s)/mount options don't match\n");
-+              doutc(cl, "monitor(s)/mount options don't match\n");
-               return 0;
-       }
-       if ((opt->flags & CEPH_OPT_FSID) &&
-           ceph_fsid_compare(&opt->fsid, &fsc->client->fsid)) {
--              dout("fsid doesn't match\n");
-+              doutc(cl, "fsid doesn't match\n");
-               return 0;
-       }
-       if (fc->sb_flags != (sb->s_flags & ~SB_BORN)) {
--              dout("flags differ\n");
-+              doutc(cl, "flags differ\n");
-               return 0;
-       }
-       if (fsc->blocklisted && !ceph_test_mount_opt(fsc, CLEANRECOVER)) {
--              dout("client is blocklisted (and CLEANRECOVER is not set)\n");
-+              doutc(cl, "client is blocklisted (and CLEANRECOVER is not set)\n");
-               return 0;
-       }
-       if (fsc->mount_state == CEPH_MOUNT_SHUTDOWN) {
--              dout("client has been forcibly unmounted\n");
-+              doutc(cl, "client has been forcibly unmounted\n");
-               return 0;
-       }
-@@ -1349,8 +1356,9 @@ static int ceph_get_tree(struct fs_context *fc)
-               err = PTR_ERR(res);
-               goto out_splat;
-       }
--      dout("root %p inode %p ino %llx.%llx\n", res,
--           d_inode(res), ceph_vinop(d_inode(res)));
-+
-+      doutc(fsc->client, "root %p inode %p ino %llx.%llx\n", res,
-+                  d_inode(res), ceph_vinop(d_inode(res)));
-       fc->root = fsc->sb->s_root;
-       return 0;
-@@ -1408,7 +1416,8 @@ static int ceph_reconfigure_fc(struct fs_context *fc)
-               kfree(fsc->mount_options->mon_addr);
-               fsc->mount_options->mon_addr = fsopt->mon_addr;
-               fsopt->mon_addr = NULL;
--              pr_notice("ceph: monitor addresses recorded, but not used for reconnection");
-+              pr_notice_client(fsc->client,
-+                      "monitor addresses recorded, but not used for reconnection");
-       }
-       sync_filesystem(sb);
-@@ -1528,10 +1537,11 @@ void ceph_dec_osd_stopping_blocker(struct ceph_mds_client *mdsc)
- static void ceph_kill_sb(struct super_block *s)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(s);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-       bool wait;
--      dout("kill_sb %p\n", s);
-+      doutc(cl, "%p\n", s);
-       ceph_mdsc_pre_umount(mdsc);
-       flush_fs_workqueues(fsc);
-@@ -1562,9 +1572,9 @@ static void ceph_kill_sb(struct super_block *s)
-                                       &mdsc->stopping_waiter,
-                                       fsc->client->options->mount_timeout);
-               if (!timeleft) /* timed out */
--                      pr_warn("umount timed out, %ld\n", timeleft);
-+                      pr_warn_client(cl, "umount timed out, %ld\n", timeleft);
-               else if (timeleft < 0) /* killed */
--                      pr_warn("umount was killed, %ld\n", timeleft);
-+                      pr_warn_client(cl, "umount was killed, %ld\n", timeleft);
-       }
-       mdsc->stopping = CEPH_MDSC_STOPPING_FLUSHED;
-diff --git a/fs/ceph/super.h b/fs/ceph/super.h
-index 5903e3fb6d75..e31ecbed609d 100644
---- a/fs/ceph/super.h
-+++ b/fs/ceph/super.h
-@@ -506,6 +506,12 @@ ceph_sb_to_mdsc(const struct super_block *sb)
-       return (struct ceph_mds_client *)ceph_sb_to_fs_client(sb)->mdsc;
- }
-+static inline struct ceph_client *
-+ceph_inode_to_client(const struct inode *inode)
-+{
-+      return (struct ceph_client *)ceph_inode_to_fs_client(inode)->client;
-+}
-+
- static inline struct ceph_vino
- ceph_vino(const struct inode *inode)
- {
-diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
-index 558f64554b59..04d031467193 100644
---- a/fs/ceph/xattr.c
-+++ b/fs/ceph/xattr.c
-@@ -58,6 +58,7 @@ static ssize_t ceph_vxattrcb_layout(struct ceph_inode_info *ci, char *val,
-                                   size_t size)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb);
-+      struct ceph_client *cl = fsc->client;
-       struct ceph_osd_client *osdc = &fsc->client->osdc;
-       struct ceph_string *pool_ns;
-       s64 pool = ci->i_layout.pool_id;
-@@ -69,7 +70,7 @@ static ssize_t ceph_vxattrcb_layout(struct ceph_inode_info *ci, char *val,
-       pool_ns = ceph_try_get_string(ci->i_layout.pool_ns);
--      dout("ceph_vxattrcb_layout %p\n", &ci->netfs.inode);
-+      doutc(cl, "%p\n", &ci->netfs.inode);
-       down_read(&osdc->lock);
-       pool_name = ceph_pg_pool_name_by_id(osdc->osdmap, pool);
-       if (pool_name) {
-@@ -570,6 +571,8 @@ static int __set_xattr(struct ceph_inode_info *ci,
-                          int flags, int update_xattr,
-                          struct ceph_inode_xattr **newxattr)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct rb_node **p;
-       struct rb_node *parent = NULL;
-       struct ceph_inode_xattr *xattr = NULL;
-@@ -626,7 +629,7 @@ static int __set_xattr(struct ceph_inode_info *ci,
-               xattr->should_free_name = update_xattr;
-               ci->i_xattrs.count++;
--              dout("%s count=%d\n", __func__, ci->i_xattrs.count);
-+              doutc(cl, "count=%d\n", ci->i_xattrs.count);
-       } else {
-               kfree(*newxattr);
-               *newxattr = NULL;
-@@ -654,13 +657,13 @@ static int __set_xattr(struct ceph_inode_info *ci,
-       if (new) {
-               rb_link_node(&xattr->node, parent, p);
-               rb_insert_color(&xattr->node, &ci->i_xattrs.index);
--              dout("%s p=%p\n", __func__, p);
-+              doutc(cl, "p=%p\n", p);
-       }
--      dout("%s added %llx.%llx xattr %p %.*s=%.*s%s\n", __func__,
--           ceph_vinop(&ci->netfs.inode), xattr, name_len, name,
--           min(val_len, MAX_XATTR_VAL_PRINT_LEN), val,
--           val_len > MAX_XATTR_VAL_PRINT_LEN ? "..." : "");
-+      doutc(cl, "added %p %llx.%llx xattr %p %.*s=%.*s%s\n", inode,
-+            ceph_vinop(inode), xattr, name_len, name, min(val_len,
-+            MAX_XATTR_VAL_PRINT_LEN), val,
-+            val_len > MAX_XATTR_VAL_PRINT_LEN ? "..." : "");
-       return 0;
- }
-@@ -668,6 +671,7 @@ static int __set_xattr(struct ceph_inode_info *ci,
- static struct ceph_inode_xattr *__get_xattr(struct ceph_inode_info *ci,
-                          const char *name)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode);
-       struct rb_node **p;
-       struct rb_node *parent = NULL;
-       struct ceph_inode_xattr *xattr = NULL;
-@@ -688,13 +692,13 @@ static struct ceph_inode_xattr *__get_xattr(struct ceph_inode_info *ci,
-               else {
-                       int len = min(xattr->val_len, MAX_XATTR_VAL_PRINT_LEN);
--                      dout("%s %s: found %.*s%s\n", __func__, name, len,
--                           xattr->val, xattr->val_len > len ? "..." : "");
-+                      doutc(cl, "%s found %.*s%s\n", name, len, xattr->val,
-+                            xattr->val_len > len ? "..." : "");
-                       return xattr;
-               }
-       }
--      dout("%s %s: not found\n", __func__, name);
-+      doutc(cl, "%s not found\n", name);
-       return NULL;
- }
-@@ -735,19 +739,20 @@ static int __remove_xattr(struct ceph_inode_info *ci,
- static char *__copy_xattr_names(struct ceph_inode_info *ci,
-                               char *dest)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode);
-       struct rb_node *p;
-       struct ceph_inode_xattr *xattr = NULL;
-       p = rb_first(&ci->i_xattrs.index);
--      dout("__copy_xattr_names count=%d\n", ci->i_xattrs.count);
-+      doutc(cl, "count=%d\n", ci->i_xattrs.count);
-       while (p) {
-               xattr = rb_entry(p, struct ceph_inode_xattr, node);
-               memcpy(dest, xattr->name, xattr->name_len);
-               dest[xattr->name_len] = '\0';
--              dout("dest=%s %p (%s) (%d/%d)\n", dest, xattr, xattr->name,
--                   xattr->name_len, ci->i_xattrs.names_size);
-+              doutc(cl, "dest=%s %p (%s) (%d/%d)\n", dest, xattr, xattr->name,
-+                    xattr->name_len, ci->i_xattrs.names_size);
-               dest += xattr->name_len + 1;
-               p = rb_next(p);
-@@ -758,19 +763,19 @@ static char *__copy_xattr_names(struct ceph_inode_info *ci,
- void __ceph_destroy_xattrs(struct ceph_inode_info *ci)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode);
-       struct rb_node *p, *tmp;
-       struct ceph_inode_xattr *xattr = NULL;
-       p = rb_first(&ci->i_xattrs.index);
--      dout("__ceph_destroy_xattrs p=%p\n", p);
-+      doutc(cl, "p=%p\n", p);
-       while (p) {
-               xattr = rb_entry(p, struct ceph_inode_xattr, node);
-               tmp = p;
-               p = rb_next(tmp);
--              dout("__ceph_destroy_xattrs next p=%p (%.*s)\n", p,
--                   xattr->name_len, xattr->name);
-+              doutc(cl, "next p=%p (%.*s)\n", p, xattr->name_len, xattr->name);
-               rb_erase(tmp, &ci->i_xattrs.index);
-               __free_xattr(xattr);
-@@ -787,6 +792,7 @@ static int __build_xattrs(struct inode *inode)
-       __releases(ci->i_ceph_lock)
-       __acquires(ci->i_ceph_lock)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       u32 namelen;
-       u32 numattr = 0;
-       void *p, *end;
-@@ -798,8 +804,8 @@ static int __build_xattrs(struct inode *inode)
-       int err = 0;
-       int i;
--      dout("__build_xattrs() len=%d\n",
--           ci->i_xattrs.blob ? (int)ci->i_xattrs.blob->vec.iov_len : 0);
-+      doutc(cl, "len=%d\n",
-+            ci->i_xattrs.blob ? (int)ci->i_xattrs.blob->vec.iov_len : 0);
-       if (ci->i_xattrs.index_version >= ci->i_xattrs.version)
-               return 0; /* already built */
-@@ -874,6 +880,8 @@ static int __build_xattrs(struct inode *inode)
- static int __get_required_blob_size(struct ceph_inode_info *ci, int name_size,
-                                   int val_size)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode);
-+
-       /*
-        * 4 bytes for the length, and additional 4 bytes per each xattr name,
-        * 4 bytes per each value
-@@ -881,9 +889,8 @@ static int __get_required_blob_size(struct ceph_inode_info *ci, int name_size,
-       int size = 4 + ci->i_xattrs.count*(4 + 4) +
-                            ci->i_xattrs.names_size +
-                            ci->i_xattrs.vals_size;
--      dout("__get_required_blob_size c=%d names.size=%d vals.size=%d\n",
--           ci->i_xattrs.count, ci->i_xattrs.names_size,
--           ci->i_xattrs.vals_size);
-+      doutc(cl, "c=%d names.size=%d vals.size=%d\n", ci->i_xattrs.count,
-+            ci->i_xattrs.names_size, ci->i_xattrs.vals_size);
-       if (name_size)
-               size += 4 + 4 + name_size + val_size;
-@@ -899,12 +906,14 @@ static int __get_required_blob_size(struct ceph_inode_info *ci, int name_size,
-  */
- struct ceph_buffer *__ceph_build_xattrs_blob(struct ceph_inode_info *ci)
- {
-+      struct inode *inode = &ci->netfs.inode;
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct rb_node *p;
-       struct ceph_inode_xattr *xattr = NULL;
-       struct ceph_buffer *old_blob = NULL;
-       void *dest;
--      dout("__build_xattrs_blob %p\n", &ci->netfs.inode);
-+      doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode));
-       if (ci->i_xattrs.dirty) {
-               int need = __get_required_blob_size(ci, 0, 0);
-@@ -962,6 +971,7 @@ static inline int __get_request_mask(struct inode *in) {
- ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
-                     size_t size)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_inode_xattr *xattr;
-       struct ceph_vxattr *vxattr;
-@@ -1000,8 +1010,9 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
-       req_mask = __get_request_mask(inode);
-       spin_lock(&ci->i_ceph_lock);
--      dout("getxattr %p name '%s' ver=%lld index_ver=%lld\n", inode, name,
--           ci->i_xattrs.version, ci->i_xattrs.index_version);
-+      doutc(cl, "%p %llx.%llx name '%s' ver=%lld index_ver=%lld\n", inode,
-+            ceph_vinop(inode), name, ci->i_xattrs.version,
-+            ci->i_xattrs.index_version);
-       if (ci->i_xattrs.version == 0 ||
-           !((req_mask & CEPH_CAP_XATTR_SHARED) ||
-@@ -1010,8 +1021,9 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
-               /* security module gets xattr while filling trace */
-               if (current->journal_info) {
--                      pr_warn_ratelimited("sync getxattr %p "
--                                          "during filling trace\n", inode);
-+                      pr_warn_ratelimited_client(cl,
-+                              "sync %p %llx.%llx during filling trace\n",
-+                              inode, ceph_vinop(inode));
-                       return -EBUSY;
-               }
-@@ -1053,14 +1065,16 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
- ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
- {
-       struct inode *inode = d_inode(dentry);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       bool len_only = (size == 0);
-       u32 namelen;
-       int err;
-       spin_lock(&ci->i_ceph_lock);
--      dout("listxattr %p ver=%lld index_ver=%lld\n", inode,
--           ci->i_xattrs.version, ci->i_xattrs.index_version);
-+      doutc(cl, "%p %llx.%llx ver=%lld index_ver=%lld\n", inode,
-+            ceph_vinop(inode), ci->i_xattrs.version,
-+            ci->i_xattrs.index_version);
-       if (ci->i_xattrs.version == 0 ||
-           !__ceph_caps_issued_mask_metric(ci, CEPH_CAP_XATTR_SHARED, 1)) {
-@@ -1095,6 +1109,7 @@ static int ceph_sync_setxattr(struct inode *inode, const char *name,
-                             const char *value, size_t size, int flags)
- {
-       struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_request *req;
-       struct ceph_mds_client *mdsc = fsc->mdsc;
-@@ -1119,7 +1134,7 @@ static int ceph_sync_setxattr(struct inode *inode, const char *name,
-                       flags |= CEPH_XATTR_REMOVE;
-       }
--      dout("setxattr value size: %zu\n", size);
-+      doutc(cl, "name %s value size %zu\n", name, size);
-       /* do request */
-       req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS);
-@@ -1148,10 +1163,10 @@ static int ceph_sync_setxattr(struct inode *inode, const char *name,
-       req->r_num_caps = 1;
-       req->r_inode_drop = CEPH_CAP_XATTR_SHARED;
--      dout("xattr.ver (before): %lld\n", ci->i_xattrs.version);
-+      doutc(cl, "xattr.ver (before): %lld\n", ci->i_xattrs.version);
-       err = ceph_mdsc_do_request(mdsc, NULL, req);
-       ceph_mdsc_put_request(req);
--      dout("xattr.ver (after): %lld\n", ci->i_xattrs.version);
-+      doutc(cl, "xattr.ver (after): %lld\n", ci->i_xattrs.version);
- out:
-       if (pagelist)
-@@ -1162,6 +1177,7 @@ static int ceph_sync_setxattr(struct inode *inode, const char *name,
- int __ceph_setxattr(struct inode *inode, const char *name,
-                       const void *value, size_t size, int flags)
- {
-+      struct ceph_client *cl = ceph_inode_to_client(inode);
-       struct ceph_vxattr *vxattr;
-       struct ceph_inode_info *ci = ceph_inode(inode);
-       struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
-@@ -1220,9 +1236,9 @@ int __ceph_setxattr(struct inode *inode, const char *name,
-       required_blob_size = __get_required_blob_size(ci, name_len, val_len);
-       if ((ci->i_xattrs.version == 0) || !(issued & CEPH_CAP_XATTR_EXCL) ||
-           (required_blob_size > mdsc->mdsmap->m_max_xattr_size)) {
--              dout("%s do sync setxattr: version: %llu size: %d max: %llu\n",
--                   __func__, ci->i_xattrs.version, required_blob_size,
--                   mdsc->mdsmap->m_max_xattr_size);
-+              doutc(cl, "sync version: %llu size: %d max: %llu\n",
-+                    ci->i_xattrs.version, required_blob_size,
-+                    mdsc->mdsmap->m_max_xattr_size);
-               goto do_sync;
-       }
-@@ -1236,8 +1252,8 @@ int __ceph_setxattr(struct inode *inode, const char *name,
-               }
-       }
--      dout("setxattr %p name '%s' issued %s\n", inode, name,
--           ceph_cap_string(issued));
-+      doutc(cl, "%p %llx.%llx name '%s' issued %s\n", inode,
-+            ceph_vinop(inode), name, ceph_cap_string(issued));
-       __build_xattrs(inode);
-       if (!ci->i_xattrs.prealloc_blob ||
-@@ -1246,7 +1262,8 @@ int __ceph_setxattr(struct inode *inode, const char *name,
-               spin_unlock(&ci->i_ceph_lock);
-               ceph_buffer_put(old_blob); /* Shouldn't be required */
--              dout(" pre-allocating new blob size=%d\n", required_blob_size);
-+              doutc(cl, " pre-allocating new blob size=%d\n",
-+                    required_blob_size);
-               blob = ceph_buffer_new(required_blob_size, GFP_NOFS);
-               if (!blob)
-                       goto do_sync_unlocked;
-@@ -1285,8 +1302,9 @@ int __ceph_setxattr(struct inode *inode, const char *name,
-       /* security module set xattr while filling trace */
-       if (current->journal_info) {
--              pr_warn_ratelimited("sync setxattr %p "
--                                  "during filling trace\n", inode);
-+              pr_warn_ratelimited_client(cl,
-+                              "sync %p %llx.%llx during filling trace\n",
-+                              inode, ceph_vinop(inode));
-               err = -EBUSY;
-       } else {
-               err = ceph_sync_setxattr(inode, name, value, size, flags);
--- 
-2.39.5
-
diff --git a/queue-6.6/libceph-add-doutc-and-_client-debug-macros-support.patch b/queue-6.6/libceph-add-doutc-and-_client-debug-macros-support.patch
deleted file mode 100644 (file)
index 4909868..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-From ca921feecd6057708b8a6eaeae8cfe3375977abc Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 9 Jun 2023 13:04:14 +0800
-Subject: libceph: add doutc and *_client debug macros support
-
-From: Xiubo Li <xiubli@redhat.com>
-
-[ Upstream commit 5c5f0d2b5f92c47baf82b9b211e27edd7d195158 ]
-
-This will help print the fsid and client's global_id in debug logs,
-and also print the function names.
-
-[ idryomov: %lld -> %llu, leading space for doutc(), don't include
-  __func__ in pr_*() variants ]
-
-Link: https://tracker.ceph.com/issues/61590
-Signed-off-by: Xiubo Li <xiubli@redhat.com>
-Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
-Reviewed-by: Milind Changire <mchangir@redhat.com>
-Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
-Stable-dep-of: 550f7ca98ee0 ("ceph: give up on paths longer than PATH_MAX")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- include/linux/ceph/ceph_debug.h | 38 +++++++++++++++++++++++++++++++++
- 1 file changed, 38 insertions(+)
-
-diff --git a/include/linux/ceph/ceph_debug.h b/include/linux/ceph/ceph_debug.h
-index d5a5da838caf..11a92a946016 100644
---- a/include/linux/ceph/ceph_debug.h
-+++ b/include/linux/ceph/ceph_debug.h
-@@ -19,12 +19,25 @@
-       pr_debug("%.*s %12.12s:%-4d : " fmt,                            \
-                8 - (int)sizeof(KBUILD_MODNAME), "    ",               \
-                kbasename(__FILE__), __LINE__, ##__VA_ARGS__)
-+#  define doutc(client, fmt, ...)                                     \
-+      pr_debug("%.*s %12.12s:%-4d : [%pU %llu] " fmt,                 \
-+               8 - (int)sizeof(KBUILD_MODNAME), "    ",               \
-+               kbasename(__FILE__), __LINE__,                         \
-+               &client->fsid, client->monc.auth->global_id,           \
-+               ##__VA_ARGS__)
- # else
- /* faux printk call just to see any compiler warnings. */
- #  define dout(fmt, ...)      do {                            \
-               if (0)                                          \
-                       printk(KERN_DEBUG fmt, ##__VA_ARGS__);  \
-       } while (0)
-+#  define doutc(client, fmt, ...)     do {                    \
-+              if (0)                                          \
-+                      printk(KERN_DEBUG "[%pU %llu] " fmt,    \
-+                      &client->fsid,                          \
-+                      client->monc.auth->global_id,           \
-+                      ##__VA_ARGS__);                         \
-+              } while (0)
- # endif
- #else
-@@ -33,7 +46,32 @@
-  * or, just wrap pr_debug
-  */
- # define dout(fmt, ...)       pr_debug(" " fmt, ##__VA_ARGS__)
-+# define doutc(client, fmt, ...)                                      \
-+      pr_debug(" [%pU %llu] %s: " fmt, &client->fsid,                 \
-+               client->monc.auth->global_id, __func__, ##__VA_ARGS__)
- #endif
-+#define pr_notice_client(client, fmt, ...)                            \
-+      pr_notice("[%pU %llu]: " fmt, &client->fsid,                    \
-+                client->monc.auth->global_id, ##__VA_ARGS__)
-+#define pr_info_client(client, fmt, ...)                              \
-+      pr_info("[%pU %llu]: " fmt, &client->fsid,                      \
-+              client->monc.auth->global_id, ##__VA_ARGS__)
-+#define pr_warn_client(client, fmt, ...)                              \
-+      pr_warn("[%pU %llu]: " fmt, &client->fsid,                      \
-+              client->monc.auth->global_id, ##__VA_ARGS__)
-+#define pr_warn_once_client(client, fmt, ...)                         \
-+      pr_warn_once("[%pU %llu]: " fmt, &client->fsid,                 \
-+                   client->monc.auth->global_id, ##__VA_ARGS__)
-+#define pr_err_client(client, fmt, ...)                                       \
-+      pr_err("[%pU %llu]: " fmt, &client->fsid,                       \
-+             client->monc.auth->global_id, ##__VA_ARGS__)
-+#define pr_warn_ratelimited_client(client, fmt, ...)                  \
-+      pr_warn_ratelimited("[%pU %llu]: " fmt, &client->fsid,          \
-+                          client->monc.auth->global_id, ##__VA_ARGS__)
-+#define pr_err_ratelimited_client(client, fmt, ...)                   \
-+      pr_err_ratelimited("[%pU %llu]: " fmt, &client->fsid,           \
-+                         client->monc.auth->global_id, ##__VA_ARGS__)
-+
- #endif
--- 
-2.39.5
-
index f35fa61a5f7caa22c11cf687d72a394c89f48525..b174fd259ae8d9d27457e9cd6ebf201098119c30 100644 (file)
@@ -111,8 +111,6 @@ selinux-ignore-unknown-extended-permissions.patch
 btrfs-fix-use-after-free-in-btrfs_encoded_read_endio.patch
 mmc-sdhci-msm-fix-crypto-key-eviction.patch
 tracing-have-process_string-also-allow-arrays.patch
-libceph-add-doutc-and-_client-debug-macros-support.patch
-ceph-print-cluster-fsid-and-client-global_id-in-all-.patch
 ceph-give-up-on-paths-longer-than-path_max.patch
 net-mctp-handle-skb-cleanup-on-sock_queue-failures.patch
 tracing-move-readpos-from-seq_buf-to-trace_seq.patch