From: Brian Foster <bfoster@redhat.com>
To: Eric Sandeen <sandeen@redhat.com>
Cc: Stan Hoeppner <stan@hardwarefreak.com>, xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH 1/2] xfsprogs: ignore stripe geom if sunit or swidth == physical sector size
Date: Wed, 29 Oct 2014 14:37:22 -0400 [thread overview]
Message-ID: <20141029183721.GA4226@bfoster.laptop> (raw)
In-Reply-To: <544FD3E1.1060000@redhat.com>
On Tue, Oct 28, 2014 at 12:35:29PM -0500, Eric Sandeen wrote:
> Today, this geometry:
>
> # modprobe scsi_debug opt_blks=2048 dev_size_mb=2048
> # blockdev --getpbsz --getss --getiomin --getioopt /dev/sdd
> 512
> 512
> 512
> 1048576
>
> will result in a warning at mkfs time, like this:
>
> # mkfs.xfs -f -d su=64k,sw=12 -l su=64k /dev/sdd
> mkfs.xfs: Specified data stripe width 1536 is not the same as the volume stripe width 2048
>
> because our geometry discovery thinks it looks like a
> valid striping setup which the commandline is overriding.
> However, a stripe unit of 512 really isn't indicative of
> a proper stripe geometry.
>
So the assumption is that the storage reports a non-physical block size
for minimum and optimal I/O sizes for geometry detection. There was a
real world scenario of this, right? Any idea of the configuration
details (e.g., raid layout) that resulted in an increased optimal I/O
size but not minimum I/O size?
This seems reasonable to me and the code looks fine, save a trailing
whitespace instance below. I'm just curious if there are any weird
corner cases where there's value in the reported optimal I/O size or the
real world situation was just noise.
> Prior to this patch, we reset only sunit *or* swidth,
> if either was equal to physical block size, but not
> necessarily both.
>
> Change the heuristic so that if either the discovered
> sunit or the discovered swidth is physical block size,
> we reset *both* to zero and ignore the geom completely.
>
> While we're at it, don't pass &dummy in for multiple
> arguments to blkid_get_topology(); that'll mean that
> inside the function, the last assignment wins, and could
> lead to unexpected results.
>
> Reported-by: Stan Hoeppner <stan@hardwarefreak.com>
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
>
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index 4546e35..a0fed31 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -410,21 +410,27 @@ static void blkid_get_topology(
> *lsectorsize = val;
> val = blkid_topology_get_physical_sector_size(tp);
> *psectorsize = val;
> + val = blkid_topology_get_minimum_io_size(tp);
> + *sunit = val;
> + val = blkid_topology_get_optimal_io_size(tp);
> + *swidth = val;
>
> /*
> - * Blkid reports the information in terms of bytes, but we want it in
> - * terms of 512 bytes blocks (just to convert it to bytes later..)
> - *
> * If the reported values are the same as the physical sector size
> - * do not bother to report anything. It will just cause warnings
> + * do not bother to report anything. It will only cause warnings
> * if people specify larger stripe units or widths manually.
> */
> - val = blkid_topology_get_minimum_io_size(tp);
> - if (val > *psectorsize)
> - *sunit = val >> 9;
> - val = blkid_topology_get_optimal_io_size(tp);
> - if (val > *psectorsize)
> - *swidth = val >> 9;
> + if (*sunit == *psectorsize || *swidth == *psectorsize) {
> + *sunit = 0;
> + *swidth = 0;
> + }
> +
> + /*
> + * Blkid reports the information in terms of bytes, but we want it in
> + * terms of 512 bytes blocks (only to convert it to bytes later..)
> + */
> + *sunit = *sunit >> 9;
> + *swidth = *swidth >> 9;
Trailing whitespace here.
Brian
>
> if (blkid_topology_get_alignment_offset(tp) != 0) {
> fprintf(stderr,
> @@ -484,10 +490,10 @@ static void get_topology(
> }
>
> if (xi->rtname && !xi->risfile) {
> - int dummy;
> + int sunit, lsectorsize, psectorsize;
>
> - blkid_get_topology(xi->rtname, &dummy, &ft->rtswidth,
> - &dummy, &dummy, force_overwrite);
> + blkid_get_topology(xi->rtname, &sunit, &ft->rtswidth,
> + &lsectorsize, &psectorsize, force_overwrite);
> }
> }
> #else /* ENABLE_BLKID */
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2014-10-29 18:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-28 17:35 [PATCH 1/2] xfsprogs: ignore stripe geom if sunit or swidth == physical sector size Eric Sandeen
2014-10-28 17:38 ` [PATCH 2/2] xfsprogs: don't warn about log sunit size if it was auto-discovered Eric Sandeen
2014-10-29 18:38 ` Brian Foster
2014-10-29 18:45 ` Eric Sandeen
2014-10-29 19:57 ` Brian Foster
2014-10-29 18:37 ` Brian Foster [this message]
2014-10-29 18:47 ` [PATCH 1/2] xfsprogs: ignore stripe geom if sunit or swidth == physical sector size Eric Sandeen
2014-10-29 21:38 ` Stan Hoeppner
2014-10-30 11:46 ` Brian Foster
2014-10-30 19:15 ` Stan Hoeppner
2014-10-30 19:50 ` Brian Foster
2014-10-30 20:15 ` Stan Hoeppner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141029183721.GA4226@bfoster.laptop \
--to=bfoster@redhat.com \
--cc=sandeen@redhat.com \
--cc=stan@hardwarefreak.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox