Project

General

Profile

Bug #10889

zpool reports 16E expandsize on disks with oddball number of sector

Added by Jerry Jelinek 7 months ago.

Status:
New
Priority:
Normal
Assignee:
Category:
zfs - Zettabyte File System
Start date:
2019-05-01
Due date:
% Done:

0%

Estimated time:
Difficulty:
Medium
Tags:
needs-triage

Description

ZoL: 0c637f3100f zpool reports 16E expandsize on disks with oddball number of sector

The issue is caused by a small discrepancy in how userland creates the
partition layout and the kernel estimates available space:

  • zpool command: subtract 9M from the usable device size, then align
    to 1M boundary. 9M is the sum of 1M "start" partition alignment + 8M
    EFI "reserved" partition.
  • kernel module: subtract 10M from the device size. 10M is the sum of
    1M "start" partition alignment + 1m "end" partition alignment + 8M
    EFI "reserved" partition.

For devices where the number of sectors is not a multiple of the
alignment size the zpool command will create a partition layout which
reserves less than 1M after the 8M EFI "reserved" partition:

Disk /dev/sda: 1024 MiB, 1073739776 bytes, 2097148 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 49811D40-16F4-4E41-84A9-387703950D7F
Device       Start     End Sectors  Size Type
/dev/sda1 2048 2078719 2076672 1014M Solaris /usr & Apple ZFS
/dev/sda9 2078720 2095103 16384 8M Solaris reserved 1

When the kernel module vdev_open() the device its max_asize ends up
being slightly smaller than asize: this results in a huge number (16E)
reported by metaslab_class_expandable_space().

This change prevents bdev_max_capacity() from returing a size smaller
than bdev_capacity().

Also available in: Atom PDF