All of lore.kernel.org
 help / color / mirror / Atom feed
* master - device: use BLKPBSZGET for physical block size only if the op is available, otherwise use logical block size
@ 2013-12-17 14:17 Peter Rajnoha
  0 siblings, 0 replies; only message in thread
From: Peter Rajnoha @ 2013-12-17 14:17 UTC (permalink / raw)
  To: lvm-devel

Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=3652083f38ca21276c8467f54eeaa8f1365ec6fe
Commit:        3652083f38ca21276c8467f54eeaa8f1365ec6fe
Parent:        24639be558a9d4561a34f2b76485b227aed8e9c3
Author:        Peter Rajnoha <prajnoha@redhat.com>
AuthorDate:    Tue Dec 17 15:16:25 2013 +0100
Committer:     Peter Rajnoha <prajnoha@redhat.com>
CommitterDate: Tue Dec 17 15:17:28 2013 +0100

device: use BLKPBSZGET for physical block size only if the op is available, otherwise use logical block size

Older kernels < 2.6.32 don't have BLKPBSZGET defined.
---
 lib/device/dev-io.c |   25 ++++++++++++++++---------
 1 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c
index 45700e5..766d9af 100644
--- a/lib/device/dev-io.c
+++ b/lib/device/dev-io.c
@@ -136,15 +136,6 @@ int dev_get_block_size(struct device *dev, unsigned int *physical_block_size, un
 	if (needs_open && !dev_open_readonly(dev))
 		return_0;
 
-	if (dev->phys_block_size == -1) {
-		if (ioctl(dev_fd(dev), BLKPBSZGET, &dev->phys_block_size) < 0) {
-			log_sys_error("ioctl BLKPBSZGET", name);
-			r = 0;
-			goto out;
-		}
-		log_debug_devs("%s: physical block size is %u bytes", name, dev->phys_block_size);
-	}
-
 	if (dev->block_size == -1) {
 		if (ioctl(dev_fd(dev), BLKBSZGET, &dev->block_size) < 0) {
 			log_sys_error("ioctl BLKBSZGET", name);
@@ -154,6 +145,22 @@ int dev_get_block_size(struct device *dev, unsigned int *physical_block_size, un
 		log_debug_devs("%s: block size is %u bytes", name, dev->block_size);
 	}
 
+#ifdef BLKPBSZGET
+	/* BLKPBSZGET is available in kernel >= 2.6.32 only */
+	if (dev->phys_block_size == -1) {
+		if (ioctl(dev_fd(dev), BLKPBSZGET, &dev->phys_block_size) < 0) {
+			log_sys_error("ioctl BLKPBSZGET", name);
+			r = 0;
+			goto out;
+		}
+		log_debug_devs("%s: physical block size is %u bytes", name, dev->phys_block_size);
+	}
+#else
+	/* if we can't get physical block size, just use logical block size instead */
+	dev->phys_block_size = dev->block_size;
+	log_debug_devs("%s: physical block size can't be determined, using logical "
+		       "block size of %u bytes instead", name, dev->phys_block_size);
+#endif
 	*physical_block_size = (unsigned int) dev->phys_block_size;
 	*block_size = (unsigned int) dev->block_size;
 out:



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-12-17 14:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-17 14:17 master - device: use BLKPBSZGET for physical block size only if the op is available, otherwise use logical block size Peter Rajnoha

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.