Whamcloud - gitweb
LU-13550 osd-zfs: snapshot with incompatible clients 93/38593/2
authorShaun Tancheff <shaun.tancheff@hpe.com>
Wed, 13 May 2020 20:16:41 +0000 (15:16 -0500)
committerOleg Drokin <green@whamcloud.com>
Wed, 22 Sep 2021 04:42:26 +0000 (04:42 +0000)
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 <shaun.tancheff@hpe.com>
Change-Id: Ia59ea3c4c1a885e2591464cd4f8f77a1071b4786
Reviewed-on: https://review.whamcloud.com/38593
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Emoly Liu <emoly@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mgs/mgs_barrier.c

index 053f41d..9087055 100644 (file)
@@ -254,6 +254,22 @@ bool mgs_barrier_expired(struct fs_db *fsdb, time64_t timeout)
        return expired > ktime_get_real_seconds();
 }
 
        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.
  *
 /**
  * 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) {
                        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;
                                        break;
-                               }
                        }
                        spin_unlock(&mgs_obd->obd_dev_lock);
                }
                        }
                        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) {
                        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;
                                        break;
-                               }
                        }
                        spin_unlock(&mgs_obd->obd_dev_lock);
                }
                        }
                        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) {
                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;
                                break;
-                       }
                }
                spin_unlock(&mgs_obd->obd_dev_lock);
        }
                }
                spin_unlock(&mgs_obd->obd_dev_lock);
        }