| From 18571455d29893e83bdfae5394b57bb49a5ae7d5 Mon Sep 17 00:00:00 2001 |
| From: Xiubo Li <xiubli@redhat.com> |
| Date: Tue, 10 Dec 2019 20:29:40 -0500 |
| Subject: [PATCH] ceph: check availability of mds cluster on mount after wait |
| timeout |
| |
| commit 97820058fb2831a4b203981fa2566ceaaa396103 upstream. |
| |
| If all the MDS daemons are down for some reason, then the first mount |
| attempt will fail with EIO after the mount request times out. A mount |
| attempt will also fail with EIO if all of the MDS's are laggy. |
| |
| This patch changes the code to return -EHOSTUNREACH in these situations |
| and adds a pr_info error message to help the admin determine the cause. |
| |
| URL: https://tracker.ceph.com/issues/4386 |
| Signed-off-by: Xiubo Li <xiubli@redhat.com> |
| Reviewed-by: Jeff Layton <jlayton@kernel.org> |
| Signed-off-by: Ilya Dryomov <idryomov@gmail.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c |
| index 925ce2ea7331..e8dac895d450 100644 |
| --- a/fs/ceph/mds_client.c |
| +++ b/fs/ceph/mds_client.c |
| @@ -2520,8 +2520,7 @@ static void __do_request(struct ceph_mds_client *mdsc, |
| if (!(mdsc->fsc->mount_options->flags & |
| CEPH_MOUNT_OPT_MOUNTWAIT) && |
| !ceph_mdsmap_is_cluster_available(mdsc->mdsmap)) { |
| - err = -ENOENT; |
| - pr_info("probably no mds server is up\n"); |
| + err = -EHOSTUNREACH; |
| goto finish; |
| } |
| } |
| diff --git a/fs/ceph/super.c b/fs/ceph/super.c |
| index 4ce55e0a14da..52c8145380b5 100644 |
| --- a/fs/ceph/super.c |
| +++ b/fs/ceph/super.c |
| @@ -1119,6 +1119,11 @@ static struct dentry *ceph_mount(struct file_system_type *fs_type, |
| return res; |
| |
| out_splat: |
| + if (!ceph_mdsmap_is_cluster_available(fsc->mdsc->mdsmap)) { |
| + pr_info("No mds server is up or the cluster is laggy\n"); |
| + err = -EHOSTUNREACH; |
| + } |
| + |
| ceph_mdsc_close_sessions(fsc->mdsc); |
| deactivate_locked_super(sb); |
| goto out_final; |
| -- |
| 2.7.4 |
| |