commit c419b886b7520e1a92a984352baa0e122ff050e9 Author: Andrew Price 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 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; }