diff options
author | Pawel Baldysiak <pawel.baldysiak@intel.com> | 2016-11-17 14:58:35 +0100 |
---|---|---|
committer | Jes Sorensen <Jes.Sorensen@redhat.com> | 2016-11-17 15:24:18 +0100 |
commit | 329715091c5d308bdf155fe75ec03c432ff21999 (patch) | |
tree | 85eb59e1fbb893c69a56053767e8b29fcd3f8c50 | |
parent | super1: fix setting bad block log offset in write_init_super1() (diff) | |
download | mdadm-329715091c5d308bdf155fe75ec03c432ff21999.tar.xz mdadm-329715091c5d308bdf155fe75ec03c432ff21999.zip |
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 <pawel.baldysiak@intel.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
-rwxr-xr-x | mdadm.h | 1 | ||||
-rw-r--r-- | super1.c | 3 | ||||
-rw-r--r-- | util.c | 18 |
3 files changed, 19 insertions, 3 deletions
@@ -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); @@ -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; } @@ -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 */ |