Author: mav
Date: Thu Aug  2 23:56:07 2018
New Revision: 337209
URL: https://svnweb.freebsd.org/changeset/base/337209

Log:
  MFV r337208: 9591 ms_shift can be incorrectly changed in MOS config for
  indirect vdevs that have been historically expanded
  
  illumos/illumos-gate@11f6a9680e013a7c9c57dc0b64d3e91e2eee1a6b
  
  Reviewed by: Matthew Ahrens <mahr...@delphix.com>
  Reviewed by: George Wilson <gwil...@zfsmail.com>
  Reviewed by: John Kennedy <john.kenn...@delphix.com>
  Reviewed by: Prashanth Sreenivasa <p...@delphix.com>
  Reviewed by: Tim Chase <t...@chase2k.com>
  Approved by: Richard Lowe <richl...@richlowe.net>
  Author:     Serapheim Dimitropoulos <seraph...@delphix.com>

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
Directory Properties:
  head/sys/cddl/contrib/opensolaris/   (props changed)

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c    Thu Aug 
 2 23:52:29 2018        (r337208)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c    Thu Aug 
 2 23:56:07 2018        (r337209)
@@ -22,7 +22,7 @@
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011, 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
  * Copyright 2017 Joyent, Inc.
  */
 
@@ -559,6 +559,18 @@ spa_config_update(spa_t *spa, int what)
                 */
                for (c = 0; c < rvd->vdev_children; c++) {
                        vdev_t *tvd = rvd->vdev_child[c];
+
+                       /*
+                        * Explicitly skip vdevs that are indirect or
+                        * log vdevs that are being removed. The reason
+                        * is that both of those can have vdev_ms_array
+                        * set to 0 and we wouldn't want to change their
+                        * metaslab size nor call vdev_expand() on them.
+                        */
+                       if (!vdev_is_concrete(tvd) ||
+                           (tvd->vdev_islog && tvd->vdev_removing))
+                               continue;
+
                        if (tvd->vdev_ms_array == 0) {
                                vdev_ashift_optimize(tvd);
                                vdev_metaslab_set_size(tvd);

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c  Thu Aug  2 
23:52:29 2018        (r337208)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c  Thu Aug  2 
23:56:07 2018        (r337209)
@@ -4284,11 +4284,11 @@ vdev_expand(vdev_t *vd, uint64_t txg)
 {
        ASSERT(vd->vdev_top == vd);
        ASSERT(spa_config_held(vd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL);
+       ASSERT(vdev_is_concrete(vd));
 
        vdev_set_deflate_ratio(vd);
 
-       if ((vd->vdev_asize >> vd->vdev_ms_shift) > vd->vdev_ms_count &&
-           vdev_is_concrete(vd)) {
+       if ((vd->vdev_asize >> vd->vdev_ms_shift) > vd->vdev_ms_count) {
                VERIFY(vdev_metaslab_init(vd, txg) == 0);
                vdev_config_dirty(vd);
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to