mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Revert "Improve AF hard disk detection"
This reverts commit 395350c85d
which
accidentally introduced issue #955.
Pools using AF drives which were originally created with a sector
size of 512 bytes will now be correctly detected to have physical
sector size of 4096. This is desirable for a new pool, however for
an existing pool abruptly changing the sector size causes problems.
For this reason, this change is being reverted until the additional
logic can be added to detect the existing pool case. Existing
pools must use the ashift size stored in the label regardless of
what the disk reports. This is critical for compatibility.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #955
This commit is contained in:
parent
27ccd4147b
commit
cda4db408c
@ -1,39 +0,0 @@
|
||||
dnl #
|
||||
dnl # 2.6.30 API change
|
||||
dnl #
|
||||
dnl # The bdev_physical_block_size() interface was added to provide a way
|
||||
dnl # to determine the smallest write which can be performed without a
|
||||
dnl # read-modify-write operation. From the kernel documentation:
|
||||
dnl #
|
||||
dnl # What: /sys/block/<disk>/queue/physical_block_size
|
||||
dnl # Date: May 2009
|
||||
dnl # Contact: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
dnl # Description:
|
||||
dnl # This is the smallest unit the storage device can write
|
||||
dnl # without resorting to read-modify-write operation. It is
|
||||
dnl # usually the same as the logical block size but may be
|
||||
dnl # bigger. One example is SATA drives with 4KB sectors
|
||||
dnl # that expose a 512-byte logical block size to the
|
||||
dnl # operating system.
|
||||
dnl #
|
||||
dnl # Unfortunately, this interface isn't entirely reliable because
|
||||
dnl # drives are sometimes known to misreport this value.
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_KERNEL_BDEV_PHYSICAL_BLOCK_SIZE], [
|
||||
AC_MSG_CHECKING([whether bdev_physical_block_size() is available])
|
||||
tmp_flags="$EXTRA_KCFLAGS"
|
||||
EXTRA_KCFLAGS="-Wno-unused-but-set-variable"
|
||||
ZFS_LINUX_TRY_COMPILE([
|
||||
#include <linux/blkdev.h>
|
||||
],[
|
||||
struct block_device *bdev = NULL;
|
||||
bdev_physical_block_size(bdev);
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_BDEV_PHYSICAL_BLOCK_SIZE, 1,
|
||||
[bdev_physical_block_size() is available])
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
EXTRA_KCFLAGS="$tmp_flags"
|
||||
])
|
@ -14,7 +14,6 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||
ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE
|
||||
ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS
|
||||
ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE
|
||||
ZFS_AC_KERNEL_BDEV_PHYSICAL_BLOCK_SIZE
|
||||
ZFS_AC_KERNEL_BIO_EMPTY_BARRIER
|
||||
ZFS_AC_KERNEL_BIO_FAILFAST
|
||||
ZFS_AC_KERNEL_BIO_FAILFAST_DTD
|
||||
|
@ -394,27 +394,13 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
|
||||
|
||||
/*
|
||||
* 2.6.30 API change
|
||||
* To ensure good performance preferentially use the physical block size
|
||||
* for proper alignment. The physical size is supposed to be the internal
|
||||
* sector size used by the device. This is often 4096 byte for AF devices,
|
||||
* while a smaller 512 byte logical size is supported for compatibility.
|
||||
*
|
||||
* Unfortunately, many drives still misreport their physical sector size.
|
||||
* For devices which are known to lie you may need to manually set this
|
||||
* at pool creation time with 'zpool create -o ashift=12 ...'.
|
||||
*
|
||||
* When the physical block size interface isn't available, we fall back to
|
||||
* the logical block size interface and then the older hard sector size.
|
||||
* Change to make it explicit there this is the logical block size.
|
||||
*/
|
||||
#ifdef HAVE_BDEV_PHYSICAL_BLOCK_SIZE
|
||||
# define vdev_bdev_block_size(bdev) bdev_physical_block_size(bdev)
|
||||
#ifdef HAVE_BDEV_LOGICAL_BLOCK_SIZE
|
||||
# define vdev_bdev_block_size(bdev) bdev_logical_block_size(bdev)
|
||||
#else
|
||||
# ifdef HAVE_BDEV_LOGICAL_BLOCK_SIZE
|
||||
# define vdev_bdev_block_size(bdev) bdev_logical_block_size(bdev)
|
||||
# else
|
||||
# define vdev_bdev_block_size(bdev) bdev_hardsect_size(bdev)
|
||||
# endif /* HAVE_BDEV_LOGICAL_BLOCK_SIZE */
|
||||
#endif /* HAVE_BDEV_PHYSICAL_BLOCK_SIZE */
|
||||
# define vdev_bdev_block_size(bdev) bdev_hardsect_size(bdev)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 2.6.37 API change
|
||||
|
Loading…
Reference in New Issue
Block a user