[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-xfs
Subject: Re: mkfs.xfs cannot make sector size 64 KiB?
From: David Chinner <dgc () sgi ! com>
Date: 2007-04-29 23:07:27
Message-ID: 20070429230727.GL32602149 () melbourne ! sgi ! com
[Download RAW message or body]
On Sun, Apr 29, 2007 at 12:20:26PM -0400, Justin Piszcz wrote:
> >From the manpage:
>
> -b Block size options.
>
> This option specifies the fundamental block size of the
> filesys-
> tem. The valid suboptions are: log=value and size=value;
> only
> one can be supplied. The block size is specified either as
> a
> base two logarithm value with log=, or in bytes with size=.
> The
> default value is 4096 bytes (4 KiB), the minimum is 512, and
> the
> maximum is 65536 (64 KiB). XFS on Linux currently only
> supports
> pagesize or smaller blocks.
>
> The maximum size is 64 KiB, yet it seems only up to 32 KiB is valid?
> I am running x86_64.
First question - What's the page size on x86_64?
Answer: 4k.
So while mkfs will allow you to make >4k block size filesystems,
you can't mount them on x86_64 (yet).
> p34:~# mkfs.xfs -b size=65536 /dev/md3
> illegal sector size 65536
That's not an illegal block size it's complaining about - that's a sector
size that it thinks is wrong. By the time we check this, we've already
validated the block size:
1312 if (sectorsize < XFS_MIN_SECTORSIZE ||
1313 sectorsize > XFS_MAX_SECTORSIZE || sectorsize > blocksize) {
1314 fprintf(stderr, _("illegal sector size %d\n"), sectorsize);
1315 usage();
1316 }
But then we probe the underlying volume and get a "sectoralign" variable:
1301 if (!nodsflag && !xi.disfile)
1302 get_subvol_stripe_wrapper(dfile, SVTYPE_DATA,
1303 &xlv_dsunit, &xlv_dswidth, §oralign);
1304 if (sectoralign) {
1305 sectorsize = blocksize;
1306 sectorlog = libxfs_highbit32(sectorsize);
1307 if (loginternal) {
1308 lsectorsize = sectorsize;
1309 lsectorlog = sectorlog;
1310 }
1311 }
1312 if (sectorsize < XFS_MIN_SECTORSIZE ||
1313 sectorsize > XFS_MAX_SECTORSIZE || sectorsize > blocksize) {
1314 fprintf(stderr, _("illegal sector size %d\n"), sectorsize);
1315 usage();
1316 }
And if we have sectoralign returned, we adjust the sector size to the
block size and then we fail due to (xfs_alloc_btree.h):
#define XFS_MAX_SECTORSIZE_LOG 15 /* i.e. 32768 bytes */
Hmmmm - I bet this is because you are using md raid here - this is probably
the code that ensures that XFS doesn't use 512 byte writes that cause md
raid cache flushes. This is triggers on:
*sectalign = (md.level == 4 || md.level == 5 || md.level == 6);
So I bet that you're using RAID4/5/6 on your md device.
Cheers,
Dave.
--
Dave Chinner
Principal Engineer
SGI Australian Software Group
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic