From: Sasha Levin <sashal@kernel.org>
To: stable@vger.kernel.org
Cc: "Luís Henriques" <lhenriques@suse.de>,
"Dan Carpenter" <dan.carpenter@linaro.org>,
"Xiubo Li" <xiubli@redhat.com>,
"Ilya Dryomov" <idryomov@gmail.com>,
"Sasha Levin" <sashal@kernel.org>
Subject: [PATCH 6.1.y 1/3] ceph: remove unnecessary check for NULL in parse_longname()
Date: Sun, 6 Sep 2026 11:41:10 -0400 [thread overview]
Message-ID: <20260906154112.1496479-1-sashal@kernel.org> (raw)
In-Reply-To: <2026090355-tradition-although-cffd@gregkh>
From: Luís Henriques <lhenriques@suse.de>
[ Upstream commit 2816a09678f50fc6a69e742e90cb1fd7a9f1f9ff ]
Function ceph_get_inode() never returns NULL; instead it returns an
ERR_PTR() if something fails. Thus, the check for NULL in parse_longname()
is useless and can be dropped. Instead, move there the debug code that
does the error checking so that it's only executed if ceph_get_inode() is
called.
Fixes: dd66df0053ef ("ceph: add support for encrypted snapshot names")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Luís Henriques <lhenriques@suse.de>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Stable-dependency adaptation: fs/ceph/crypto.c is not present in 6.1, so
drop the original hunk. Instead, carry the minimal existing-code context
needed by the follow-up: use client-aware logging in the delegated-inode
parser, serialize the delegated-inode xarray teardown, and reject reconnects
for terminal sessions. This gives the follow-up's counter reset a clean and
correct insertion point.
[ sashal: Reduced backport -- upstream 2816a09678f50 touches 1 file(s), this
backport carries 1. Not backported here:
fs/ceph/crypto.c
This note is generated from the file lists only; see the resolution record
for the reasoning. ]
Stable-dep-of: 4bd3158bd624 ("ceph: cap delegated inode count in ceph_parse_deleg_inos()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/ceph/mds_client.c | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 939f9e870de0a..4893545b930c3 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -433,6 +433,7 @@ static int parse_reply_info_filelock(void **p, void *end,
static int ceph_parse_deleg_inos(void **p, void *end,
struct ceph_mds_session *s)
{
+ struct ceph_client *cl = s->s_mdsc->fsc->client;
u32 sets;
ceph_decode_32_safe(p, end, sets, bad);
@@ -445,8 +446,9 @@ static int ceph_parse_deleg_inos(void **p, void *end,
/* Don't accept a delegation of system inodes */
if (start < CEPH_INO_SYSTEM_BASE) {
- pr_warn_ratelimited("ceph: ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n",
- start, len);
+ pr_warn_ratelimited_client(cl,
+ "ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n",
+ start, len);
continue;
}
while (len--) {
@@ -454,10 +456,10 @@ static int ceph_parse_deleg_inos(void **p, void *end,
DELEGATED_INO_AVAILABLE,
GFP_KERNEL);
if (!err) {
- dout("added delegated inode 0x%llx\n",
- start - 1);
+ doutc(cl, "added delegated inode 0x%llx\n", start - 1);
} else if (err == -EBUSY) {
- pr_warn("MDS delegated inode 0x%llx more than once.\n",
+ pr_warn_client(cl,
+ "MDS delegated inode 0x%llx more than once.\n",
start - 1);
} else {
return err;
@@ -4200,6 +4202,7 @@ static int encode_snap_realms(struct ceph_mds_client *mdsc,
static void send_mds_reconnect(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session)
{
+ struct ceph_client *cl = mdsc->fsc->client;
struct ceph_msg *reply;
int mds = session->s_mds;
int err = -ENOMEM;
@@ -4218,9 +4221,21 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
if (!reply)
goto fail_nomsg;
+ mutex_lock(&session->s_mutex);
+
+ /* Serialized by s_mutex against concurrent ceph_get_deleg_ino(). */
xa_destroy(&session->s_delegated_inos);
+ if (session->s_state == CEPH_MDS_SESSION_CLOSED ||
+ session->s_state == CEPH_MDS_SESSION_REJECTED) {
+ pr_info_client(cl, "mds%d skipping reconnect, session %s\n",
+ mds,
+ ceph_session_state_name(session->s_state));
+ mutex_unlock(&session->s_mutex);
+ ceph_msg_put(reply);
+ err = -ESTALE;
+ goto fail_return;
+ }
- mutex_lock(&session->s_mutex);
session->s_state = CEPH_MDS_SESSION_RECONNECTING;
session->s_seq = 0;
@@ -4361,6 +4376,10 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
fail_nopagelist:
pr_err("error %d preparing reconnect for mds%d\n", err, mds);
return;
+
+fail_return:
+ ceph_pagelist_release(recon_state.pagelist);
+ return;
}
--
2.53.0
next prev parent reply other threads:[~2026-09-06 15:41 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 13:22 FAILED: patch "[PATCH] ceph: cap delegated inode count in ceph_parse_deleg_inos()" failed to apply to 6.1-stable tree gregkh
2026-09-06 15:41 ` Sasha Levin [this message]
2026-09-06 15:41 ` [PATCH 6.1.y 2/3] ceph: print cluster fsid and client global_id in all debug logs Sasha Levin
2026-09-06 15:41 ` [PATCH 6.1.y 3/3] ceph: cap delegated inode count in ceph_parse_deleg_inos() Sasha Levin
2026-09-06 15:46 ` [PATCH 6.1.y 1/3] ceph: remove unnecessary check for NULL in parse_longname() Sasha Levin
2026-09-06 15:46 ` [PATCH 6.1.y 2/3] ceph: print cluster fsid and client global_id in all debug logs Sasha Levin
2026-09-06 15:46 ` [PATCH 6.1.y 3/3] ceph: cap delegated inode count in ceph_parse_deleg_inos() Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260906154112.1496479-1-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=dan.carpenter@linaro.org \
--cc=idryomov@gmail.com \
--cc=lhenriques@suse.de \
--cc=stable@vger.kernel.org \
--cc=xiubli@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox