On Thu, Sep 23, 2010 at 2:24 PM, Loïc Minier loic.minier@linaro.org wrote:
On Wed, Sep 22, 2010, Matt Waddel wrote:
fallocate01 1 TFAIL : fallocate(5, 0, 49152, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate01 2 TFAIL : fallocate(6, 1, 49152, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate02 7 TFAIL : fallocate(tfile_write_15396:6, 1, 0, 4096) failed, expected errno:0: TEST_ERRNO=EFBIG(27): File too large fallocate03 1 TFAIL : fallocate(tfile_sparse_15397, 0, 8192, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 2 TFAIL : fallocate(tfile_sparse_15397, 0, 49152, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 3 TFAIL : fallocate(tfile_sparse_15397, 0, 69632, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 4 TFAIL : fallocate(tfile_sparse_15397, 0, 102400, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 5 TFAIL : fallocate(tfile_sparse_15397, 1, 8192, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 6 TFAIL : fallocate(tfile_sparse_15397, 1, 49152, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 7 TFAIL : fallocate(tfile_sparse_15397, 1, 77824, 4096) failed: TEST_ERRNO=EFBIG(27): File too large fallocate03 8 TFAIL : fallocate(tfile_sparse_15397, 1, 106496, 4096) failed: TEST_ERRNO=EFBIG(27): File too large
fallocate(2) says EFBIG is returned when offset+len exceeds the maximum file size; this would mean your fs doesn't support files that large.
Correct, but the offset+length being requested here doesn't seem to be too high (12K in some of the calls). So, its a bit surprising.
BTW, which file system is it ? From last I know, fallocate was supported on only ext4, ocfs and xfs.
Also, if possible a printk to print the actual values of offset and length in the kernel (in fs/open.c : do_fallocate()) might give some pointer on whats going on.
So, something like :
/* Check for wrap through zero too */ - if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0)) + if (((offset + len) > inode->i_sb->s_maxbytes) || + ((offset + len) < 0)) { + printk("sys_fallocate: offset = 0x%x, length = 0x%x max FS size= 0x%x\n", + offset, len, inode->i_sb->s_maxbytes); return -EFBIG; + }
If these numbers are higher than whats being passed by LTP test, then there is something wrong in how ARM is handling fallocate parameters. Else, the max file size supported by file system should be looked at (last variable in above printk).
Regards, Amit Arora