Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for autoexpand property #7629

Merged
merged 1 commit into from
Jul 23, 2018

Commits on Jul 13, 2018

  1. Add support for autoexpand property

    While the autoexpand property may seem like a small feature it
    depends on a significant amount of system infrastructure.  Enough
    of that infrastructure is now in place with a few modifications
    for Linux it can be supported.
    
    Auto-expand works as follows; when a block device is modified
    (re-sized, closed after being open r/w, etc) a change uevent is
    generated for udev.  The ZED, which is monitoring udev events,
    passes the change event along to zfs_deliver_dle() if the disk
    or partition contains a zfs_member as identified by blkid.
    
    From here the device is matched against all imported pool vdevs
    using the vdev_guid which was read from the label by blkid.  If
    a match is found the ZED reopens the pool vdev.  This re-opening
    is important because it allows the vdev to be briefly closed so
    the disk partition table can be re-read.  Otherwise, it wouldn't
    be possible to report thee maximum possible expansion size.
    
    Finally, if the property autoexpand=on a vdev expansion will be
    attempted.  After performing some sanity checks on the disk to
    verify that it is safe to expand,  the primary partition (-part1)
    will be expanded and the partition table updated.  The partition
    is then re-opened (again) to detect the updated size which allows
    the new capacity to be used.
    
    In order to make all of the above possible the following changes
    were required:
    
    * Updated the zpool_expand_001_pos and zpool_expand_003_pos tests.
      These tests now create a pool which is layered on a loopback,
      scsi_debug, and file vdev.  This allows for testing of non-
      partitioned block device (loopback), a partition block device
      (scsi_debug), and a file which does not receive udev change
      events.  This provided for better test coverage, and by removing
      the layering on ZFS volumes there issues surrounding layering
      one pool on another are avoided.
    
    * zpool_find_vdev_by_physpath() updated to accept a vdev guid.
      This allows for matching by guid rather than path which is a
      more reliable way for the ZED to reference a vdev.
    
    * Fixed zfs_zevent_wait() signal handling which could result
      in the ZED spinning when a signal was not handled.
    
    * Removed vdev_disk_rrpart() functionality which can be abandoned
      in favor of kernel provided blkdev_reread_part() function.
    
    * Added a rwlock which is held as a writer while a disk is being
      reopened.  This is important to prevent errors from occurring
      for any configuration related IOs which bypass the SCL_ZIO lock.
      The zpool_reopen_007_pos.ksh test case was added to verify IO
      error are never observed when reopening.  This is not expected
      to impact IO performance.
    
    Additional fixes which aren't critical but were discovered and
    resolved in the course of developing this functionality.
    
    * Added PHYS_PATH="/dev/zvol/dataset" to the vdev configuration for
      ZFS volumes.  This is as good as a unique physical path, while the
      volumes are not used in the test cases anymore for other reasons
      this improvement was included.
    
    Signed-off-by: Sara Hartse <sara.hartse@delphix.com>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Issue openzfs#120
    Issue openzfs#2437
    Issue openzfs#5771
    Issue openzfs#7366
    Issue openzfs#7582
    behlendorf committed Jul 13, 2018
    Configuration menu
    Copy the full SHA
    b49b09f View commit details
    Browse the repository at this point in the history