commit c419b886b7520e1a92a984352baa0e122ff050e9
Author: Andrew Price <anprice@redhat.com>
Date: Thu Jan 26 11:05:42 2017 +0000
mkfs.gfs2: Disable rgrp alignment when dev topology is unsuitable
If optimal_io_size is not a multiple of minimum_io_size then the values
are not reliable swidth and sunit values, so disable rgrp stripe
alignment in that case.
Resolves: rhbz#1437009
Signed-off-by: Andrew Price <anprice@redhat.com>
diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c
index 4436f93..c3497a8 100644
--- a/gfs2/mkfs/main_mkfs.c
+++ b/gfs2/mkfs/main_mkfs.c
@@ -590,8 +590,14 @@ static lgfs2_rgrps_t rgs_init(struct mkfs_opts *opts, struct gfs2_sbd *sdp)
al_off = opts->sunit / sdp->bsize;
}
} else if (opts->align) {
- if ((opts->dev.minimum_io_size > opts->dev.physical_sector_size) &&
- (opts->dev.optimal_io_size > opts->dev.physical_sector_size)) {
+ if (opts->dev.optimal_io_size <= opts->dev.physical_sector_size ||
+ opts->dev.minimum_io_size <= opts->dev.physical_sector_size ||
+ (opts->dev.optimal_io_size % opts->dev.minimum_io_size) != 0) {
+ /* If optimal_io_size is not a multiple of minimum_io_size then
+ the values are not reliable swidth and sunit values, so disable
+ rgrp alignment */
+ opts->align = 0;
+ } else {
al_base = opts->dev.optimal_io_size / sdp->bsize;
al_off = opts->dev.minimum_io_size / sdp->bsize;
}