From 329715091c5d308bdf155fe75ec03c432ff21999 Mon Sep 17 00:00:00 2001 From: Pawel Baldysiak Date: Thu, 17 Nov 2016 14:58:35 +0100 Subject: [PATCH] Add function for getting member drive sector size This patch introduces the function for getting sector size of given device (fd). Signed-off-by: Pawel Baldysiak Signed-off-by: Jes Sorensen --- mdadm.h | 1 + super1.c | 3 +-- util.c | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/mdadm.h b/mdadm.h index 41a44945..240ab7f8 100755 --- a/mdadm.h +++ b/mdadm.h @@ -1112,6 +1112,7 @@ static inline struct supertype *guess_super(int fd) { } extern struct supertype *dup_super(struct supertype *st); extern int get_dev_size(int fd, char *dname, unsigned long long *sizep); +extern int get_dev_sector_size(int fd, char *dname, unsigned int *sectsizep); extern int must_be_container(int fd); extern int dev_size_from_id(dev_t id, unsigned long long *size); void wait_for(char *dev, int fd); diff --git a/super1.c b/super1.c index 1d03a0ac..d3234392 100644 --- a/super1.c +++ b/super1.c @@ -213,8 +213,7 @@ struct align_fd { static void init_afd(struct align_fd *afd, int fd) { afd->fd = fd; - - if (ioctl(afd->fd, BLKSSZGET, &afd->blk_sz) != 0) + if (!get_dev_sector_size(afd->fd, NULL, (unsigned int *)&afd->blk_sz)) afd->blk_sz = 512; } diff --git a/util.c b/util.c index 9e4718fd..883eaa41 100644 --- a/util.c +++ b/util.c @@ -1324,7 +1324,7 @@ int get_dev_size(int fd, char *dname, unsigned long long *sizep) ldsize <<= 9; } else { if (dname) - pr_err("Cannot get size of %s: %s\b", + pr_err("Cannot get size of %s: %s\n", dname, strerror(errno)); return 0; } @@ -1333,6 +1333,22 @@ int get_dev_size(int fd, char *dname, unsigned long long *sizep) return 1; } +/* Return sector size of device in bytes */ +int get_dev_sector_size(int fd, char *dname, unsigned int *sectsizep) +{ + unsigned int sectsize; + + if (ioctl(fd, BLKSSZGET, §size) != 0) { + if (dname) + pr_err("Cannot get sector size of %s: %s\n", + dname, strerror(errno)); + return 0; + } + + *sectsizep = sectsize; + return 1; +} + /* Return true if this can only be a container, not a member device. * i.e. is and md device and size is zero */ -- 2.39.2