Linux 2.6.26 compat, lookup_bdev()
[zfs.git] / include / linux / blkdev_compat.h
index a5294ce..9d3e6f0 100644 (file)
@@ -393,14 +393,37 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags)
 #endif /* HAVE_1ARG_INVALIDATE_BDEV */
 
 /*
+ * 2.6.27 API change
+ * The function was exported for use, prior to this it existed by the
+ * symbol was not exported.
+ */
+#ifndef HAVE_LOOKUP_BDEV
+# define lookup_bdev(path)             ERR_PTR(-ENOTSUP)
+#endif
+
+/*
  * 2.6.30 API change
- * Change to make it explicit there this is the logical block size.
+ * 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.
  */
-#ifdef HAVE_BDEV_LOGICAL_BLOCK_SIZE
-# define vdev_bdev_block_size(bdev)    bdev_logical_block_size(bdev)
+#ifdef HAVE_BDEV_PHYSICAL_BLOCK_SIZE
+# define vdev_bdev_block_size(bdev)    bdev_physical_block_size(bdev)
 #else
-# define vdev_bdev_block_size(bdev)    bdev_hardsect_size(bdev)
-#endif
+# 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 */
 
 /*
  * 2.6.37 API change