From patchwork Wed Oct 7 12:16:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 11820523 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 870B2175A for ; Wed, 7 Oct 2020 12:17:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6830B20872 for ; Wed, 7 Oct 2020 12:17:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073026; bh=W+WRJiA5Dyo40yCBkIH+gN+ujGTSXHZQ4oEjCxbLe9o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=wCkQiKHVxKty7z06seyi86aXdhh8KZn5UVAEfXLyq363eccT+dmG6EQdm6H0S0sjo y0x5PT+2mdAB3fHxqsbuxa0colv7DMrAnf1NeBhAAhMK04IBMaE+4c7ABq48x7+Hmg TK5/+QzA/D3WvcGw63axQI/o2sTBD4rEQxlgHgEA= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728152AbgJGMRF (ORCPT ); Wed, 7 Oct 2020 08:17:05 -0400 Received: from mail.kernel.org ([198.145.29.99]:41374 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727978AbgJGMRF (ORCPT ); Wed, 7 Oct 2020 08:17:05 -0400 Received: from tleilax.com (68-20-15-154.lightspeed.rlghnc.sbcglobal.net [68.20.15.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1D6B9207EA; Wed, 7 Oct 2020 12:17:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073024; bh=W+WRJiA5Dyo40yCBkIH+gN+ujGTSXHZQ4oEjCxbLe9o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DSVKKII5xM9AmVEcUJGz8RKpgR7sQzfReroUEAcGtLTLG1LWFg43NKS45THYxpOHP skUuhUZxW+WmsaC8leOSrgO97u6a3uuQlggvLnE2mwGSbu0UJuQLzL3etwl5ns/AGC 6wyteHzJYOkNztuGrz18STHYNeSzx03KfjHYOt04= From: Jeff Layton To: ceph-devel@vger.kernel.org Cc: idryomov@gmail.com, ukernel@gmail.com, pdonnell@redhat.com Subject: [PATCH v4 1/5] ceph: don't WARN when removing caps due to blocklisting Date: Wed, 7 Oct 2020 08:16:56 -0400 Message-Id: <20201007121700.10489-2-jlayton@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201007121700.10489-1-jlayton@kernel.org> References: <20201007121700.10489-1-jlayton@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org We expect to remove dirty caps when the client is blocklisted. Don't throw a warning in that case. Signed-off-by: Jeff Layton --- fs/ceph/caps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index c7e69547628e..2ee3f316afcf 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -1149,7 +1149,7 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release) /* remove from inode's cap rbtree, and clear auth cap */ rb_erase(&cap->ci_node, &ci->i_caps); if (ci->i_auth_cap == cap) { - WARN_ON_ONCE(!list_empty(&ci->i_dirty_item)); + WARN_ON_ONCE(!list_empty(&ci->i_dirty_item) && !mdsc->fsc->blocklisted); ci->i_auth_cap = NULL; } From patchwork Wed Oct 7 12:16:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 11820525 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C41E3618 for ; Wed, 7 Oct 2020 12:17:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A4F2A20B1F for ; Wed, 7 Oct 2020 12:17:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073027; bh=gF3voaBm2copooG2glx9EOo01/CXMpMjhX84fpOBpdQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=mTqgEaVn5kIEepqPSU5huLVKb/Tl3b4Agsc3IRsDNe8qmJAaak+0K30hlpDks3WPu yo9mzEYGttU7tsZkzKH0lwVcYQf/C7I4UeFye/lk2heDIwLMk21iIjTsaa1PpleM8y PdFrS0kYhqA7EtTGx9U6S5FTw/QshX3OVsz8uxDc= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728165AbgJGMRG (ORCPT ); Wed, 7 Oct 2020 08:17:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:41386 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728159AbgJGMRG (ORCPT ); Wed, 7 Oct 2020 08:17:06 -0400 Received: from tleilax.com (68-20-15-154.lightspeed.rlghnc.sbcglobal.net [68.20.15.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DC5712080A; Wed, 7 Oct 2020 12:17:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073025; bh=gF3voaBm2copooG2glx9EOo01/CXMpMjhX84fpOBpdQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YoyXaPDt5X2XCEGsCKSngXi91Yf2woIgCFklhibQCmUsZ+L++OB2OkyP9IXGdbTIG SqObnrflHkYlLl32HFFMvmi5ewAgoK77ecoMu5HobpHgXbGNtwZft6npdbYChhmx0K qXaIsLttMXr5RUUTJBdgis5AaZ53CT1BYTjp78MQ= From: Jeff Layton To: ceph-devel@vger.kernel.org Cc: idryomov@gmail.com, ukernel@gmail.com, pdonnell@redhat.com Subject: [PATCH v4 2/5] ceph: make fsc->mount_state an int Date: Wed, 7 Oct 2020 08:16:57 -0400 Message-Id: <20201007121700.10489-3-jlayton@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201007121700.10489-1-jlayton@kernel.org> References: <20201007121700.10489-1-jlayton@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org This field is an unsigned long currently, which is a bit of a waste on most arches since this just holds an enum. Make it (signed) int instead. Signed-off-by: Jeff Layton --- fs/ceph/super.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 582694899130..d0cb6a51c6a4 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -106,7 +106,7 @@ struct ceph_fs_client { struct ceph_mount_options *mount_options; struct ceph_client *client; - unsigned long mount_state; + int mount_state; unsigned long last_auto_reconnect; bool blocklisted; From patchwork Wed Oct 7 12:16:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 11820529 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5B8D41580 for ; Wed, 7 Oct 2020 12:17:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3C1F9207EA for ; Wed, 7 Oct 2020 12:17:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073030; bh=Pmn0r+QYHa3Bs/rM4XPTEd4PyedxghVr/om1n8FCD8A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=sEibs4Rgly59Cl98VknAVuNYDeWqZnsNU/7Rgw3XpXjKejgG71k8b2fGdRhA2EEnk QevUooH8bVQiqQbNy4NSvxxf138C/7p7uEuut7j+8p03hqLL76z18ZOikKL/67Nv6p fb+4RMj50nNZ8uAqhAVpiIiHvqJ2vpduX/GYl4BI= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728174AbgJGMRI (ORCPT ); Wed, 7 Oct 2020 08:17:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:41402 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728160AbgJGMRH (ORCPT ); Wed, 7 Oct 2020 08:17:07 -0400 Received: from tleilax.com (68-20-15-154.lightspeed.rlghnc.sbcglobal.net [68.20.15.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B13D12083B; Wed, 7 Oct 2020 12:17:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073026; bh=Pmn0r+QYHa3Bs/rM4XPTEd4PyedxghVr/om1n8FCD8A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JuV8p4n4YRkguMMykJIcKbzQdo5ktaiwkoQGk70lrWrKBvSnXtd9avdDrN8Ma1MwW Fgi5A2wojPHRPWTsy+eWgkQxdErtNe9w8Xex8iH5nFGvhDOpb836Efdvj5+RmHTrzq sSAvKoB19fkwIG3gIarHtqsXSCNWjqYUXyUW/W/M= From: Jeff Layton To: ceph-devel@vger.kernel.org Cc: idryomov@gmail.com, ukernel@gmail.com, pdonnell@redhat.com Subject: [PATCH v4 3/5] ceph: add new RECOVER mount_state when recovering session Date: Wed, 7 Oct 2020 08:16:58 -0400 Message-Id: <20201007121700.10489-4-jlayton@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201007121700.10489-1-jlayton@kernel.org> References: <20201007121700.10489-1-jlayton@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org When recovering a session (a'la recover_session=clean), we want to do all of the operations that we do on a forced umount, but changing the mount state to SHUTDOWN is can cause queued MDS requests to fail when the session comes back. Most of those can idle until the session is recovered in this situation. Reserve SHUTDOWN state for forced umount, and make a new RECOVER state for the forced reconnect situation. Change several tests for equality with SHUTDOWN to test for that or RECOVER. Cc: "Yan, Zheng" Signed-off-by: Jeff Layton --- fs/ceph/addr.c | 4 ++-- fs/ceph/caps.c | 2 +- fs/ceph/inode.c | 2 +- fs/ceph/mds_client.c | 4 ++-- fs/ceph/super.c | 14 ++++++++++---- include/linux/ceph/libceph.h | 1 + 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 97827f68a3e7..16d5072e1b7e 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -841,7 +841,7 @@ static int ceph_writepages_start(struct address_space *mapping, wbc->sync_mode == WB_SYNC_NONE ? "NONE" : (wbc->sync_mode == WB_SYNC_ALL ? "ALL" : "HOLD")); - if (READ_ONCE(fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) { + if (READ_ONCE(fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) { if (ci->i_wrbuffer_ref > 0) { pr_warn_ratelimited( "writepage_start %p %lld forced umount\n", @@ -1265,7 +1265,7 @@ ceph_find_incompatible(struct page *page) struct ceph_fs_client *fsc = ceph_inode_to_client(inode); struct ceph_inode_info *ci = ceph_inode(inode); - if (READ_ONCE(fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) { + if (READ_ONCE(fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) { dout(" page %p forced umount\n", page); return ERR_PTR(-EIO); } diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 2ee3f316afcf..12fe4d0ae958 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -2735,7 +2735,7 @@ static int try_get_cap_refs(struct inode *inode, int need, int want, goto out_unlock; } - if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) { + if (READ_ONCE(mdsc->fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) { dout("get_cap_refs %p forced umount\n", inode); ret = -EIO; goto out_unlock; diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 526faf4778ce..02b11a4a4d39 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -1888,7 +1888,7 @@ static void ceph_do_invalidate_pages(struct inode *inode) mutex_lock(&ci->i_truncate_mutex); - if (READ_ONCE(fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) { + if (READ_ONCE(fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) { pr_warn_ratelimited("invalidate_pages %p %lld forced umount\n", inode, ceph_ino(inode)); mapping_set_error(inode->i_mapping, -EIO); diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 6b408851eea1..91de271d0093 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -1595,7 +1595,7 @@ static int remove_session_caps_cb(struct inode *inode, struct ceph_cap *cap, struct ceph_cap_flush *cf; struct ceph_mds_client *mdsc = fsc->mdsc; - if (READ_ONCE(fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) { + if (READ_ONCE(fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) { if (inode->i_data.nrpages > 0) invalidate = true; if (ci->i_wrbuffer_ref > 0) @@ -4658,7 +4658,7 @@ void ceph_mdsc_sync(struct ceph_mds_client *mdsc) { u64 want_tid, want_flush; - if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) + if (READ_ONCE(mdsc->fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) return; dout("sync\n"); diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 2516304379d3..2f530a111b3a 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -832,6 +832,13 @@ static void destroy_caches(void) ceph_fscache_unregister(); } +static void __ceph_umount_begin(struct ceph_fs_client *fsc) +{ + ceph_osdc_abort_requests(&fsc->client->osdc, -EIO); + ceph_mdsc_force_umount(fsc->mdsc); + fsc->filp_gen++; // invalidate open files +} + /* * ceph_umount_begin - initiate forced umount. Tear down the * mount, skipping steps that may hang while waiting for server(s). @@ -844,9 +851,7 @@ static void ceph_umount_begin(struct super_block *sb) if (!fsc) return; fsc->mount_state = CEPH_MOUNT_SHUTDOWN; - ceph_osdc_abort_requests(&fsc->client->osdc, -EIO); - ceph_mdsc_force_umount(fsc->mdsc); - fsc->filp_gen++; // invalidate open files + __ceph_umount_begin(fsc); } static const struct super_operations ceph_super_ops = { @@ -1235,7 +1240,8 @@ int ceph_force_reconnect(struct super_block *sb) struct ceph_fs_client *fsc = ceph_sb_to_client(sb); int err = 0; - ceph_umount_begin(sb); + fsc->mount_state = CEPH_MOUNT_RECOVER; + __ceph_umount_begin(fsc); /* Make sure all page caches get invalidated. * see remove_session_caps_cb() */ diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h index c8645f0b797d..eb5a7ca13f9c 100644 --- a/include/linux/ceph/libceph.h +++ b/include/linux/ceph/libceph.h @@ -104,6 +104,7 @@ enum { CEPH_MOUNT_UNMOUNTING, CEPH_MOUNT_UNMOUNTED, CEPH_MOUNT_SHUTDOWN, + CEPH_MOUNT_RECOVER, }; static inline unsigned long ceph_timeout_jiffies(unsigned long timeout) From patchwork Wed Oct 7 12:16:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 11820527 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C3CC9618 for ; Wed, 7 Oct 2020 12:17:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A428F207EA for ; Wed, 7 Oct 2020 12:17:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073029; bh=DM3lhiyb9vtqaeq4r9CabQrC5813XAm1UlasKR7oEX0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=O1IbDEzEhLp176jRwvfO/qk1RdL/ohLIa4/T2v8TBmSapH6Pgt/Zy/BoSK2n+dPd6 bHGk54lM77p2jZBu3GomV0/MxAnld0NE7KNZH19Gm2vcykYt8++Kq8S6rZKdPp9Oyu 8kw01HdfLgNi8AdEXRHdjJDr3ies6vXCutgsaD4E= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728177AbgJGMRI (ORCPT ); Wed, 7 Oct 2020 08:17:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:41420 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727978AbgJGMRH (ORCPT ); Wed, 7 Oct 2020 08:17:07 -0400 Received: from tleilax.com (68-20-15-154.lightspeed.rlghnc.sbcglobal.net [68.20.15.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7605A20870; Wed, 7 Oct 2020 12:17:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073027; bh=DM3lhiyb9vtqaeq4r9CabQrC5813XAm1UlasKR7oEX0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aeN0kCc2bp5YQc3DvqeGZhu0C49akP0qSbsd/FVyMHTJ+GCckNwvZogM8nyGiaDbl 2ErkODE3YsaWUSSWIOKdQ8G3zEw9fduo+rMeC6d8kDjtMFn3thkEkduphWzLCfVKGs jvnEPEPbdI7iictlWs1pSaEyOD3BDre5bNhyZVWQ= From: Jeff Layton To: ceph-devel@vger.kernel.org Cc: idryomov@gmail.com, ukernel@gmail.com, pdonnell@redhat.com Subject: [PATCH v4 4/5] ceph: remove timeout on allowing reconnect after blocklisting Date: Wed, 7 Oct 2020 08:16:59 -0400 Message-Id: <20201007121700.10489-5-jlayton@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201007121700.10489-1-jlayton@kernel.org> References: <20201007121700.10489-1-jlayton@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org 30 minutes is a long time to wait, and this makes it difficult to test the feature by manually blocklisting clients. Remove the timeout infrastructure and just allow the client to reconnect at will. Signed-off-by: Jeff Layton --- fs/ceph/mds_client.c | 5 ----- fs/ceph/super.h | 1 - 2 files changed, 6 deletions(-) diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 91de271d0093..240eee5baa0f 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -4374,12 +4374,7 @@ static void maybe_recover_session(struct ceph_mds_client *mdsc) if (!READ_ONCE(fsc->blocklisted)) return; - if (fsc->last_auto_reconnect && - time_before(jiffies, fsc->last_auto_reconnect + HZ * 60 * 30)) - return; - pr_info("auto reconnect after blocklisted\n"); - fsc->last_auto_reconnect = jiffies; ceph_force_reconnect(fsc->sb); } diff --git a/fs/ceph/super.h b/fs/ceph/super.h index d0cb6a51c6a4..9ced23b092f5 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -108,7 +108,6 @@ struct ceph_fs_client { int mount_state; - unsigned long last_auto_reconnect; bool blocklisted; bool have_copy_from2; From patchwork Wed Oct 7 12:17:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 11820531 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8BAD61580 for ; Wed, 7 Oct 2020 12:17:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6778520789 for ; Wed, 7 Oct 2020 12:17:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073032; bh=91jClrhQPxOGVuFdvLURrWkOc1jDSfgyhsB+GUDZdnQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=CmpD1B4RMGk78AyP1/wj2p3vGYEW90JmZLsMAqSh8uca58sN1io1xH6MWlZQ8Xt8Z NBUjzIL76q35/Fddc8TrOj+tk1YYlxf3IhluJlfT8DrLrQ0XIcmIKbx1b/daS7Mh8J gNlxpt9b9HJ8u/qyTK2SSU8H1SUNDjoOiu6u8Wdw= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728181AbgJGMRL (ORCPT ); Wed, 7 Oct 2020 08:17:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:41428 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728167AbgJGMRI (ORCPT ); Wed, 7 Oct 2020 08:17:08 -0400 Received: from tleilax.com (68-20-15-154.lightspeed.rlghnc.sbcglobal.net [68.20.15.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 35D4220789; Wed, 7 Oct 2020 12:17:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1602073027; bh=91jClrhQPxOGVuFdvLURrWkOc1jDSfgyhsB+GUDZdnQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F4EMQF/qllKHukKVt4upRfKNBUKWiSAJuVtpEtXSLrbmgDTO7NoPB9sS4FUD7QhTC GcRzCqNZ3/Thk5S5+cTkITqKFwdMV3N5WqHyYla6fYfdKYNA5/zQE5SvCbHGKAf0el 8jR78NrAWGdnHAV9HUpO7uU5uecSEO1p01j3ANXI= From: Jeff Layton To: ceph-devel@vger.kernel.org Cc: idryomov@gmail.com, ukernel@gmail.com, pdonnell@redhat.com Subject: [PATCH v4 5/5] ceph: queue MDS requests to REJECTED sessions when CLEANRECOVER is set Date: Wed, 7 Oct 2020 08:17:00 -0400 Message-Id: <20201007121700.10489-6-jlayton@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201007121700.10489-1-jlayton@kernel.org> References: <20201007121700.10489-1-jlayton@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org Ilya noticed that the first access to a blacklisted mount would often get back -EACCES, but then subsequent calls would be OK. The problem is in __do_request. If the session is marked as REJECTED, a hard error is returned instead of waiting for a new session to come into being. When the session is REJECTED and the mount was done with recover_session=clean, queue the request to the waiting_for_map queue, which will be awoken after tearing down the old session. We can only do this for sync requests though, so check for async ones first and just let the callers redrive a sync request. URL: https://tracker.ceph.com/issues/47385 Reported-by: Ilya Dryomov Signed-off-by: Jeff Layton --- fs/ceph/mds_client.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 240eee5baa0f..06f51e76f586 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -2818,10 +2818,6 @@ static void __do_request(struct ceph_mds_client *mdsc, ceph_session_state_name(session->s_state)); if (session->s_state != CEPH_MDS_SESSION_OPEN && session->s_state != CEPH_MDS_SESSION_HUNG) { - if (session->s_state == CEPH_MDS_SESSION_REJECTED) { - err = -EACCES; - goto out_session; - } /* * We cannot queue async requests since the caps and delegated * inodes are bound to the session. Just return -EJUKEBOX and @@ -2831,6 +2827,20 @@ static void __do_request(struct ceph_mds_client *mdsc, err = -EJUKEBOX; goto out_session; } + + /* + * If the session has been REJECTED, then return a hard error, + * unless it's a CLEANRECOVER mount, in which case we'll queue + * it to the mdsc queue. + */ + if (session->s_state == CEPH_MDS_SESSION_REJECTED) { + if (ceph_test_mount_opt(mdsc->fsc, CLEANRECOVER)) + list_add(&req->r_wait, &mdsc->waiting_for_map); + else + err = -EACCES; + goto out_session; + } + if (session->s_state == CEPH_MDS_SESSION_NEW || session->s_state == CEPH_MDS_SESSION_CLOSING) { err = __open_session(mdsc, session);