All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] ceph: print the client global id for debug logs
@ 2023-06-12 11:43 xiubli
  2023-06-12 11:43 ` [PATCH v2 1/6] ceph: add the *_client debug macros support xiubli
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: xiubli @ 2023-06-12 11:43 UTC (permalink / raw)
  To: idryomov, ceph-devel
  Cc: jlayton, vshankar, khiremat, mchangir, pdonnell, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

V2:
- print the client global id for all the dout()/pr_warn(),etc.

This is based the testing branch.


Xiubo Li (6):
  ceph: add the *_client debug macros support
  ceph: pass the mdsc to several helpers
  ceph: rename _to_client() to _to_fs_client()
  ceph: move mdsmap.h to fs/ceph/
  ceph: add ceph_inode_to_client() helper support
  ceph: print the client global_id in all the debug logs

 fs/ceph/acl.c                       |   6 +-
 fs/ceph/addr.c                      | 320 +++++++-----
 fs/ceph/cache.c                     |   2 +-
 fs/ceph/caps.c                      | 762 ++++++++++++++++------------
 fs/ceph/crypto.c                    |  47 +-
 fs/ceph/debugfs.c                   |   8 +-
 fs/ceph/dir.c                       | 242 +++++----
 fs/ceph/export.c                    |  49 +-
 fs/ceph/file.c                      | 294 ++++++-----
 fs/ceph/inode.c                     | 542 +++++++++++---------
 fs/ceph/ioctl.c                     |  18 +-
 fs/ceph/locks.c                     |  62 ++-
 fs/ceph/mds_client.c                | 655 ++++++++++++++----------
 fs/ceph/mds_client.h                |   5 +-
 fs/ceph/mdsmap.c                    |  30 +-
 {include/linux => fs}/ceph/mdsmap.h |   5 +-
 fs/ceph/metric.c                    |   5 +-
 fs/ceph/quota.c                     |  31 +-
 fs/ceph/snap.c                      | 204 ++++----
 fs/ceph/super.c                     |  86 ++--
 fs/ceph/super.h                     |  19 +-
 fs/ceph/xattr.c                     | 109 ++--
 include/linux/ceph/ceph_debug.h     |  38 +-
 23 files changed, 2078 insertions(+), 1461 deletions(-)
 rename {include/linux => fs}/ceph/mdsmap.h (92%)

-- 
2.40.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v2 1/6] ceph: add the *_client debug macros support
  2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
@ 2023-06-12 11:43 ` xiubli
  2023-06-13  8:39   ` Ilya Dryomov
  2023-06-12 11:43 ` [PATCH v2 2/6] ceph: pass the mdsc to several helpers xiubli
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 15+ messages in thread
From: xiubli @ 2023-06-12 11:43 UTC (permalink / raw)
  To: idryomov, ceph-devel
  Cc: jlayton, vshankar, khiremat, mchangir, pdonnell, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

This will help print the client's global_id in debug logs.

URL: https://tracker.ceph.com/issues/61590
Cc: Patrick Donnelly <pdonnell@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
---
 include/linux/ceph/ceph_debug.h | 38 ++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/include/linux/ceph/ceph_debug.h b/include/linux/ceph/ceph_debug.h
index d5a5da838caf..41bfbdb5dd85 100644
--- a/include/linux/ceph/ceph_debug.h
+++ b/include/linux/ceph/ceph_debug.h
@@ -19,12 +19,22 @@
 	pr_debug("%.*s %12.12s:%-4d : " fmt,				\
 		 8 - (int)sizeof(KBUILD_MODNAME), "    ",		\
 		 kbasename(__FILE__), __LINE__, ##__VA_ARGS__)
+#  define dout_client(client, fmt, ...)					\
+	pr_debug("%.*s %12.12s:%-4d : [client.%lld] " fmt,		\
+		 8 - (int)sizeof(KBUILD_MODNAME), "    ",		\
+		 kbasename(__FILE__), __LINE__,				\
+		 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 dout_client(client, fmt, ...)	do {			\
+		if (0)						\
+			printk(KERN_DEBUG fmt, ##__VA_ARGS__);	\
+	} while (0)
 # endif
 
 #else
@@ -33,7 +43,33 @@
  * or, just wrap pr_debug
  */
 # define dout(fmt, ...)	pr_debug(" " fmt, ##__VA_ARGS__)
-
+# define dout_client(client, fmt, ...)					 \
+	pr_debug(" [client.%lld] " fmt,	client->monc.auth->global_id,	 \
+		 ##__VA_ARGS__)
 #endif
 
+# define pr_notice_client(client, fmt, ...)				 \
+	pr_notice(" [client.%lld] " fmt, client->monc.auth->global_id,	 \
+		##__VA_ARGS__)
+# define pr_info_client(client, fmt, ...)				 \
+	pr_info(" [client.%lld] " fmt, client->monc.auth->global_id,	 \
+		##__VA_ARGS__)
+# define pr_warn_client(client, fmt, ...)				 \
+	pr_warn(" [client.%lld] " fmt, client->monc.auth->global_id,	 \
+		##__VA_ARGS__)
+# define pr_warn_once_client(client, fmt, ...)				 \
+	pr_warn_once(" [client.%lld] " fmt, client->monc.auth->global_id,\
+		##__VA_ARGS__)
+# define pr_err_client(client, fmt, ...)				 \
+	pr_err(" [client.%lld] " fmt, client->monc.auth->global_id,	 \
+		##__VA_ARGS__)
+# define pr_warn_ratelimited_client(client, fmt, ...)			 \
+	pr_warn_ratelimited(" [client.%lld] " fmt,			 \
+			    client->monc.auth->global_id,		 \
+			    ##__VA_ARGS__)
+# define pr_err_ratelimited_client(client, fmt, ...)			 \
+	pr_err_ratelimited(" [client.%lld] " fmt,			 \
+			    client->monc.auth->global_id,		 \
+			    ##__VA_ARGS__)
+
 #endif
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 2/6] ceph: pass the mdsc to several helpers
  2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
  2023-06-12 11:43 ` [PATCH v2 1/6] ceph: add the *_client debug macros support xiubli
@ 2023-06-12 11:43 ` xiubli
  2023-06-12 11:43 ` [PATCH v2 3/6] ceph: rename _to_client() to _to_fs_client() xiubli
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 15+ messages in thread
From: xiubli @ 2023-06-12 11:43 UTC (permalink / raw)
  To: idryomov, ceph-devel
  Cc: jlayton, vshankar, khiremat, mchangir, pdonnell, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

We will use the 'mdsc' to get the global_id in the following commits.

URL: https://tracker.ceph.com/issues/61590
Cc: Patrick Donnelly <pdonnell@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
---
 fs/ceph/caps.c              | 15 +++++++++------
 fs/ceph/debugfs.c           |  4 ++--
 fs/ceph/dir.c               |  2 +-
 fs/ceph/file.c              |  2 +-
 fs/ceph/mds_client.c        | 37 +++++++++++++++++++++----------------
 fs/ceph/mds_client.h        |  3 ++-
 fs/ceph/mdsmap.c            |  3 ++-
 fs/ceph/snap.c              |  8 +++++---
 fs/ceph/super.h             |  3 ++-
 include/linux/ceph/mdsmap.h |  5 ++++-
 10 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 5498bc36c1e7..c6a65a961e2e 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -1178,7 +1178,8 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
 	}
 }
 
-void ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
+void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
+		     bool queue_release)
 {
 	struct ceph_inode_info *ci = cap->ci;
 	struct ceph_fs_client *fsc;
@@ -1341,6 +1342,8 @@ static void encode_cap_msg(struct ceph_msg *msg, struct cap_msg_args *arg)
  */
 void __ceph_remove_caps(struct ceph_inode_info *ci)
 {
+	struct inode *inode = &ci->netfs.inode;
+	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
 	struct rb_node *p;
 
 	/* lock i_ceph_lock, because ceph_d_revalidate(..., LOOKUP_RCU)
@@ -1350,7 +1353,7 @@ void __ceph_remove_caps(struct ceph_inode_info *ci)
 	while (p) {
 		struct ceph_cap *cap = rb_entry(p, struct ceph_cap, ci_node);
 		p = rb_next(p);
-		ceph_remove_cap(cap, true);
+		ceph_remove_cap(mdsc, cap, true);
 	}
 	spin_unlock(&ci->i_ceph_lock);
 }
@@ -3991,7 +3994,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
 		goto out_unlock;
 
 	if (target < 0) {
-		ceph_remove_cap(cap, false);
+		ceph_remove_cap(mdsc, cap, false);
 		goto out_unlock;
 	}
 
@@ -4026,7 +4029,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
 				change_auth_cap_ses(ci, tcap->session);
 			}
 		}
-		ceph_remove_cap(cap, false);
+		ceph_remove_cap(mdsc, cap, false);
 		goto out_unlock;
 	} else if (tsession) {
 		/* add placeholder for the export tagert */
@@ -4043,7 +4046,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
 			spin_unlock(&mdsc->cap_dirty_lock);
 		}
 
-		ceph_remove_cap(cap, false);
+		ceph_remove_cap(mdsc, cap, false);
 		goto out_unlock;
 	}
 
@@ -4156,7 +4159,7 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
 					ocap->mseq, mds, le32_to_cpu(ph->seq),
 					le32_to_cpu(ph->mseq));
 		}
-		ceph_remove_cap(ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE));
+		ceph_remove_cap(mdsc, ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE));
 	}
 
 	*old_issued = issued;
diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
index 3904333fa6c3..2f1e7498cd74 100644
--- a/fs/ceph/debugfs.c
+++ b/fs/ceph/debugfs.c
@@ -81,7 +81,7 @@ static int mdsc_show(struct seq_file *s, void *p)
 		if (req->r_inode) {
 			seq_printf(s, " #%llx", ceph_ino(req->r_inode));
 		} else if (req->r_dentry) {
-			path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
+			path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen,
 						    &pathbase, 0);
 			if (IS_ERR(path))
 				path = NULL;
@@ -100,7 +100,7 @@ static int mdsc_show(struct seq_file *s, void *p)
 		}
 
 		if (req->r_old_dentry) {
-			path = ceph_mdsc_build_path(req->r_old_dentry, &pathlen,
+			path = ceph_mdsc_build_path(mdsc, req->r_old_dentry, &pathlen,
 						    &pathbase, 0);
 			if (IS_ERR(path))
 				path = NULL;
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index 1b46f2b998c3..5fbcd0d5e5ec 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -1219,7 +1219,7 @@ static void ceph_async_unlink_cb(struct ceph_mds_client *mdsc,
 	if (result) {
 		int pathlen = 0;
 		u64 base = 0;
-		char *path = ceph_mdsc_build_path(dentry, &pathlen,
+		char *path = ceph_mdsc_build_path(mdsc, dentry, &pathlen,
 						  &base, 0);
 
 		/* mark error on parent + clear complete */
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index e878a462c7c3..04bc4cc8ad9b 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -574,7 +574,7 @@ static void ceph_async_create_cb(struct ceph_mds_client *mdsc,
 	if (result) {
 		int pathlen = 0;
 		u64 base = 0;
-		char *path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
+		char *path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen,
 						  &base, 0);
 
 		pr_warn("async create failure path=(%llx)%s result=%d!\n",
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 0a70a2438cb2..b9c7b6c60357 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -2125,6 +2125,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);
 	int *remaining = arg;
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	int used, wanted, oissued, mine;
@@ -2172,7 +2173,7 @@ static int trim_caps_cb(struct inode *inode, int mds, void *arg)
 
 	if (oissued) {
 		/* we aren't the only cap.. just remove us */
-		ceph_remove_cap(cap, true);
+		ceph_remove_cap(mdsc, cap, true);
 		(*remaining)--;
 	} else {
 		struct dentry *dentry;
@@ -2633,7 +2634,8 @@ static u8 *get_fscrypt_altname(const struct ceph_mds_request *req, u32 *plen)
  * Encode hidden .snap dirs as a double /, i.e.
  *   foo/.snap/bar -> foo//bar
  */
-char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *pbase, int for_wire)
+char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
+			   int *plen, u64 *pbase, int for_wire)
 {
 	struct dentry *cur;
 	struct inode *inode;
@@ -2748,9 +2750,9 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *pbase, int for
 	return path + pos;
 }
 
-static int build_dentry_path(struct dentry *dentry, struct inode *dir,
-			     const char **ppath, int *ppathlen, u64 *pino,
-			     bool *pfreepath, bool parent_locked)
+static int build_dentry_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
+			     struct inode *dir, const char **ppath, int *ppathlen,
+			     u64 *pino, bool *pfreepath, bool parent_locked)
 {
 	char *path;
 
@@ -2765,7 +2767,7 @@ static int build_dentry_path(struct dentry *dentry, struct inode *dir,
 		return 0;
 	}
 	rcu_read_unlock();
-	path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
+	path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1);
 	if (IS_ERR(path))
 		return PTR_ERR(path);
 	*ppath = path;
@@ -2777,6 +2779,7 @@ static int build_inode_path(struct inode *inode,
 			    const char **ppath, int *ppathlen, u64 *pino,
 			    bool *pfreepath)
 {
+	struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
 	struct dentry *dentry;
 	char *path;
 
@@ -2786,7 +2789,7 @@ static int build_inode_path(struct inode *inode,
 		return 0;
 	}
 	dentry = d_find_alias(inode);
-	path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
+	path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1);
 	dput(dentry);
 	if (IS_ERR(path))
 		return PTR_ERR(path);
@@ -2799,10 +2802,11 @@ static int build_inode_path(struct inode *inode,
  * request arguments may be specified via an inode *, a dentry *, or
  * an explicit ino+path.
  */
-static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry,
-				  struct inode *rdiri, const char *rpath,
-				  u64 rino, const char **ppath, int *pathlen,
-				  u64 *ino, bool *freepath, bool parent_locked)
+static int set_request_path_attr(struct ceph_mds_client *mdsc, struct inode *rinode,
+				 struct dentry *rdentry, struct inode *rdiri,
+				 const char *rpath, u64 rino, const char **ppath,
+				 int *pathlen, u64 *ino, bool *freepath,
+				 bool parent_locked)
 {
 	int r = 0;
 
@@ -2811,7 +2815,7 @@ static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry,
 		dout(" inode %p %llx.%llx\n", rinode, ceph_ino(rinode),
 		     ceph_snap(rinode));
 	} else if (rdentry) {
-		r = build_dentry_path(rdentry, rdiri, ppath, pathlen, ino,
+		r = build_dentry_path(mdsc, rdentry, rdiri, ppath, pathlen, ino,
 					freepath, parent_locked);
 		dout(" dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen,
 		     *ppath);
@@ -2883,7 +2887,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
 	int ret;
 	bool legacy = !(session->s_con.peer_features & CEPH_FEATURE_FS_BTIME);
 
-	ret = set_request_path_attr(req->r_inode, req->r_dentry,
+	ret = set_request_path_attr(mdsc, req->r_inode, req->r_dentry,
 			      req->r_parent, req->r_path1, req->r_ino1.ino,
 			      &path1, &pathlen1, &ino1, &freepath1,
 			      test_bit(CEPH_MDS_R_PARENT_LOCKED,
@@ -2897,7 +2901,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
 	if (req->r_old_dentry &&
 	    !(req->r_old_dentry->d_flags & DCACHE_DISCONNECTED))
 		old_dentry = req->r_old_dentry;
-	ret = set_request_path_attr(NULL, old_dentry,
+	ret = set_request_path_attr(mdsc, NULL, old_dentry,
 			      req->r_old_dentry_dir,
 			      req->r_path2, req->r_ino2.ino,
 			      &path2, &pathlen2, &ino2, &freepath2, true);
@@ -4288,6 +4292,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);
 	union {
 		struct ceph_mds_cap_reconnect v2;
 		struct ceph_mds_cap_reconnect_v1 v1;
@@ -4305,7 +4310,7 @@ static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
 	dentry = d_find_primary(inode);
 	if (dentry) {
 		/* set pathbase to parent dir when msg_version >= 2 */
-		path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase,
+		path = ceph_mdsc_build_path(mdsc, dentry, &pathlen, &pathbase,
 					    recon_state->msg_version >= 2);
 		dput(dentry);
 		if (IS_ERR(path)) {
@@ -5660,7 +5665,7 @@ void ceph_mdsc_handle_mdsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
 		return;
 	}
 
-	newmap = ceph_mdsmap_decode(&p, end, ceph_msgr2(mdsc->fsc->client));
+	newmap = ceph_mdsmap_decode(mdsc, &p, end, ceph_msgr2(mdsc->fsc->client));
 	if (IS_ERR(newmap)) {
 		err = PTR_ERR(newmap);
 		goto bad_unlock;
diff --git a/fs/ceph/mds_client.h b/fs/ceph/mds_client.h
index 351d92f7fc4f..20bcf8d5322e 100644
--- a/fs/ceph/mds_client.h
+++ b/fs/ceph/mds_client.h
@@ -578,7 +578,8 @@ static inline void ceph_mdsc_free_path(char *path, int len)
 		__putname(path - (PATH_MAX - 1 - len));
 }
 
-extern char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
+extern char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc,
+				  struct dentry *dentry, int *plen, u64 *base,
 				  int stop_on_nosnap);
 
 extern void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry);
diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c
index 7dac21ee6ce7..6cbec7aed5a0 100644
--- a/fs/ceph/mdsmap.c
+++ b/fs/ceph/mdsmap.c
@@ -114,7 +114,8 @@ static int __decode_and_drop_compat_set(void **p, void* end)
  * Ignore any fields we don't care about (there are quite a few of
  * them).
  */
-struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2)
+struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
+				       void *end, bool msgr2)
 {
 	struct ceph_mdsmap *m;
 	const void *start = *p;
diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
index abd52f5b3b0a..5bd47829a005 100644
--- a/fs/ceph/snap.c
+++ b/fs/ceph/snap.c
@@ -451,7 +451,8 @@ static void rebuild_snap_realms(struct ceph_snap_realm *realm,
 			continue;
 		}
 
-		last = build_snap_context(_realm, &realm_queue, dirty_realms);
+		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");
 
@@ -709,7 +710,8 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
  * Queue cap_snaps for snap writeback for this realm and its children.
  * Called under snap_rwsem, so realm topology won't change.
  */
-static void queue_realm_cap_snaps(struct ceph_snap_realm *realm)
+static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc,
+				  struct ceph_snap_realm *realm)
 {
 	struct ceph_inode_info *ci;
 	struct inode *lastinode = NULL;
@@ -874,7 +876,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
 		realm = list_first_entry(&dirty_realms, struct ceph_snap_realm,
 					 dirty_item);
 		list_del_init(&realm->dirty_item);
-		queue_realm_cap_snaps(realm);
+		queue_realm_cap_snaps(mdsc, realm);
 	}
 
 	if (realm_ret)
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index 107a9d16a4e8..ab5c0c703eae 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -1223,7 +1223,8 @@ extern void ceph_add_cap(struct inode *inode,
 			 unsigned cap, unsigned seq, u64 realmino, int flags,
 			 struct ceph_cap **new_cap);
 extern void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release);
-extern void ceph_remove_cap(struct ceph_cap *cap, bool queue_release);
+extern void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
+			    bool queue_release);
 extern void __ceph_remove_caps(struct ceph_inode_info *ci);
 extern void ceph_put_cap(struct ceph_mds_client *mdsc,
 			 struct ceph_cap *cap);
diff --git a/include/linux/ceph/mdsmap.h b/include/linux/ceph/mdsmap.h
index 4c3e0648dc27..89f1931f1ba6 100644
--- a/include/linux/ceph/mdsmap.h
+++ b/include/linux/ceph/mdsmap.h
@@ -5,6 +5,8 @@
 #include <linux/bug.h>
 #include <linux/ceph/types.h>
 
+struct ceph_mds_client;
+
 /*
  * mds map - describe servers in the mds cluster.
  *
@@ -65,7 +67,8 @@ static inline bool ceph_mdsmap_is_laggy(struct ceph_mdsmap *m, int w)
 }
 
 extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m);
-struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2);
+struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
+				       void *end, bool msgr2);
 extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m);
 extern bool ceph_mdsmap_is_cluster_available(struct ceph_mdsmap *m);
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 3/6] ceph: rename _to_client() to _to_fs_client()
  2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
  2023-06-12 11:43 ` [PATCH v2 1/6] ceph: add the *_client debug macros support xiubli
  2023-06-12 11:43 ` [PATCH v2 2/6] ceph: pass the mdsc to several helpers xiubli
@ 2023-06-12 11:43 ` xiubli
  2023-06-12 11:43 ` [PATCH v2 4/6] ceph: move mdsmap.h to fs/ceph/ xiubli
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 15+ messages in thread
From: xiubli @ 2023-06-12 11:43 UTC (permalink / raw)
  To: idryomov, ceph-devel
  Cc: jlayton, vshankar, khiremat, mchangir, pdonnell, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

We need to covert the inode to ceph_client in the following commit,
and will add one new helper for that, here we rename the old helper
to _fs_client().

URL: https://tracker.ceph.com/issues/61590
Cc: Patrick Donnelly <pdonnell@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
---
 fs/ceph/addr.c       | 20 ++++++++++----------
 fs/ceph/cache.c      |  2 +-
 fs/ceph/caps.c       | 40 ++++++++++++++++++++--------------------
 fs/ceph/crypto.c     |  2 +-
 fs/ceph/dir.c        | 22 +++++++++++-----------
 fs/ceph/export.c     | 10 +++++-----
 fs/ceph/file.c       | 24 ++++++++++++------------
 fs/ceph/inode.c      | 14 +++++++-------
 fs/ceph/ioctl.c      |  8 ++++----
 fs/ceph/mds_client.c |  2 +-
 fs/ceph/snap.c       |  2 +-
 fs/ceph/super.c      | 22 +++++++++++-----------
 fs/ceph/super.h      | 10 +++++-----
 fs/ceph/xattr.c      | 12 ++++++------
 14 files changed, 95 insertions(+), 95 deletions(-)

diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index de9b82905f18..e62318b3e13d 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -229,7 +229,7 @@ static void ceph_netfs_expand_readahead(struct netfs_io_request *rreq)
 static bool ceph_netfs_clamp_length(struct netfs_io_subrequest *subreq)
 {
 	struct inode *inode = subreq->rreq->inode;
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	u64 objno, objoff;
 	u32 xlen;
@@ -244,7 +244,7 @@ static bool ceph_netfs_clamp_length(struct netfs_io_subrequest *subreq)
 static void finish_netfs_read(struct ceph_osd_request *req)
 {
 	struct inode *inode = req->r_inode;
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	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];
@@ -347,7 +347,7 @@ static void ceph_netfs_issue_read(struct netfs_io_subrequest *subreq)
 	struct netfs_io_request *rreq = subreq->rreq;
 	struct inode *inode = rreq->inode;
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_osd_request *req = NULL;
 	struct ceph_vino vino = ceph_vino(inode);
 	struct iov_iter iter;
@@ -655,7 +655,7 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
 	struct folio *folio = page_folio(page);
 	struct inode *inode = page->mapping->host;
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_snap_context *snapc, *oldest;
 	loff_t page_off = page_offset(page);
 	int err;
@@ -799,7 +799,7 @@ static int ceph_writepage(struct page *page, struct writeback_control *wbc)
 	ihold(inode);
 
 	if (wbc->sync_mode == WB_SYNC_NONE &&
-	    ceph_inode_to_client(inode)->write_congested)
+	    ceph_inode_to_fs_client(inode)->write_congested)
 		return AOP_WRITEPAGE_ACTIVATE;
 
 	wait_on_page_fscache(page);
@@ -832,7 +832,7 @@ static void writepages_finish(struct ceph_osd_request *req)
 	int rc = req->r_result;
 	struct ceph_snap_context *snapc = req->r_snapc;
 	struct address_space *mapping = inode->i_mapping;
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	unsigned int len = 0;
 	bool remove_page;
 
@@ -922,7 +922,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_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_vino vino = ceph_vino(inode);
 	pgoff_t index, start_index, end = -1;
 	struct ceph_snap_context *snapc = NULL, *last_snapc = NULL, *pgsnapc;
@@ -1819,7 +1819,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_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_osd_request *req = NULL;
 	struct ceph_cap_flush *prealloc_cf = NULL;
 	struct folio *folio = NULL;
@@ -1973,7 +1973,7 @@ enum {
 static int __ceph_pool_perm_get(struct ceph_inode_info *ci,
 				s64 pool, struct ceph_string *pool_ns)
 {
-	struct ceph_fs_client *fsc = ceph_inode_to_client(&ci->netfs.inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(&ci->netfs.inode);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct ceph_osd_request *rd_req = NULL, *wr_req = NULL;
 	struct rb_node **p, *parent;
@@ -2164,7 +2164,7 @@ int ceph_pool_perm_check(struct inode *inode, int need)
 		return 0;
 	}
 
-	if (ceph_test_mount_opt(ceph_inode_to_client(inode),
+	if (ceph_test_mount_opt(ceph_inode_to_fs_client(inode),
 				NOPOOLPERM))
 		return 0;
 
diff --git a/fs/ceph/cache.c b/fs/ceph/cache.c
index 177d8e8d73fe..fedb8108c9f5 100644
--- a/fs/ceph/cache.c
+++ b/fs/ceph/cache.c
@@ -15,7 +15,7 @@
 void ceph_fscache_register_inode_cookie(struct inode *inode)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 
 	/* No caching for filesystem? */
 	if (!fsc->fscache)
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index c6a65a961e2e..e19a0557dea4 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -635,7 +635,7 @@ void ceph_add_cap(struct inode *inode,
 		  unsigned seq, unsigned mseq, u64 realmino, int flags,
 		  struct ceph_cap **new_cap)
 {
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	struct ceph_cap *cap;
 	int mds = session->s_mds;
@@ -922,7 +922,7 @@ int __ceph_caps_issued_mask(struct ceph_inode_info *ci, int mask, int touch)
 int __ceph_caps_issued_mask_metric(struct ceph_inode_info *ci, int mask,
 				   int touch)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb);
 	int r;
 
 	r = __ceph_caps_issued_mask(ci, mask, touch);
@@ -996,7 +996,7 @@ int __ceph_caps_file_wanted(struct ceph_inode_info *ci)
 	const int WR_SHIFT = ffs(CEPH_FILE_MODE_WR);
 	const int LAZY_SHIFT = ffs(CEPH_FILE_MODE_LAZY);
 	struct ceph_mount_options *opt =
-		ceph_inode_to_client(&ci->netfs.inode)->mount_options;
+		ceph_inode_to_fs_client(&ci->netfs.inode)->mount_options;
 	unsigned long used_cutoff = jiffies - opt->caps_wanted_delay_max * HZ;
 	unsigned long idle_cutoff = jiffies - opt->caps_wanted_delay_min * HZ;
 
@@ -1121,7 +1121,7 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
 
 	dout("__ceph_remove_cap %p from %p\n", cap, &ci->netfs.inode);
 
-	mdsc = ceph_inode_to_client(&ci->netfs.inode)->mdsc;
+	mdsc = ceph_inode_to_fs_client(&ci->netfs.inode)->mdsc;
 
 	/* remove from inode's cap rbtree, and clear auth cap */
 	rb_erase(&cap->ci_node, &ci->i_caps);
@@ -1192,7 +1192,7 @@ void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
 
 	lockdep_assert_held(&ci->i_ceph_lock);
 
-	fsc = ceph_inode_to_client(&ci->netfs.inode);
+	fsc = ceph_inode_to_fs_client(&ci->netfs.inode);
 	WARN_ON_ONCE(ci->i_auth_cap == cap &&
 		     !list_empty(&ci->i_dirty_item) &&
 		     !fsc->blocklisted &&
@@ -1343,7 +1343,7 @@ static void encode_cap_msg(struct ceph_msg *msg, struct cap_msg_args *arg)
 void __ceph_remove_caps(struct ceph_inode_info *ci)
 {
 	struct inode *inode = &ci->netfs.inode;
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	struct rb_node *p;
 
 	/* lock i_ceph_lock, because ceph_d_revalidate(..., LOOKUP_RCU)
@@ -1685,7 +1685,7 @@ void ceph_flush_snaps(struct ceph_inode_info *ci,
 		      struct ceph_mds_session **psession)
 {
 	struct inode *inode = &ci->netfs.inode;
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	struct ceph_mds_session *session = NULL;
 	bool need_put = false;
 	int mds;
@@ -1750,7 +1750,7 @@ int __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask,
 			   struct ceph_cap_flush **pcf)
 {
 	struct ceph_mds_client *mdsc =
-		ceph_sb_to_client(ci->netfs.inode.i_sb)->mdsc;
+		ceph_sb_to_fs_client(ci->netfs.inode.i_sb)->mdsc;
 	struct inode *inode = &ci->netfs.inode;
 	int was = ci->i_dirty_caps;
 	int dirty = 0;
@@ -1873,7 +1873,7 @@ static u64 __mark_caps_flushing(struct inode *inode,
 				struct ceph_mds_session *session, bool wake,
 				u64 *oldest_flush_tid)
 {
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	struct ceph_cap_flush *cf = NULL;
 	int flushing;
@@ -2233,7 +2233,7 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags)
  */
 static int try_flush_caps(struct inode *inode, u64 *ptid)
 {
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	int flushing = 0;
 	u64 flush_tid = 0, oldest_flush_tid = 0;
@@ -2311,7 +2311,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_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	struct ceph_mds_request *req1 = NULL, *req2 = NULL;
 	int ret, err = 0;
@@ -2494,7 +2494,7 @@ int ceph_write_inode(struct inode *inode, struct writeback_control *wbc)
 				       caps_are_flushed(inode, flush_tid));
 	} else {
 		struct ceph_mds_client *mdsc =
-			ceph_sb_to_client(inode->i_sb)->mdsc;
+			ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 
 		spin_lock(&ci->i_ceph_lock);
 		if (__ceph_caps_dirty(ci))
@@ -2747,7 +2747,7 @@ static int try_get_cap_refs(struct inode *inode, int need, int want,
 			    loff_t endoff, int flags, int *got)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	int ret = 0;
 	int have, implemented;
 	bool snap_rwsem_locked = false;
@@ -2965,7 +2965,7 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need,
 		    int want, loff_t endoff, int *got)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	int ret, _got, flags;
 
 	ret = ceph_pool_perm_check(inode, need);
@@ -3717,7 +3717,7 @@ static void handle_cap_flush_ack(struct inode *inode, u64 flush_tid,
 	__releases(ci->i_ceph_lock)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_cap_flush *cf, *tmp_cf;
 	LIST_HEAD(to_remove);
 	unsigned seq = le32_to_cpu(m->seq);
@@ -3827,7 +3827,7 @@ void __ceph_remove_capsnap(struct inode *inode, struct ceph_cap_snap *capsnap,
 			   bool *wake_ci, bool *wake_mdsc)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	bool ret;
 
 	lockdep_assert_held(&ci->i_ceph_lock);
@@ -3871,7 +3871,7 @@ static void handle_cap_flushsnap_ack(struct inode *inode, u64 flush_tid,
 				     struct ceph_mds_session *session)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	u64 follows = le64_to_cpu(m->snap_follows);
 	struct ceph_cap_snap *capsnap = NULL, *iter;
 	bool wake_ci = false;
@@ -3964,7 +3964,7 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex,
 			      struct ceph_mds_cap_peer *ph,
 			      struct ceph_mds_session *session)
 {
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	struct ceph_mds_session *tsession = NULL;
 	struct ceph_cap *cap, *tcap, *new_cap = NULL;
 	struct ceph_inode_info *ci = ceph_inode(inode);
@@ -4654,7 +4654,7 @@ int ceph_drop_caps_for_unlink(struct inode *inode)
 
 		if (__ceph_caps_dirty(ci)) {
 			struct ceph_mds_client *mdsc =
-				ceph_inode_to_client(inode)->mdsc;
+				ceph_inode_to_fs_client(inode)->mdsc;
 			__cap_delay_requeue_front(mdsc, ci);
 		}
 	}
@@ -4837,7 +4837,7 @@ static int remove_capsnaps(struct ceph_mds_client *mdsc, struct inode *inode)
 
 int ceph_purge_inode_cap(struct inode *inode, struct ceph_cap *cap, bool *invalidate)
 {
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	bool is_auth;
diff --git a/fs/ceph/crypto.c b/fs/ceph/crypto.c
index e72bab29d5e1..4b0e9c3a53c8 100644
--- a/fs/ceph/crypto.c
+++ b/fs/ceph/crypto.c
@@ -128,7 +128,7 @@ static bool ceph_crypt_empty_dir(struct inode *inode)
 
 static const union fscrypt_policy *ceph_get_dummy_policy(struct super_block *sb)
 {
-	return ceph_sb_to_client(sb)->fsc_dummy_enc_policy.policy;
+	return ceph_sb_to_fs_client(sb)->fsc_dummy_enc_policy.policy;
 }
 
 static struct fscrypt_operations ceph_fscrypt_ops = {
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index 5fbcd0d5e5ec..69906b721992 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -310,7 +310,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx)
 	struct ceph_dir_file_info *dfi = file->private_data;
 	struct inode *inode = file_inode(file);
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	int i;
 	int err;
@@ -702,7 +702,7 @@ static loff_t ceph_dir_llseek(struct file *file, loff_t offset, int whence)
 struct dentry *ceph_handle_snapdir(struct ceph_mds_request *req,
 				   struct dentry *dentry)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
 	struct inode *parent = d_inode(dentry->d_parent); /* we hold i_rwsem */
 
 	/* .snap dir? */
@@ -770,7 +770,7 @@ static bool is_root_ceph_dentry(struct inode *inode, struct dentry *dentry)
 static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
 				  unsigned int flags)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb);
+	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_mds_request *req;
 	int op;
@@ -1192,7 +1192,7 @@ static void ceph_async_unlink_cb(struct ceph_mds_client *mdsc,
 				 struct ceph_mds_request *req)
 {
 	struct dentry *dentry = req->r_dentry;
-	struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
 	struct ceph_dentry_info *di = ceph_dentry(dentry);
 	int result = req->r_err ? req->r_err :
 			le32_to_cpu(req->r_reply_info.head->result);
@@ -1283,7 +1283,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_client(dir->i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct inode *inode = d_inode(dentry);
 	struct ceph_mds_request *req;
@@ -1461,7 +1461,7 @@ void __ceph_dentry_lease_touch(struct ceph_dentry_info *di)
 		return;
 	}
 
-	mdsc = ceph_sb_to_client(dn->d_sb)->mdsc;
+	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);
@@ -1508,7 +1508,7 @@ void __ceph_dentry_dir_lease_touch(struct ceph_dentry_info *di)
 		return;
 	}
 
-	mdsc = ceph_sb_to_client(dn->d_sb)->mdsc;
+	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);
@@ -1522,7 +1522,7 @@ static void __dentry_lease_unlist(struct ceph_dentry_info *di)
 	if (list_empty(&di->lease_list))
 		return;
 
-	mdsc = ceph_sb_to_client(di->dentry->d_sb)->mdsc;
+	mdsc = ceph_sb_to_fs_client(di->dentry->d_sb)->mdsc;
 	spin_lock(&mdsc->dentry_list_lock);
 	list_del_init(&di->lease_list);
 	spin_unlock(&mdsc->dentry_list_lock);
@@ -1879,7 +1879,7 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
 	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));
 
-	mdsc = ceph_sb_to_client(dir->i_sb)->mdsc;
+	mdsc = ceph_sb_to_fs_client(dir->i_sb)->mdsc;
 
 	/* always trust cached snapped dentries, snapdir dentry */
 	if (ceph_snap(dir) != CEPH_NOSNAP) {
@@ -1986,7 +1986,7 @@ static int ceph_d_delete(const struct dentry *dentry)
 static void ceph_d_release(struct dentry *dentry)
 {
 	struct ceph_dentry_info *di = ceph_dentry(dentry);
-	struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
 
 	dout("d_release %p\n", dentry);
 
@@ -2055,7 +2055,7 @@ static ssize_t ceph_read_dir(struct file *file, char __user *buf, size_t size,
 	int left;
 	const int bufsize = 1024;
 
-	if (!ceph_test_mount_opt(ceph_sb_to_client(inode->i_sb), DIRSTAT))
+	if (!ceph_test_mount_opt(ceph_sb_to_fs_client(inode->i_sb), DIRSTAT))
 		return -EISDIR;
 
 	if (!dfi->dir_info) {
diff --git a/fs/ceph/export.c b/fs/ceph/export.c
index 8559990a59a5..52c4daf2447d 100644
--- a/fs/ceph/export.c
+++ b/fs/ceph/export.c
@@ -123,7 +123,7 @@ static int ceph_encode_fh(struct inode *inode, u32 *rawfh, int *max_len,
 
 static struct inode *__lookup_inode(struct super_block *sb, u64 ino)
 {
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc;
 	struct inode *inode;
 	struct ceph_vino vino;
 	int err;
@@ -205,7 +205,7 @@ static struct dentry *__snapfh_to_dentry(struct super_block *sb,
 					  struct ceph_nfs_snapfh *sfh,
 					  bool want_parent)
 {
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc;
 	struct ceph_mds_request *req;
 	struct inode *inode;
 	struct ceph_vino vino;
@@ -317,7 +317,7 @@ static struct dentry *ceph_fh_to_dentry(struct super_block *sb,
 static struct dentry *__get_parent(struct super_block *sb,
 				   struct dentry *child, u64 ino)
 {
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc;
 	struct ceph_mds_request *req;
 	struct inode *inode;
 	int mask;
@@ -439,7 +439,7 @@ static int __get_snap_name(struct dentry *parent, char *name,
 {
 	struct inode *inode = d_inode(child);
 	struct inode *dir = d_inode(parent);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_mds_request *req = NULL;
 	char *last_name = NULL;
 	unsigned next_offset = 2;
@@ -544,7 +544,7 @@ static int ceph_get_name(struct dentry *parent, char *name,
 	if (ceph_snap(inode) != CEPH_NOSNAP)
 		return __get_snap_name(parent, name, child);
 
-	mdsc = ceph_inode_to_client(inode)->mdsc;
+	mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LOOKUPNAME,
 				       USE_ANY_MDS);
 	if (IS_ERR(req))
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 04bc4cc8ad9b..344f0b6260bd 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -200,7 +200,7 @@ 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_client(&ci->netfs.inode)->mount_options;
+		ceph_inode_to_fs_client(&ci->netfs.inode)->mount_options;
 	struct ceph_file_info *fi;
 	int ret;
 
@@ -234,7 +234,7 @@ static int ceph_init_file_info(struct inode *inode, struct file *file,
 
 	spin_lock_init(&fi->rw_contexts_lock);
 	INIT_LIST_HEAD(&fi->rw_contexts);
-	fi->filp_gen = READ_ONCE(ceph_inode_to_client(inode)->filp_gen);
+	fi->filp_gen = READ_ONCE(ceph_inode_to_fs_client(inode)->filp_gen);
 
 	if ((file->f_mode & FMODE_WRITE) && ceph_has_inline_data(ci)) {
 		ret = ceph_uninline_data(file);
@@ -352,7 +352,7 @@ int ceph_renew_caps(struct inode *inode, int fmode)
 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_client(inode->i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct ceph_mds_request *req;
 	struct ceph_file_info *fi = file->private_data;
@@ -730,7 +730,7 @@ static int ceph_finish_async_create(struct inode *dir, struct inode *inode,
 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_client(dir->i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct ceph_mds_request *req;
 	struct inode *new_inode = NULL;
@@ -959,7 +959,7 @@ ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
 			 u64 *last_objver)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_osd_client *osdc = &fsc->client->osdc;
 	ssize_t ret;
 	u64 off = *ki_pos;
@@ -1252,7 +1252,7 @@ static void ceph_aio_complete_req(struct ceph_osd_request *req)
 		if (aio_work) {
 			INIT_WORK(&aio_work->work, ceph_aio_retry_work);
 			aio_work->req = req;
-			queue_work(ceph_inode_to_client(inode)->inode_wq,
+			queue_work(ceph_inode_to_fs_client(inode)->inode_wq,
 				   &aio_work->work);
 			return;
 		}
@@ -1382,7 +1382,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
 	struct file *file = iocb->ki_filp;
 	struct inode *inode = file_inode(file);
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_client_metric *metric = &fsc->mdsc->metric;
 	struct ceph_vino vino;
 	struct ceph_osd_request *req;
@@ -1606,7 +1606,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
 	struct file *file = iocb->ki_filp;
 	struct inode *inode = file_inode(file);
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_osd_client *osdc = &fsc->client->osdc;
 	struct ceph_osd_request *req;
 	struct page **pages;
@@ -2159,7 +2159,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	struct ceph_file_info *fi = file->private_data;
 	struct inode *inode = file_inode(file);
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_osd_client *osdc = &fsc->client->osdc;
 	struct ceph_cap_flush *prealloc_cf;
 	ssize_t count, written = 0;
@@ -2399,7 +2399,7 @@ static int ceph_zero_partial_object(struct inode *inode,
 				    loff_t offset, loff_t *length)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_osd_request *req;
 	int ret = 0;
 	loff_t zero = 0;
@@ -2782,7 +2782,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
 	struct ceph_inode_info *src_ci = ceph_inode(src_inode);
 	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_client(src_inode);
+	struct ceph_fs_client *src_fsc = ceph_inode_to_fs_client(src_inode);
 	loff_t size;
 	ssize_t ret = -EIO, bytes;
 	u64 src_objnum, dst_objnum, src_objoff, dst_objoff;
@@ -2790,7 +2790,7 @@ static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
 	int src_got = 0, dst_got = 0, err, dirty;
 
 	if (src_inode->i_sb != dst_inode->i_sb) {
-		struct ceph_fs_client *dst_fsc = ceph_inode_to_client(dst_inode);
+		struct ceph_fs_client *dst_fsc = ceph_inode_to_fs_client(dst_inode);
 
 		if (ceph_fsid_compare(&src_fsc->client->fsid,
 				      &dst_fsc->client->fsid)) {
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index fe8adb9d67a6..c283ea632c51 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -1497,7 +1497,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req)
 	struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
 	struct inode *in = NULL;
 	struct ceph_vino tvino, dvino;
-	struct ceph_fs_client *fsc = ceph_sb_to_client(sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
 	int err = 0;
 
 	dout("fill_trace %p is_dentry %d is_target %d\n", req,
@@ -2087,7 +2087,7 @@ 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_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	set_bit(work_bit, &ci->i_work_mask);
 
@@ -2429,7 +2429,7 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr, struct ceph_iattr *c
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	unsigned int ia_valid = attr->ia_valid;
 	struct ceph_mds_request *req;
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_cap_flush *prealloc_cf;
 	loff_t isize = i_size_read(inode);
 	int issued;
@@ -2741,7 +2741,7 @@ int ceph_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
 		 struct iattr *attr)
 {
 	struct inode *inode = d_inode(dentry);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	int err;
 
 	if (ceph_snap(inode) != CEPH_NOSNAP)
@@ -2811,7 +2811,7 @@ int ceph_try_to_choose_auth_mds(struct inode *inode, int mask)
 int __ceph_do_getattr(struct inode *inode, struct page *locked_page,
 		      int mask, bool force)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct ceph_mds_request *req;
 	int mode;
@@ -2857,7 +2857,7 @@ int __ceph_do_getattr(struct inode *inode, struct page *locked_page,
 int ceph_do_getvxattr(struct inode *inode, const char *name, void *value,
 		      size_t size)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	struct ceph_mds_request *req;
 	int mode = USE_AUTH_MDS;
@@ -3002,7 +3002,7 @@ int ceph_getattr(struct mnt_idmap *idmap, const struct path *path,
 		stat->dev = ci->i_snapid_map ? ci->i_snapid_map->dev : 0;
 
 	if (S_ISDIR(inode->i_mode)) {
-		if (ceph_test_mount_opt(ceph_sb_to_client(sb), RBYTES)) {
+		if (ceph_test_mount_opt(ceph_sb_to_fs_client(sb), RBYTES)) {
 			stat->size = ci->i_rbytes;
 		} else if (ceph_snap(inode) == CEPH_SNAPDIR) {
 			struct ceph_inode_info *pci;
diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c
index 679402bd80ba..64d8e34d9f7e 100644
--- a/fs/ceph/ioctl.c
+++ b/fs/ceph/ioctl.c
@@ -65,7 +65,7 @@ static long __validate_layout(struct ceph_mds_client *mdsc,
 static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
 {
 	struct inode *inode = file_inode(file);
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_mds_request *req;
 	struct ceph_ioctl_layout l;
 	struct ceph_inode_info *ci = ceph_inode(file_inode(file));
@@ -140,7 +140,7 @@ static long ceph_ioctl_set_layout_policy (struct file *file, void __user *arg)
 	struct ceph_mds_request *req;
 	struct ceph_ioctl_layout l;
 	int err;
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 
 	/* copy and validate */
 	if (copy_from_user(&l, arg, sizeof(l)))
@@ -183,7 +183,7 @@ static long ceph_ioctl_get_dataloc(struct file *file, void __user *arg)
 	struct inode *inode = file_inode(file);
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	struct ceph_osd_client *osdc =
-		&ceph_sb_to_client(inode->i_sb)->client->osdc;
+		&ceph_sb_to_fs_client(inode->i_sb)->client->osdc;
 	struct ceph_object_locator oloc;
 	CEPH_DEFINE_OID_ONSTACK(oid);
 	u32 xlen;
@@ -244,7 +244,7 @@ static long ceph_ioctl_lazyio(struct file *file)
 	struct ceph_file_info *fi = file->private_data;
 	struct inode *inode = file_inode(file);
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 
 	if ((fi->fmode & CEPH_FILE_MODE_LAZY) == 0) {
 		spin_lock(&ci->i_ceph_lock);
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index b9c7b6c60357..a730bd98a4d2 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -829,7 +829,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_client(dentry->d_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb);
 	struct dentry *pdentry = dentry->d_parent;
 	struct dentry *udentry, *found = NULL;
 	struct ceph_dentry_info *di;
diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
index 5bd47829a005..09939ec0d1ee 100644
--- a/fs/ceph/snap.c
+++ b/fs/ceph/snap.c
@@ -963,7 +963,7 @@ static void flush_snaps(struct ceph_mds_client *mdsc)
 void ceph_change_snap_realm(struct inode *inode, struct ceph_snap_realm *realm)
 {
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
 	struct ceph_snap_realm *oldrealm = ci->i_snap_realm;
 
 	lockdep_assert_held(&ci->i_ceph_lock);
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index 070b3150d267..e0c9ed100767 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -44,7 +44,7 @@ static LIST_HEAD(ceph_fsc_list);
  */
 static void ceph_put_super(struct super_block *s)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(s);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(s);
 
 	dout("put_super\n");
 	ceph_fscrypt_free_dummy_policy(fsc);
@@ -53,7 +53,7 @@ static void ceph_put_super(struct super_block *s)
 
 static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
 {
-	struct ceph_fs_client *fsc = ceph_inode_to_client(d_inode(dentry));
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(d_inode(dentry));
 	struct ceph_mon_client *monc = &fsc->client->monc;
 	struct ceph_statfs st;
 	int i, err;
@@ -118,7 +118,7 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
 
 static int ceph_sync_fs(struct super_block *sb, int wait)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
 
 	if (!wait) {
 		dout("sync_fs (non-blocking)\n");
@@ -695,7 +695,7 @@ static int compare_mount_options(struct ceph_mount_options *new_fsopt,
  */
 static int ceph_show_options(struct seq_file *m, struct dentry *root)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(root->d_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(root->d_sb);
 	struct ceph_mount_options *fsopt = fsc->mount_options;
 	size_t pos;
 	int ret;
@@ -1026,7 +1026,7 @@ static void __ceph_umount_begin(struct ceph_fs_client *fsc)
  */
 void ceph_umount_begin(struct super_block *sb)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
 
 	dout("ceph_umount_begin - starting forced umount\n");
 	if (!fsc)
@@ -1236,7 +1236,7 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
 	struct ceph_fs_client *new = fc->s_fs_info;
 	struct ceph_mount_options *fsopt = new->mount_options;
 	struct ceph_options *opt = new->client->options;
-	struct ceph_fs_client *fsc = ceph_sb_to_client(sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
 
 	dout("ceph_compare_super %p\n", sb);
 
@@ -1332,9 +1332,9 @@ static int ceph_get_tree(struct fs_context *fc)
 		goto out;
 	}
 
-	if (ceph_sb_to_client(sb) != fsc) {
+	if (ceph_sb_to_fs_client(sb) != fsc) {
 		destroy_fs_client(fsc);
-		fsc = ceph_sb_to_client(sb);
+		fsc = ceph_sb_to_fs_client(sb);
 		dout("get_sb got existing client %p\n", fsc);
 	} else {
 		dout("get_sb using new client %p\n", fsc);
@@ -1387,7 +1387,7 @@ static int ceph_reconfigure_fc(struct fs_context *fc)
 	struct ceph_parse_opts_ctx *pctx = fc->fs_private;
 	struct ceph_mount_options *fsopt = pctx->opts;
 	struct super_block *sb = fc->root->d_sb;
-	struct ceph_fs_client *fsc = ceph_sb_to_client(sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
 
 	err = ceph_apply_test_dummy_encryption(sb, fc, fsopt);
 	if (err)
@@ -1526,7 +1526,7 @@ 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_client(s);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(s);
 	struct ceph_mds_client *mdsc = fsc->mdsc;
 	bool wait;
 
@@ -1587,7 +1587,7 @@ MODULE_ALIAS_FS("ceph");
 
 int ceph_force_reconnect(struct super_block *sb)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb);
 	int err = 0;
 
 	fsc->mount_state = CEPH_MOUNT_RECOVER;
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index ab5c0c703eae..9655ea46e6ca 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -490,13 +490,13 @@ ceph_inode(const struct inode *inode)
 }
 
 static inline struct ceph_fs_client *
-ceph_inode_to_client(const struct inode *inode)
+ceph_inode_to_fs_client(const struct inode *inode)
 {
 	return (struct ceph_fs_client *)inode->i_sb->s_fs_info;
 }
 
 static inline struct ceph_fs_client *
-ceph_sb_to_client(const struct super_block *sb)
+ceph_sb_to_fs_client(const struct super_block *sb)
 {
 	return (struct ceph_fs_client *)sb->s_fs_info;
 }
@@ -504,7 +504,7 @@ ceph_sb_to_client(const struct super_block *sb)
 static inline struct ceph_mds_client *
 ceph_sb_to_mdsc(const struct super_block *sb)
 {
-	return (struct ceph_mds_client *)ceph_sb_to_client(sb)->mdsc;
+	return (struct ceph_mds_client *)ceph_sb_to_fs_client(sb)->mdsc;
 }
 
 static inline struct ceph_vino
@@ -560,7 +560,7 @@ static inline u64 ceph_snap(struct inode *inode)
  */
 static inline u64 ceph_present_ino(struct super_block *sb, u64 ino)
 {
-	if (unlikely(ceph_test_mount_opt(ceph_sb_to_client(sb), INO32)))
+	if (unlikely(ceph_test_mount_opt(ceph_sb_to_fs_client(sb), INO32)))
 		return ceph_ino_to_ino32(ino);
 	return ino;
 }
@@ -1106,7 +1106,7 @@ void ceph_inode_shutdown(struct inode *inode);
 static inline bool ceph_inode_is_shutdown(struct inode *inode)
 {
 	unsigned long flags = READ_ONCE(ceph_inode(inode)->i_ceph_flags);
-	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
+	struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
 	int state = READ_ONCE(fsc->mount_state);
 
 	return (flags & CEPH_I_SHUTDOWN) || state >= CEPH_MOUNT_SHUTDOWN;
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index 76680e5c2f82..e30ae1032e13 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -57,7 +57,7 @@ static bool ceph_vxattrcb_layout_exists(struct ceph_inode_info *ci)
 static ssize_t ceph_vxattrcb_layout(struct ceph_inode_info *ci, char *val,
 				    size_t size)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb);
 	struct ceph_osd_client *osdc = &fsc->client->osdc;
 	struct ceph_string *pool_ns;
 	s64 pool = ci->i_layout.pool_id;
@@ -161,7 +161,7 @@ static ssize_t ceph_vxattrcb_layout_pool(struct ceph_inode_info *ci,
 					 char *val, size_t size)
 {
 	ssize_t ret;
-	struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb);
 	struct ceph_osd_client *osdc = &fsc->client->osdc;
 	s64 pool = ci->i_layout.pool_id;
 	const char *pool_name;
@@ -313,7 +313,7 @@ static ssize_t ceph_vxattrcb_snap_btime(struct ceph_inode_info *ci, char *val,
 static ssize_t ceph_vxattrcb_cluster_fsid(struct ceph_inode_info *ci,
 					  char *val, size_t size)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb);
 
 	return ceph_fmt_xattr(val, size, "%pU", &fsc->client->fsid);
 }
@@ -321,7 +321,7 @@ static ssize_t ceph_vxattrcb_cluster_fsid(struct ceph_inode_info *ci,
 static ssize_t ceph_vxattrcb_client_id(struct ceph_inode_info *ci,
 				       char *val, size_t size)
 {
-	struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb);
 
 	return ceph_fmt_xattr(val, size, "client%lld",
 			      ceph_client_gid(fsc->client));
@@ -1093,7 +1093,7 @@ ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
 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_client(inode->i_sb);
+	struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb);
 	struct ceph_inode_info *ci = ceph_inode(inode);
 	struct ceph_mds_request *req;
 	struct ceph_mds_client *mdsc = fsc->mdsc;
@@ -1163,7 +1163,7 @@ int __ceph_setxattr(struct inode *inode, const char *name,
 {
 	struct ceph_vxattr *vxattr;
 	struct ceph_inode_info *ci = ceph_inode(inode);
-	struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
+	struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc;
 	struct ceph_cap_flush *prealloc_cf = NULL;
 	struct ceph_buffer *old_blob = NULL;
 	int issued;
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 4/6] ceph: move mdsmap.h to fs/ceph/
  2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
                   ` (2 preceding siblings ...)
  2023-06-12 11:43 ` [PATCH v2 3/6] ceph: rename _to_client() to _to_fs_client() xiubli
@ 2023-06-12 11:43 ` xiubli
  2023-06-12 11:43 ` [PATCH v2 5/6] ceph: add ceph_inode_to_client() helper support xiubli
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 15+ messages in thread
From: xiubli @ 2023-06-12 11:43 UTC (permalink / raw)
  To: idryomov, ceph-devel
  Cc: jlayton, vshankar, khiremat, mchangir, pdonnell, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

The mdsmap.h is only used by the kcephfs and move it to fs/ceph/

URL: https://tracker.ceph.com/issues/61590
Cc: Patrick Donnelly <pdonnell@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
---
 fs/ceph/mds_client.h                | 2 +-
 fs/ceph/mdsmap.c                    | 2 +-
 {include/linux => fs}/ceph/mdsmap.h | 0
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename {include/linux => fs}/ceph/mdsmap.h (100%)

diff --git a/fs/ceph/mds_client.h b/fs/ceph/mds_client.h
index 20bcf8d5322e..5d02c8c582fd 100644
--- a/fs/ceph/mds_client.h
+++ b/fs/ceph/mds_client.h
@@ -14,9 +14,9 @@
 
 #include <linux/ceph/types.h>
 #include <linux/ceph/messenger.h>
-#include <linux/ceph/mdsmap.h>
 #include <linux/ceph/auth.h>
 
+#include "mdsmap.h"
 #include "metric.h"
 #include "super.h"
 
diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c
index 6cbec7aed5a0..d1bc81eecc18 100644
--- a/fs/ceph/mdsmap.c
+++ b/fs/ceph/mdsmap.c
@@ -7,11 +7,11 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 
-#include <linux/ceph/mdsmap.h>
 #include <linux/ceph/messenger.h>
 #include <linux/ceph/decode.h>
 
 #include "super.h"
+#include "mdsmap.h"
 
 #define CEPH_MDS_IS_READY(i, ignore_laggy) \
 	(m->m_info[i].state > 0 && ignore_laggy ? true : !m->m_info[i].laggy)
diff --git a/include/linux/ceph/mdsmap.h b/fs/ceph/mdsmap.h
similarity index 100%
rename from include/linux/ceph/mdsmap.h
rename to fs/ceph/mdsmap.h
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 5/6] ceph: add ceph_inode_to_client() helper support
  2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
                   ` (3 preceding siblings ...)
  2023-06-12 11:43 ` [PATCH v2 4/6] ceph: move mdsmap.h to fs/ceph/ xiubli
@ 2023-06-12 11:43 ` xiubli
  2023-06-12 15:25 ` [PATCH v2 0/6] ceph: print the client global id for debug logs Patrick Donnelly
       [not found] ` <20230612114359.220895-7-xiubli@redhat.com>
  6 siblings, 0 replies; 15+ messages in thread
From: xiubli @ 2023-06-12 11:43 UTC (permalink / raw)
  To: idryomov, ceph-devel
  Cc: jlayton, vshankar, khiremat, mchangir, pdonnell, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

This will covert the inode to ceph_client.

URL: https://tracker.ceph.com/issues/61590
Cc: Patrick Donnelly <pdonnell@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
---
 fs/ceph/snap.c  | 8 +++++---
 fs/ceph/super.h | 6 ++++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
index 09939ec0d1ee..9dde4b5f513d 100644
--- a/fs/ceph/snap.c
+++ b/fs/ceph/snap.c
@@ -329,7 +329,8 @@ static int cmpu64_rev(const void *a, const void *b)
 /*
  * build the snap context for a given realm.
  */
-static int build_snap_context(struct ceph_snap_realm *realm,
+static int build_snap_context(struct ceph_mds_client *mdsc,
+			      struct ceph_snap_realm *realm,
 			      struct list_head *realm_queue,
 			      struct list_head *dirty_realms)
 {
@@ -425,7 +426,8 @@ static int build_snap_context(struct ceph_snap_realm *realm,
 /*
  * rebuild snap context for the given realm and all of its children.
  */
-static void rebuild_snap_realms(struct ceph_snap_realm *realm,
+static void rebuild_snap_realms(struct ceph_mds_client *mdsc,
+				struct ceph_snap_realm *realm,
 				struct list_head *dirty_realms)
 {
 	LIST_HEAD(realm_queue);
@@ -858,7 +860,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
 
 	/* rebuild_snapcs when we reach the _end_ (root) of the trace */
 	if (realm_to_rebuild && p >= e)
-		rebuild_snap_realms(realm_to_rebuild, &dirty_realms);
+		rebuild_snap_realms(mdsc, realm_to_rebuild, &dirty_realms);
 
 	if (!first_realm)
 		first_realm = realm;
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index 9655ea46e6ca..4e78de1be23e 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -507,6 +507,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)
 {
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 0/6] ceph: print the client global id for debug logs
  2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
                   ` (4 preceding siblings ...)
  2023-06-12 11:43 ` [PATCH v2 5/6] ceph: add ceph_inode_to_client() helper support xiubli
@ 2023-06-12 15:25 ` Patrick Donnelly
       [not found] ` <20230612114359.220895-7-xiubli@redhat.com>
  6 siblings, 0 replies; 15+ messages in thread
From: Patrick Donnelly @ 2023-06-12 15:25 UTC (permalink / raw)
  To: xiubli; +Cc: idryomov, ceph-devel, jlayton, vshankar, khiremat, mchangir

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/6] ceph: add the *_client debug macros support
  2023-06-12 11:43 ` [PATCH v2 1/6] ceph: add the *_client debug macros support xiubli
@ 2023-06-13  8:39   ` Ilya Dryomov
  2023-06-13  9:27     ` Xiubo Li
  0 siblings, 1 reply; 15+ messages in thread
From: Ilya Dryomov @ 2023-06-13  8:39 UTC (permalink / raw)
  To: xiubli; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell

On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
>
> From: Xiubo Li <xiubli@redhat.com>
>
> This will help print the client's global_id in debug logs.

Hi Xiubo,

There is a related concern that clients can belong to different
clusters, in which case their global IDs might clash.  If you chose
to disregard that as an unlikely scenario, it's probably fine, but
it would be nice to make that explicit in the commit message.

If account for that, the identifier block could look like:

  [<cluster fsid> <gid>]

instead of:

  [client.<gid>]

The "client." string prefix seems a bit redundant since the kernel
client's entity is always CEPH_ENTITY_TYPE_CLIENT.  If you like it
anyway, I would at least get rid of the dot at the end to align with
how it's presented elsewhere (e.g. debugfs directory name or
"ceph.client_id" xattr).

Thanks,

                Ilya

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 6/6] ceph: print the client global_id in all the debug logs
       [not found] ` <20230612114359.220895-7-xiubli@redhat.com>
@ 2023-06-13  9:07   ` Ilya Dryomov
  2023-06-13  9:51     ` Xiubo Li
  0 siblings, 1 reply; 15+ messages in thread
From: Ilya Dryomov @ 2023-06-13  9:07 UTC (permalink / raw)
  To: xiubli; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell

On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
>
> From: Xiubo Li <xiubli@redhat.com>
>
> Multiple cephfs mounts on a host is increasingly common so disambiguating
> messages like this is necessary and will make it easier to debug
> issues.
>
> URL: https://tracker.ceph.com/issues/61590
> Cc: Patrick Donnelly <pdonnell@redhat.com>
> Signed-off-by: Xiubo Li <xiubli@redhat.com>
> ---
>  fs/ceph/acl.c        |   6 +-
>  fs/ceph/addr.c       | 300 ++++++++++--------
>  fs/ceph/caps.c       | 709 ++++++++++++++++++++++++-------------------
>  fs/ceph/crypto.c     |  45 ++-
>  fs/ceph/debugfs.c    |   4 +-
>  fs/ceph/dir.c        | 222 +++++++++-----
>  fs/ceph/export.c     |  39 ++-
>  fs/ceph/file.c       | 268 +++++++++-------
>  fs/ceph/inode.c      | 528 ++++++++++++++++++--------------
>  fs/ceph/ioctl.c      |  10 +-
>  fs/ceph/locks.c      |  62 ++--
>  fs/ceph/mds_client.c | 616 +++++++++++++++++++++----------------
>  fs/ceph/mdsmap.c     |  25 +-
>  fs/ceph/metric.c     |   5 +-
>  fs/ceph/quota.c      |  31 +-
>  fs/ceph/snap.c       | 186 +++++++-----
>  fs/ceph/super.c      |  64 ++--
>  fs/ceph/xattr.c      |  97 +++---
>  18 files changed, 1887 insertions(+), 1330 deletions(-)
>
> diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
> index 8a56f979c7cb..970acd07908d 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, "%s %llx.%llx failed, err=%d\n",
> +                                         __func__, ceph_vinop(inode), size);
>                 acl = ERR_PTR(-EIO);
>         }
>
> diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
> index e62318b3e13d..c772639dc0cb 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);
> +               dout_client(cl, "%s %llx.%llx %p idx %lu -- already dirty\n",
> +                           __func__, ceph_vinop(inode), folio, folio->index);

While having context information attached to each dout is nice, it
certainly comes at a price of a lot of churn and automated backport
disruption.  I wonder how much value doing this for douts as opposed
to just pr_* messages actually brings?

A regular user never sees douts as enabling them without extra care
tends to be useless -- journald can't cope with the volume and quickly
starts discarding them.  From the developer side, many douts already
include at least one (hashed) pointer value which is usually sufficient
to disambiguate, even if it's more cumbersome than a grep on context
information.

Thanks,

                Ilya

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/6] ceph: add the *_client debug macros support
  2023-06-13  8:39   ` Ilya Dryomov
@ 2023-06-13  9:27     ` Xiubo Li
  2023-06-13 10:08       ` Ilya Dryomov
  0 siblings, 1 reply; 15+ messages in thread
From: Xiubo Li @ 2023-06-13  9:27 UTC (permalink / raw)
  To: Ilya Dryomov; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell


On 6/13/23 16:39, Ilya Dryomov wrote:
> On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
>> From: Xiubo Li <xiubli@redhat.com>
>>
>> This will help print the client's global_id in debug logs.
> Hi Xiubo,
>
> There is a related concern that clients can belong to different
> clusters, in which case their global IDs might clash.  If you chose
> to disregard that as an unlikely scenario, it's probably fine, but
> it would be nice to make that explicit in the commit message.
>
> If account for that, the identifier block could look like:
>
>    [<cluster fsid> <gid>]

The fsid string is a little long:

[5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4236]

Maybe we could just print part of that as:

[5ea1e13c.. 4236]

?


>
> instead of:
>
>    [client.<gid>]
>
> The "client." string prefix seems a bit redundant since the kernel
> client's entity is always CEPH_ENTITY_TYPE_CLIENT.  If you like it
> anyway, I would at least get rid of the dot at the end to align with
> how it's presented elsewhere (e.g. debugfs directory name or
> "ceph.client_id" xattr).

Sure, I will remove it.

Thanks

- Xiubo


>
> Thanks,
>
>                  Ilya
>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 6/6] ceph: print the client global_id in all the debug logs
  2023-06-13  9:07   ` [PATCH v2 6/6] ceph: print the client global_id in all the " Ilya Dryomov
@ 2023-06-13  9:51     ` Xiubo Li
  2023-06-13 21:50       ` Ilya Dryomov
  0 siblings, 1 reply; 15+ messages in thread
From: Xiubo Li @ 2023-06-13  9:51 UTC (permalink / raw)
  To: Ilya Dryomov; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell


On 6/13/23 17:07, Ilya Dryomov wrote:
> On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
>> From: Xiubo Li <xiubli@redhat.com>
>>
>> Multiple cephfs mounts on a host is increasingly common so disambiguating
>> messages like this is necessary and will make it easier to debug
>> issues.
>>
>> URL: https://tracker.ceph.com/issues/61590
>> Cc: Patrick Donnelly <pdonnell@redhat.com>
>> Signed-off-by: Xiubo Li <xiubli@redhat.com>
>> ---
>>   fs/ceph/acl.c        |   6 +-
>>   fs/ceph/addr.c       | 300 ++++++++++--------
>>   fs/ceph/caps.c       | 709 ++++++++++++++++++++++++-------------------
>>   fs/ceph/crypto.c     |  45 ++-
>>   fs/ceph/debugfs.c    |   4 +-
>>   fs/ceph/dir.c        | 222 +++++++++-----
>>   fs/ceph/export.c     |  39 ++-
>>   fs/ceph/file.c       | 268 +++++++++-------
>>   fs/ceph/inode.c      | 528 ++++++++++++++++++--------------
>>   fs/ceph/ioctl.c      |  10 +-
>>   fs/ceph/locks.c      |  62 ++--
>>   fs/ceph/mds_client.c | 616 +++++++++++++++++++++----------------
>>   fs/ceph/mdsmap.c     |  25 +-
>>   fs/ceph/metric.c     |   5 +-
>>   fs/ceph/quota.c      |  31 +-
>>   fs/ceph/snap.c       | 186 +++++++-----
>>   fs/ceph/super.c      |  64 ++--
>>   fs/ceph/xattr.c      |  97 +++---
>>   18 files changed, 1887 insertions(+), 1330 deletions(-)
>>
>> diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
>> index 8a56f979c7cb..970acd07908d 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, "%s %llx.%llx failed, err=%d\n",
>> +                                         __func__, ceph_vinop(inode), size);
>>                  acl = ERR_PTR(-EIO);
>>          }
>>
>> diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
>> index e62318b3e13d..c772639dc0cb 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);
>> +               dout_client(cl, "%s %llx.%llx %p idx %lu -- already dirty\n",
>> +                           __func__, ceph_vinop(inode), folio, folio->index);
> While having context information attached to each dout is nice, it
> certainly comes at a price of a lot of churn and automated backport
> disruption.

Yeah, certainly this will break automated backporting. But this should 
be okay, I can generate the backport patches for each stable release for 
this patch series, so after this it will make the automated backporting 
work.

>   I wonder how much value doing this for douts as opposed
> to just pr_* messages actually brings?

I think the 'dout()' was introduced by printing more context info, which 
includes module/function names and line#, when the 
CONFIG_CEPH_LIB_PRETTYDEBUG is enabled.

Maybe we can remove CONFIG_CEPH_LIB_PRETTYDEBUG now, since the pr_* will 
print the module name and also the caller for dout() and pr_* will print 
the function name mostly ?

> A regular user never sees douts as enabling them without extra care
> tends to be useless -- journald can't cope with the volume and quickly
> starts discarding them.  From the developer side, many douts already
> include at least one (hashed) pointer value which is usually sufficient
> to disambiguate, even if it's more cumbersome than a grep on context
> information.

Just in some cases the client global_id is really could help much, 
especially for the issues only could be hit in productions case, which 
could have hundreds of clients, and we can only enable some dout() debug 
logs.

Thanks

- Xiubo

>
> Thanks,
>
>                  Ilya
>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/6] ceph: add the *_client debug macros support
  2023-06-13  9:27     ` Xiubo Li
@ 2023-06-13 10:08       ` Ilya Dryomov
  2023-06-13 10:54         ` Xiubo Li
  0 siblings, 1 reply; 15+ messages in thread
From: Ilya Dryomov @ 2023-06-13 10:08 UTC (permalink / raw)
  To: Xiubo Li; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell

On Tue, Jun 13, 2023 at 11:27 AM Xiubo Li <xiubli@redhat.com> wrote:
>
>
> On 6/13/23 16:39, Ilya Dryomov wrote:
> > On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
> >> From: Xiubo Li <xiubli@redhat.com>
> >>
> >> This will help print the client's global_id in debug logs.
> > Hi Xiubo,
> >
> > There is a related concern that clients can belong to different
> > clusters, in which case their global IDs might clash.  If you chose
> > to disregard that as an unlikely scenario, it's probably fine, but
> > it would be nice to make that explicit in the commit message.
> >
> > If account for that, the identifier block could look like:
> >
> >    [<cluster fsid> <gid>]
>
> The fsid string is a little long:
>
> [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4236]
>
> Maybe we could just print part of that as:
>
> [5ea1e13c.. 4236]
>
> ?

If printing it at all, I would probably print the entire UUID.  But
I don't have a strong opinion here.

Thanks,

                Ilya

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/6] ceph: add the *_client debug macros support
  2023-06-13 10:08       ` Ilya Dryomov
@ 2023-06-13 10:54         ` Xiubo Li
  0 siblings, 0 replies; 15+ messages in thread
From: Xiubo Li @ 2023-06-13 10:54 UTC (permalink / raw)
  To: Ilya Dryomov; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell


On 6/13/23 18:08, Ilya Dryomov wrote:
> On Tue, Jun 13, 2023 at 11:27 AM Xiubo Li <xiubli@redhat.com> wrote:
>>
>> On 6/13/23 16:39, Ilya Dryomov wrote:
>>> On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
>>>> From: Xiubo Li <xiubli@redhat.com>
>>>>
>>>> This will help print the client's global_id in debug logs.
>>> Hi Xiubo,
>>>
>>> There is a related concern that clients can belong to different
>>> clusters, in which case their global IDs might clash.  If you chose
>>> to disregard that as an unlikely scenario, it's probably fine, but
>>> it would be nice to make that explicit in the commit message.
>>>
>>> If account for that, the identifier block could look like:
>>>
>>>     [<cluster fsid> <gid>]
>> The fsid string is a little long:
>>
>> [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4236]
>>
>> Maybe we could just print part of that as:
>>
>> [5ea1e13c.. 4236]
>>
>> ?
> If printing it at all, I would probably print the entire UUID.  But
> I don't have a strong opinion here.

I am okay with this, then it will be:

<7>[117633.216478] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_do_getattr inode 00000000f7600773 1.fffffffffffffffe mask As mode 
040755
<7>[117633.216486] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_caps_issued_mask mask ino 0x1 cap 00000000a1dd2c71 issued 
pAsLsXsFs (mask As)
<7>[117633.216493] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__touch_cap 00000000f7600773 cap 00000000a1dd2c71 mds0
<7>[117633.216501] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
ceph_d_revalidate 0000000013595462 'a.txt' inode 000000008738cf69 offset 
0xff5cc5890000002 nokey 0
<7>[117633.216509] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
dentry_lease_is_valid - dentry 0000000013595462 = 0
<7>[117633.216515] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_caps_issued_mask mask ino 0x1 cap 00000000a1dd2c71 issued 
pAsLsXsFs (mask Fs)
<7>[117633.216521] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__touch_cap 00000000f7600773 cap 00000000a1dd2c71 mds0
<7>[117633.216528] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_dentry_dir_lease_touch 0000000045691e1a 0000000013595462 'a.txt' 
(offset 0xff5cc5890000002)
<7>[117633.216535] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
dir_lease_is_valid dir 1.fffffffffffffffe v2 dentry 0000000013595462 
'a.txt' = 1
<7>[117633.216542] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
ceph_d_revalidate 0000000013595462 'a.txt' valid
<7>[117633.216551] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_do_getattr inode 000000008738cf69 10000000000.fffffffffffffffe 
mask As mode 0100644
<7>[117633.216558] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_caps_issued_mask mask ino 0x10000000000 cap 00000000610f13ac 
issued pAsLsXsFscr (mask As)
<7>[117633.216565] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__touch_cap 000000008738cf69 cap 00000000610f13ac mds0
<7>[117633.216572] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_caps_issued_mask mask ino 0x1 cap 00000000a1dd2c71 issued 
pAsLsXsFs (mask Fs)
<7>[117633.216599] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_do_getattr inode 00000000f7600773 1.fffffffffffffffe mask As mode 
040755
<7>[117633.216607] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_caps_issued_mask mask ino 0x1 cap 00000000a1dd2c71 issued 
pAsLsXsFs (mask As)
<7>[117633.216613] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__touch_cap 00000000f7600773 cap 00000000a1dd2c71 mds0
<7>[117633.216620] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
ceph_d_revalidate 0000000013595462 'a.txt' inode 000000008738cf69 offset 
0xff5cc5890000002 nokey 0
<7>[117633.216627] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
dentry_lease_is_valid - dentry 0000000013595462 = 0
<7>[117633.216633] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__ceph_caps_issued_mask mask ino 0x1 cap 00000000a1dd2c71 issued 
pAsLsXsFs (mask Fs)
<7>[117633.216639] ceph: [5ea1e13c-4034-426c-bf8f-8a3a70d9e812 4245] 
__touch_cap 00000000f7600773 cap 00000000a1dd2c71 mds0

Thanks

- Xiubo


> Thanks,
>
>                  Ilya
>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 6/6] ceph: print the client global_id in all the debug logs
  2023-06-13  9:51     ` Xiubo Li
@ 2023-06-13 21:50       ` Ilya Dryomov
  2023-06-14  1:31         ` Xiubo Li
  0 siblings, 1 reply; 15+ messages in thread
From: Ilya Dryomov @ 2023-06-13 21:50 UTC (permalink / raw)
  To: Xiubo Li; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell

On Tue, Jun 13, 2023 at 11:51 AM Xiubo Li <xiubli@redhat.com> wrote:
>
>
> On 6/13/23 17:07, Ilya Dryomov wrote:
> > On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
> >> From: Xiubo Li <xiubli@redhat.com>
> >>
> >> Multiple cephfs mounts on a host is increasingly common so disambiguating
> >> messages like this is necessary and will make it easier to debug
> >> issues.
> >>
> >> URL: https://tracker.ceph.com/issues/61590
> >> Cc: Patrick Donnelly <pdonnell@redhat.com>
> >> Signed-off-by: Xiubo Li <xiubli@redhat.com>
> >> ---
> >>   fs/ceph/acl.c        |   6 +-
> >>   fs/ceph/addr.c       | 300 ++++++++++--------
> >>   fs/ceph/caps.c       | 709 ++++++++++++++++++++++++-------------------
> >>   fs/ceph/crypto.c     |  45 ++-
> >>   fs/ceph/debugfs.c    |   4 +-
> >>   fs/ceph/dir.c        | 222 +++++++++-----
> >>   fs/ceph/export.c     |  39 ++-
> >>   fs/ceph/file.c       | 268 +++++++++-------
> >>   fs/ceph/inode.c      | 528 ++++++++++++++++++--------------
> >>   fs/ceph/ioctl.c      |  10 +-
> >>   fs/ceph/locks.c      |  62 ++--
> >>   fs/ceph/mds_client.c | 616 +++++++++++++++++++++----------------
> >>   fs/ceph/mdsmap.c     |  25 +-
> >>   fs/ceph/metric.c     |   5 +-
> >>   fs/ceph/quota.c      |  31 +-
> >>   fs/ceph/snap.c       | 186 +++++++-----
> >>   fs/ceph/super.c      |  64 ++--
> >>   fs/ceph/xattr.c      |  97 +++---
> >>   18 files changed, 1887 insertions(+), 1330 deletions(-)
> >>
> >> diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
> >> index 8a56f979c7cb..970acd07908d 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, "%s %llx.%llx failed, err=%d\n",
> >> +                                         __func__, ceph_vinop(inode), size);
> >>                  acl = ERR_PTR(-EIO);
> >>          }
> >>
> >> diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
> >> index e62318b3e13d..c772639dc0cb 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);
> >> +               dout_client(cl, "%s %llx.%llx %p idx %lu -- already dirty\n",
> >> +                           __func__, ceph_vinop(inode), folio, folio->index);
> > While having context information attached to each dout is nice, it
> > certainly comes at a price of a lot of churn and automated backport
> > disruption.
>
> Yeah, certainly this will break automated backporting. But this should
> be okay, I can generate the backport patches for each stable release for
> this patch series, so after this it will make the automated backporting
> work.
>
> >   I wonder how much value doing this for douts as opposed
> > to just pr_* messages actually brings?
>
> I think the 'dout()' was introduced by printing more context info, which
> includes module/function names and line#, when the
> CONFIG_CEPH_LIB_PRETTYDEBUG is enabled.

dout() is just a wrapper around pr_debug().  It doesn't have anything
to do with CONFIG_CEPH_LIB_PRETTYDEBUG per se which adds file names and
line numbers.  IIRC dout() by itself just adds a space at the front to
make debugging spew stand out.

>
> Maybe we can remove CONFIG_CEPH_LIB_PRETTYDEBUG now, since the pr_* will
> print the module name and also the caller for dout() and pr_* will print
> the function name mostly ?

To the best of my knowledge, CONFIG_CEPH_LIB_PRETTYDEBUG has always
been disabled by default and it's not enabled by any distribution in
their kernels.  I don't think anyone out there would miss it, but then
it's not hurting either -- it's less than 20 lines of code with all
ifdef-ery included.

Thanks,

                Ilya

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 6/6] ceph: print the client global_id in all the debug logs
  2023-06-13 21:50       ` Ilya Dryomov
@ 2023-06-14  1:31         ` Xiubo Li
  0 siblings, 0 replies; 15+ messages in thread
From: Xiubo Li @ 2023-06-14  1:31 UTC (permalink / raw)
  To: Ilya Dryomov; +Cc: ceph-devel, jlayton, vshankar, khiremat, mchangir, pdonnell


On 6/14/23 05:50, Ilya Dryomov wrote:
> On Tue, Jun 13, 2023 at 11:51 AM Xiubo Li <xiubli@redhat.com> wrote:
>>
>> On 6/13/23 17:07, Ilya Dryomov wrote:
>>> On Mon, Jun 12, 2023 at 1:46 PM <xiubli@redhat.com> wrote:
>>>> From: Xiubo Li <xiubli@redhat.com>
>>>>
>>>> Multiple cephfs mounts on a host is increasingly common so disambiguating
>>>> messages like this is necessary and will make it easier to debug
>>>> issues.
>>>>
>>>> URL: https://tracker.ceph.com/issues/61590
>>>> Cc: Patrick Donnelly <pdonnell@redhat.com>
>>>> Signed-off-by: Xiubo Li <xiubli@redhat.com>
>>>> ---
>>>>    fs/ceph/acl.c        |   6 +-
>>>>    fs/ceph/addr.c       | 300 ++++++++++--------
>>>>    fs/ceph/caps.c       | 709 ++++++++++++++++++++++++-------------------
>>>>    fs/ceph/crypto.c     |  45 ++-
>>>>    fs/ceph/debugfs.c    |   4 +-
>>>>    fs/ceph/dir.c        | 222 +++++++++-----
>>>>    fs/ceph/export.c     |  39 ++-
>>>>    fs/ceph/file.c       | 268 +++++++++-------
>>>>    fs/ceph/inode.c      | 528 ++++++++++++++++++--------------
>>>>    fs/ceph/ioctl.c      |  10 +-
>>>>    fs/ceph/locks.c      |  62 ++--
>>>>    fs/ceph/mds_client.c | 616 +++++++++++++++++++++----------------
>>>>    fs/ceph/mdsmap.c     |  25 +-
>>>>    fs/ceph/metric.c     |   5 +-
>>>>    fs/ceph/quota.c      |  31 +-
>>>>    fs/ceph/snap.c       | 186 +++++++-----
>>>>    fs/ceph/super.c      |  64 ++--
>>>>    fs/ceph/xattr.c      |  97 +++---
>>>>    18 files changed, 1887 insertions(+), 1330 deletions(-)
>>>>
>>>> diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c
>>>> index 8a56f979c7cb..970acd07908d 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, "%s %llx.%llx failed, err=%d\n",
>>>> +                                         __func__, ceph_vinop(inode), size);
>>>>                   acl = ERR_PTR(-EIO);
>>>>           }
>>>>
>>>> diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
>>>> index e62318b3e13d..c772639dc0cb 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);
>>>> +               dout_client(cl, "%s %llx.%llx %p idx %lu -- already dirty\n",
>>>> +                           __func__, ceph_vinop(inode), folio, folio->index);
>>> While having context information attached to each dout is nice, it
>>> certainly comes at a price of a lot of churn and automated backport
>>> disruption.
>> Yeah, certainly this will break automated backporting. But this should
>> be okay, I can generate the backport patches for each stable release for
>> this patch series, so after this it will make the automated backporting
>> work.
>>
>>>    I wonder how much value doing this for douts as opposed
>>> to just pr_* messages actually brings?
>> I think the 'dout()' was introduced by printing more context info, which
>> includes module/function names and line#, when the
>> CONFIG_CEPH_LIB_PRETTYDEBUG is enabled.
> dout() is just a wrapper around pr_debug().  It doesn't have anything
> to do with CONFIG_CEPH_LIB_PRETTYDEBUG per se which adds file names and
> line numbers.  IIRC dout() by itself just adds a space at the front to
> make debugging spew stand out.
>
>> Maybe we can remove CONFIG_CEPH_LIB_PRETTYDEBUG now, since the pr_* will
>> print the module name and also the caller for dout() and pr_* will print
>> the function name mostly ?
> To the best of my knowledge, CONFIG_CEPH_LIB_PRETTYDEBUG has always
> been disabled by default and it's not enabled by any distribution in
> their kernels.  I don't think anyone out there would miss it, but then
> it's not hurting either -- it's less than 20 lines of code with all
> ifdef-ery included.

Okay. I won't touch it.

Thanks


> Thanks,
>
>                  Ilya
>


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2023-06-14  1:33 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-12 11:43 [PATCH v2 0/6] ceph: print the client global id for debug logs xiubli
2023-06-12 11:43 ` [PATCH v2 1/6] ceph: add the *_client debug macros support xiubli
2023-06-13  8:39   ` Ilya Dryomov
2023-06-13  9:27     ` Xiubo Li
2023-06-13 10:08       ` Ilya Dryomov
2023-06-13 10:54         ` Xiubo Li
2023-06-12 11:43 ` [PATCH v2 2/6] ceph: pass the mdsc to several helpers xiubli
2023-06-12 11:43 ` [PATCH v2 3/6] ceph: rename _to_client() to _to_fs_client() xiubli
2023-06-12 11:43 ` [PATCH v2 4/6] ceph: move mdsmap.h to fs/ceph/ xiubli
2023-06-12 11:43 ` [PATCH v2 5/6] ceph: add ceph_inode_to_client() helper support xiubli
2023-06-12 15:25 ` [PATCH v2 0/6] ceph: print the client global id for debug logs Patrick Donnelly
     [not found] ` <20230612114359.220895-7-xiubli@redhat.com>
2023-06-13  9:07   ` [PATCH v2 6/6] ceph: print the client global_id in all the " Ilya Dryomov
2023-06-13  9:51     ` Xiubo Li
2023-06-13 21:50       ` Ilya Dryomov
2023-06-14  1:31         ` Xiubo Li

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.