From eb7cc5359d8bb50ee9a12fbb42bd98269c6d524e Mon Sep 17 00:00:00 2001 From: Shaun Tancheff Date: Wed, 13 May 2020 15:16:41 -0500 Subject: [PATCH] LU-13550 osd-zfs: snapshot with incompatible clients snapshot_create fails when clients are connected that do not support barrier requests. Log some information to help the administrator track down the connections blocking snapshot_create from succeeding. Test-Parameters: fstype=zfs Signed-off-by: Shaun Tancheff Change-Id: Ia59ea3c4c1a885e2591464cd4f8f77a1071b4786 Reviewed-on: https://review.whamcloud.com/38593 Tested-by: jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Emoly Liu Reviewed-by: Oleg Drokin --- lustre/mgs/mgs_barrier.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lustre/mgs/mgs_barrier.c b/lustre/mgs/mgs_barrier.c index 053f41d..9087055 100644 --- a/lustre/mgs/mgs_barrier.c +++ b/lustre/mgs/mgs_barrier.c @@ -254,6 +254,22 @@ bool mgs_barrier_expired(struct fs_db *fsdb, time64_t timeout) return expired > ktime_get_real_seconds(); } +static inline bool mgs_barrier_tests_disabled(struct barrier_ctl *bc, + struct obd_export *exp, + struct fs_db *fsdb) +{ + __u64 flags = exp_connect_flags(exp); + + if ((flags & OBD_CONNECT_MDS_MDS) && !(flags & OBD_CONNECT_BARRIER)) { + fsdb->fsdb_barrier_disabled = 1; + LCONSOLE_WARN("%s: Barrier incompatible connection %s\n", + bc->bc_name, + obd_uuid2str(&exp->exp_client_uuid)); + return true; + } + return false; +} + /** * Create the barrier for the given instance. * @@ -330,12 +346,8 @@ static int mgs_barrier_freeze(const struct lu_env *env, spin_lock(&mgs_obd->obd_dev_lock); list_for_each_entry(exp, &mgs_obd->obd_exports, exp_obd_chain) { - __u64 flags = exp_connect_flags(exp); - if (!!(flags & OBD_CONNECT_MDS_MDS) && - !(flags & OBD_CONNECT_BARRIER)) { - fsdb->fsdb_barrier_disabled = 1; + if (mgs_barrier_tests_disabled(bc, exp, fsdb)) break; - } } spin_unlock(&mgs_obd->obd_dev_lock); } @@ -489,12 +501,8 @@ static int mgs_barrier_thaw(const struct lu_env *env, spin_lock(&mgs_obd->obd_dev_lock); list_for_each_entry(exp, &mgs_obd->obd_exports, exp_obd_chain) { - __u64 flags = exp_connect_flags(exp); - if (!!(flags & OBD_CONNECT_MDS_MDS) && - !(flags & OBD_CONNECT_BARRIER)) { - fsdb->fsdb_barrier_disabled = 1; + if (mgs_barrier_tests_disabled(bc, exp, fsdb)) break; - } } spin_unlock(&mgs_obd->obd_dev_lock); } @@ -656,12 +664,8 @@ static int mgs_barrier_rescan(const struct lu_env *env, spin_lock(&mgs_obd->obd_dev_lock); list_for_each_entry(exp, &mgs_obd->obd_exports, exp_obd_chain) { - __u64 flags = exp_connect_flags(exp); - if (!!(flags & OBD_CONNECT_MDS_MDS) && - !(flags & OBD_CONNECT_BARRIER)) { - b_fsdb->fsdb_barrier_disabled = 1; + if (mgs_barrier_tests_disabled(bc, exp, b_fsdb)) break; - } } spin_unlock(&mgs_obd->obd_dev_lock); } -- 1.8.3.1