When replacing a faulted device which was previously handled by a spare 
multiple levels of nested interior VDEVs will be present in the pool 
configuration: `get_replication()` needs to handle this situation gracefully to 
let zpool add new devices to the pool:

```
root@openindiana:~# POOLNAME='testpool'
root@openindiana:~# TMPDIR='/var/tmp'
root@openindiana:~# sudo zinject -c all
removed all registered handlers
root@openindiana:~# sudo zpool destroy -f $POOLNAME
root@openindiana:~# rm -f $TMPDIR/file-vdev* rm -f $TMPDIR/file-spare*
root@openindiana:~# truncate -s 512m $TMPDIR/file-vdev1
root@openindiana:~# truncate -s 512m $TMPDIR/file-vdev2
root@openindiana:~# sudo zpool create -f -O mountpoint=none $POOLNAME mirror 
$TMPDIR/file-vdev1 $TMPDIR/file-vdev2
root@openindiana:~# truncate -s 512m $TMPDIR/file-spare1
root@openindiana:~# sudo zpool add $POOLNAME spare $TMPDIR/file-spare1
root@openindiana:~# sudo zinject -d $TMPDIR/file-vdev2 -e nxio -T all -f 100 
$POOLNAME
Added handler 1 with the following properties:
  pool: testpool
  vdev: 79ad17dc1b97bcd5
root@openindiana:~# sudo zpool scrub $POOLNAME
root@openindiana:~# sleep 1
root@openindiana:~# truncate -s 512m $TMPDIR/file-vdev3
root@openindiana:~# sudo zpool replace $POOLNAME $TMPDIR/file-vdev2 
$TMPDIR/file-vdev3
root@openindiana:~# truncate -s 512m $TMPDIR/file-spare2
root@openindiana:~# sudo zpool add $POOLNAME spare $TMPDIR/file-spare2
Assertion failed: nvlist_lookup_string(cnv, "path", &path) == 0, file 
zpool_vdev.c, line 651
Abort
root@openindiana:~# sudo zpool add $POOLNAME $TMPDIR/file-spare2
Assertion failed: nvlist_lookup_string(cnv, "path", &path) == 0, file 
zpool_vdev.c, line 651
Abort
root@openindiana:~# uname -a
SunOS openindiana 5.11 master-0-gb3c0a3b184 i86pc i386 i86pc
root@openindiana:~# zpool status $POOLNAME
  pool: testpool
 state: DEGRADED
  scan: resilvered 308K in 0h0m with 0 errors on Thu Dec 28 21:46:20 2017
config:

        NAME                         STATE     READ WRITE CKSUM
        testpool                     DEGRADED     0     0     0
          mirror-0                   DEGRADED     0     0     0
            /var/tmp/file-vdev1      ONLINE       0     0     0
            spare-1                  UNAVAIL      0     0     0
              replacing-0            UNAVAIL      0     0     0
                /var/tmp/file-vdev2  UNAVAIL      0     0     0  cannot open
                /var/tmp/file-vdev3  ONLINE       0     0     0
              /var/tmp/file-spare1   ONLINE       0     0     0
        spares
          /var/tmp/file-spare1       INUSE     currently in use

errors: No known data errors
root@openindiana:~# 
```


Illumos issue: https://www.illumos.org/issues/8941
ZFS on Linux PR: https://github.com/zfsonlinux/zfs/pull/6996
You can view, comment on, or merge this pull request online at:

  https://github.com/openzfs/openzfs/pull/511

-- Commit Summary --

  * 8941 Assertion failed in get_replication() with nested interior VDEVs

-- File Changes --

    M usr/src/cmd/zpool/zpool_vdev.c (6)
    M usr/src/pkg/manifests/system-test-zfstest.mf (3)
    M usr/src/test/zfs-tests/runfiles/delphix.run (3)
    M usr/src/test/zfs-tests/runfiles/omnios.run (3)
    M usr/src/test/zfs-tests/runfiles/openindiana.run (3)
    A 
usr/src/test/zfs-tests/tests/functional/cli_root/zpool_add/add_nested_replacing_spare.ksh
 (111)

-- Patch Links --

https://github.com/openzfs/openzfs/pull/511.patch
https://github.com/openzfs/openzfs/pull/511.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/511

------------------------------------------
openzfs-developer
Archives: 
https://openzfs.topicbox.com/groups/developer/discussions/Ta389f57c9b74aa30-M327a2c9d901da122258396ff
Powered by Topicbox: https://topicbox.com

Reply via email to