[parted-devel] [PATCH] libparted: use ioctl(BLKPBSZGET) to get phys sector size
Yang Bai
hamo.by at gmail.com
Sat Oct 20 14:49:19 UTC 2012
ping. Any comments?
Please cc to me since I am not in these 2 mailing lists.
Thanks,
Yang
On Wed, Oct 17, 2012 at 10:27 PM, Yang Bai <hamo.by at gmail.com> wrote:
> Before, we use ioctl(BLKSSZGET) to get a disk's sector size and use this
> value as both logical and physical sector size, but this value is just
> the logical sector size. For physical sector size, we should use
> ioctl(BLKPBSZGET). Since the popular of 4K AF hard disks, the logical
> sector size if different from the physical one. Without blkid, we cant
> get the right info about the disk so we could not align right the
> partitions on this disk.
> This patch has been tested on 2.6.32 kernel and we can get the right
> sector sizes without blkid.
>
> Signed-off-by: Yang Bai <hamo.by at gmail.com>
> ---
> libparted/arch/linux.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
> index e2c4139..9452977 100644
> --- a/libparted/arch/linux.c
> +++ b/libparted/arch/linux.c
> @@ -203,6 +203,7 @@ struct hd_driveid {
> #define BLKGETSIZE _IO(0x12,96) /* return device size */
> #define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */
> #define BLKSSZGET _IO(0x12,104) /* get block device sector size */
> +#define BLKPBSZGET _IO(0x12,123) /* get device physical sector size */
> #define BLKGETLASTSECT _IO(0x12,108) /* get last sector of block device */
> #define BLKSETLASTSECT _IO(0x12,109) /* set last sector of block device */
>
> @@ -659,6 +660,7 @@ _device_set_sector_size (PedDevice* dev)
> {
> LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
> int sector_size;
> + int phys_sector_size;
>
> dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
> dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
> @@ -670,7 +672,8 @@ _device_set_sector_size (PedDevice* dev)
> return;
> }
>
> - if (ioctl (arch_specific->fd, BLKSSZGET, §or_size)) {
> + if (ioctl(arch_specific->fd, BLKSSZGET, §or_size) ||
> + ioctl(arch_specific->fd, BLKPBSZGET, &phys_sector_size)) {
> ped_exception_throw (
> PED_EXCEPTION_WARNING,
> PED_EXCEPTION_OK,
> @@ -679,7 +682,7 @@ _device_set_sector_size (PedDevice* dev)
> dev->path, strerror (errno), PED_SECTOR_SIZE_DEFAULT);
> } else {
> dev->sector_size = (long long)sector_size;
> - dev->phys_sector_size = dev->sector_size;
> + dev->phys_sector_size = (long long)phys_sector_size;
> }
>
> #if USE_BLKID
> --
> 1.7.10.4
>
--
"""
Keep It Simple,Stupid.
"""
Chinese Name: 白杨
Nick Name: Hamo
Homepage: http://hamobai.com/
GPG KEY ID: 0xA4691A33
Key fingerprint = 09D5 2D78 8E2B 0995 CF8E 4331 33C4 3D24 A469 1A33
More information about the parted-devel
mailing list