ceph: fix mdsmap decode when there are MDS's beyond max_mds
authorXiubo Li <xiubli@redhat.com>
Fri, 5 Nov 2021 09:34:18 +0000 (17:34 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Nov 2021 02:29:52 +0000 (03:29 +0100)
If the max_mds is decreased in a cephfs cluster, there is a window
of time before the MDSs are removed. If a map goes out during this
period, the mdsmap may show the decreased max_mds but still shows
those MDSes as in or in the export target list.

Ensure that we don't fail the map decode in that case.

Cc: stable@vger.kernel.org
URL: https://tracker.ceph.com/issues/52436
Fixes: d517b3983dd3 ("ceph: reconnect to the export targets on new mdsmaps")
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/mdsmap.c

index 61d67cb..3038773 100644 (file)
@@ -263,10 +263,6 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2)
                                goto nomem;
                        for (j = 0; j < num_export_targets; j++) {
                                target = ceph_decode_32(&pexport_targets);
-                               if (target >= m->possible_max_rank) {
-                                       err = -EIO;
-                                       goto corrupt;
-                               }
                                info->export_targets[j] = target;
                        }
                } else {