| From 62496453783eca90f4e626f51ec502b9f9447499 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 18 May 2020 16:03:09 +0800 |
| Subject: libceph: ignore pool overlay and cache logic on redirects |
| |
| From: Jerry Lee <leisurelysw24@gmail.com> |
| |
| [ Upstream commit 890bd0f8997ae6ac0a367dd5146154a3963306dd ] |
| |
| OSD client should ignore cache/overlay flag if got redirect reply. |
| Otherwise, the client hangs when the cache tier is in forward mode. |
| |
| [ idryomov: Redirects are effectively deprecated and no longer |
| used or tested. The original tiering modes based on redirects |
| are inherently flawed because redirects can race and reorder, |
| potentially resulting in data corruption. The new proxy and |
| readproxy tiering modes should be used instead of forward and |
| readforward. Still marking for stable as obviously correct, |
| though. ] |
| |
| Cc: stable@vger.kernel.org |
| URL: https://tracker.ceph.com/issues/23296 |
| URL: https://tracker.ceph.com/issues/36406 |
| Signed-off-by: Jerry Lee <leisurelysw24@gmail.com> |
| Reviewed-by: Ilya Dryomov <idryomov@gmail.com> |
| Signed-off-by: Ilya Dryomov <idryomov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/ceph/osd_client.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c |
| index 70ccb0716fc5..4fd679b30b19 100644 |
| --- a/net/ceph/osd_client.c |
| +++ b/net/ceph/osd_client.c |
| @@ -2879,7 +2879,9 @@ static void handle_reply(struct ceph_osd *osd, struct ceph_msg *msg) |
| * supported. |
| */ |
| req->r_t.target_oloc.pool = m.redirect.oloc.pool; |
| - req->r_flags |= CEPH_OSD_FLAG_REDIRECTED; |
| + req->r_flags |= CEPH_OSD_FLAG_REDIRECTED | |
| + CEPH_OSD_FLAG_IGNORE_OVERLAY | |
| + CEPH_OSD_FLAG_IGNORE_CACHE; |
| req->r_tid = 0; |
| __submit_request(req, false); |
| goto out_unlock_osdc; |
| -- |
| 2.25.1 |
| |