mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
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.
This commit is contained in:
parent
24639be558
commit
3652083f38
@ -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))
|
if (needs_open && !dev_open_readonly(dev))
|
||||||
return_0;
|
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 (dev->block_size == -1) {
|
||||||
if (ioctl(dev_fd(dev), BLKBSZGET, &dev->block_size) < 0) {
|
if (ioctl(dev_fd(dev), BLKBSZGET, &dev->block_size) < 0) {
|
||||||
log_sys_error("ioctl BLKBSZGET", name);
|
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);
|
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;
|
*physical_block_size = (unsigned int) dev->phys_block_size;
|
||||||
*block_size = (unsigned int) dev->block_size;
|
*block_size = (unsigned int) dev->block_size;
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user