Block devices may set minimum or optimal IO hints equal to
blocksize; in this case there is really nothing for ext4
to do with this information (i.e. search for a block-aligned
allocation?) so don't set fs geometry with single-block
values.
Zeev also reported that with a block-sized stripe, the
ext4 allocator spends time spinning in ext4_mb_scan_aligned(),
oddly enough.
Reported-by: Zeev Tarantov <zeev.tarantov@gmail.com>
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
if ((opt_io == 0) && (psector_size > blocksize))
opt_io = psector_size;
- fs_param->s_raid_stride = min_io / blocksize;
- fs_param->s_raid_stripe_width = opt_io / blocksize;
+ /* setting stripe/stride to blocksize is pointless */
+ if (min_io > blocksize)
+ fs_param->s_raid_stride = min_io / blocksize;
+ if (opt_io > blocksize)
+ fs_param->s_raid_stripe_width = opt_io / blocksize;
rc = blkid_topology_get_alignment_offset(tp);
out: