Revision e6da7c9fed111ba1243297ee6eda8e24ae11c384 authored by Eric Sandeen on 23 May 2009, 19:30:12 UTC, committed by Felix Blyakher on 02 June 2009, 03:59:38 UTC
In the case where growing a filesystem would leave the last AG
too small, the fixup code has an overflow in the calculation
of the new size with one fewer ag, because "nagcount" is a 32
bit number.  If the new filesystem has > 2^32 blocks in it
this causes a problem resulting in an EINVAL return from growfs:

 # xfs_io -f -c "truncate 19998630180864" fsfile
 # mkfs.xfs -f -bsize=4096 -dagsize=76288719b,size=3905982455b fsfile
 # mount -o loop fsfile /mnt
 # xfs_growfs /mnt

meta-data=/dev/loop0             isize=256    agcount=52,
agsize=76288719 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=3905982455, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=32768, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0
xfs_growfs: XFS_IOC_FSGROWFSDATA xfsctl failed: Invalid argument

Reported-by: richard.ems@cape-horn-eng.com
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Felix Blyakher <felixb@sgi.com>
Signed-off-by: Felix Blyakher <felixb@sgi.com>
1 parent 1f23920
Raw File
Kconfig
#
# Library configuration
#

menu "Library routines"

config BITREVERSE
	tristate

config GENERIC_FIND_FIRST_BIT
	bool

config GENERIC_FIND_NEXT_BIT
	bool

config GENERIC_FIND_LAST_BIT
	bool
	default y

config CRC_CCITT
	tristate "CRC-CCITT functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC-CCITT functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC-CCITT
	  functions require M here.

config CRC16
	tristate "CRC16 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC16 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC16
	  functions require M here.

config CRC_T10DIF
	tristate "CRC calculation for the T10 Data Integrity Field"
	help
	  This option is only needed if a module that's not in the
	  kernel tree needs to calculate CRC checks for use with the
	  SCSI data integrity subsystem.

config CRC_ITU_T
	tristate "CRC ITU-T V.41 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC ITU-T V.41 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC ITU-T V.41
	  functions require M here.

config CRC32
	tristate "CRC32 functions"
	default y
	select BITREVERSE
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC32 functions, but a module built outside the
	  kernel tree does. Such modules that use library CRC32 functions
	  require M here.

config CRC7
	tristate "CRC7 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC7 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC7
	  functions require M here.

config LIBCRC32C
	tristate "CRC32c (Castagnoli, et al) Cyclic Redundancy-Check"
	select CRYPTO
	select CRYPTO_CRC32C
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC32c functions, but a module built outside the
	  kernel tree does. Such modules that use library CRC32c functions
	  require M here.  See Castagnoli93.
	  Module will be libcrc32c.

config AUDIT_GENERIC
	bool
	depends on AUDIT && !AUDIT_ARCH
	default y

#
# compression support is select'ed if needed
#
config ZLIB_INFLATE
	tristate

config ZLIB_DEFLATE
	tristate

config LZO_COMPRESS
	tristate

config LZO_DECOMPRESS
	tristate

#
# These all provide a common interface (hence the apparent duplication with
# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
#
config DECOMPRESS_GZIP
	select ZLIB_INFLATE
	tristate

config DECOMPRESS_BZIP2
	tristate

config DECOMPRESS_LZMA
	tristate

#
# Generic allocator support is selected if needed
#
config GENERIC_ALLOCATOR
	boolean

#
# reed solomon support is select'ed if needed
#
config REED_SOLOMON
	tristate
	
config REED_SOLOMON_ENC8
	boolean

config REED_SOLOMON_DEC8
	boolean

config REED_SOLOMON_ENC16
	boolean

config REED_SOLOMON_DEC16
	boolean

#
# Textsearch support is select'ed if needed
#
config TEXTSEARCH
	boolean

config TEXTSEARCH_KMP
	tristate

config TEXTSEARCH_BM
	tristate

config TEXTSEARCH_FSM
	tristate

config HAS_IOMEM
	boolean
	depends on !NO_IOMEM
	default y

config HAS_IOPORT
	boolean
	depends on HAS_IOMEM && !NO_IOPORT
	default y

config HAS_DMA
	boolean
	depends on !NO_DMA
	default y

config CHECK_SIGNATURE
	bool

config HAVE_LMB
	boolean

config CPUMASK_OFFSTACK
	bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS
	help
	  Use dynamic allocation for cpumask_var_t, instead of putting
	  them on the stack.  This is a bit more expensive, but avoids
	  stack overflow.

config DISABLE_OBSOLETE_CPUMASK_FUNCTIONS
       bool "Disable obsolete cpumask functions" if DEBUG_PER_CPU_MAPS
       depends on EXPERIMENTAL && BROKEN

#
# Netlink attribute parsing support is select'ed if needed
#
config NLATTR
	bool

endmenu
back to top