Skip to contentSkip to conversation

mkfs.xfs: print std info if agcount makes agsize out of bounds

PATCH In review Eric Sandeen 2 participants 3 messages Mar 28, 2012 – Mar 29, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mkfs.xfs: print std info if agcount makes agsize out of bounds

When specifying a too-small agcount with stripe geometry, mkfs.xfs can fail with a somewhat unexpected message:

$ mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31,su=512k,sw=20
Allocation group size (314995613) is not a multiple of the stripe unit (128)

This strikes me as especially odd because normally, mkfs.xfs tries to fix up the agsize to be a stripe multiple. The only way we get to the above error message is if ag _size_ is out of bounds; exiting with an error about alignment rather than about size seems odd.

Maybe below is too clever, but if by the time we've decided that agsize is out of bounds after rounding it both up and down, as necessary, to get to a stripe-width multiple, calling validate_ag_geometry() will give us the same standard message as if we had specified no stripe geometry:

$ mkfs/mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31,su=512k,sw=20
agsize (314995613b) too big, maximum is 268435455 blocks
Usage: mkfs.xfs
...
$ mkfs/mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31
agsize (314995613b) too big, maximum is 268435455 blocks
Usage: mkfs.xfs
...

---

mkfs/xfs_mkfs.c +6 -3
index 5445b6f..1f829c5 100644
@@ -2174,9 +2174,12 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
 				if (nodsflag) {
 					dsunit = dswidth = 0;
 				} else {
-					fprintf(stderr,
-_("Allocation group size (%lld) is not a multiple of the stripe unit (%d)\n"),
-						(long long)agsize, dsunit);
+					/*
+					 * agsize is out of bounds, this will
+					 * print nice details & exit.
+					 */
+					validate_ag_geometry(blocklog, dblocks,
+							    agsize, agcount);
 					exit(1);
 				}
 			}

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

Reviewed-by on v1 1/1
#1 lore raw
Quoted 23 lines · Eric Sandeen

When specifying a too-small agcount with stripe geometry, mkfs.xfs can fail with a somewhat unexpected message:

$ mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31,su=512k,sw=20
Allocation group size (314995613) is not a multiple of the stripe unit (128)

This strikes me as especially odd because normally, mkfs.xfs tries to fix up the agsize to be a stripe multiple. The only way we get to the above error message is if ag _size_ is out of bounds; exiting with an error about alignment rather than about size seems odd.

Maybe below is too clever, but if by the time we've decided that agsize is out of bounds after rounding it both up and down, as necessary, to get to a stripe-width multiple, calling validate_ag_geometry() will give us the same standard message as if we had specified no stripe geometry:

$ mkfs/mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31,su=512k,sw=20
agsize (314995613b) too big, maximum is 268435455 blocks
Usage: mkfs.xfs
...
Quoted 6 lines
$ mkfs/mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31
agsize (314995613b) too big, maximum is 268435455 blocks
Usage: mkfs.xfs
...

Makes sense. Consider it:

As an aside, do you want to touch that error message:

agsize (314995613b) too big, maximum is 268435455 blocks

so that it uses the same notation for blocks for both numbers. i.e. something like:

agsize (314995613 blocks) too big, maximum is 268435455 blocks

Cheers,

Dave.

Signature · 7 lines
Dave Chinner
[email protected]

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#2 lore raw
Quoted 35 lines · Dave Chinner
Quoted 23 lines · Eric Sandeen

When specifying a too-small agcount with stripe geometry, mkfs.xfs can fail with a somewhat unexpected message:

$ mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31,su=512k,sw=20
Allocation group size (314995613) is not a multiple of the stripe unit (128)

This strikes me as especially odd because normally, mkfs.xfs tries to fix up the agsize to be a stripe multiple. The only way we get to the above error message is if ag _size_ is out of bounds; exiting with an error about alignment rather than about size seems odd.

Maybe below is too clever, but if by the time we've decided that agsize is out of bounds after rounding it both up and down, as necessary, to get to a stripe-width multiple, calling validate_ag_geometry() will give us the same standard message as if we had specified no stripe geometry:

$ mkfs/mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31,su=512k,sw=20
agsize (314995613b) too big, maximum is 268435455 blocks
Usage: mkfs.xfs
...
Quoted 6 lines
$ mkfs/mkfs.xfs -f -d file,name=fsfile,size=9764864000b,agcount=31
agsize (314995613b) too big, maximum is 268435455 blocks
Usage: mkfs.xfs
...

Makes sense. Consider it:

Quoted 8 lines

As an aside, do you want to touch that error message:

agsize (314995613b) too big, maximum is 268435455 blocks

so that it uses the same notation for blocks for both numbers. i.e. something like:

agsize (314995613 blocks) too big, maximum is 268435455 blocks

Good idea, will do.

-Eric

Quoted 3 lines

Cheers,

Dave.

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs