public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
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

  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