mirror of
https://github.com/MariaDB/server.git
synced 2026-01-13 18:02:43 +03:00
As discovered by tracing, but also presenting in AIX fseeko
documentation, seeking beyond the EOF is acceptable, as you can write
there.
To display the same error in AIX to other implementations that return
errors on seek, we take the EFBIG error code on reading and error the
same way.
An AIX truss of an aspect of the test:
truss extra/innochecksum --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd
statx("./mysql-test/var/log/innodb_zip.innochecksum_3-4k,crc32,innodb/mysqld.1/data//test/tab1.ibd", 0x0FFFFFFFFFFFF610, 176, 010) = 0
kopen("./mysql-test/var/log/innodb_zip.innochecksum_3-4k,crc32,innodb/mysqld.1/data//test/tab1.ibd", O_RDONLY|O_LARGEFILE) = 3
kfcntl(3, 12, 0x00000001100006C8) = 0
kfcntl(3, F_GETFL, 0x00000001100A6CF8) = 67108864
kioctl(3, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
klseek(3, 0, 1, 0x0FFFFFFFFFFFF3F0) = 0
kioctl(3, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
kread(3, "DEADBEEF\0\0\0\0FFFFFFFF".., 4096) = 4096
klseek(3, 0, 1, 0x0FFFFFFFFFFFF450) = 0
klseek(3, 17592186040320, 0, 0x0FFFFFFFFFFFF450) = 0
klseek(3, 0, 1, 0x0FFFFFFFFFFFF3F0) = 0
kread(3, "DEADBEEF\0\0\0\0FFFFFFFF".., 4096) Err#27 EFBIG
An equivalent Linux trace:
ltrace extra/innochecksum --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd
stat64(0x7fff10ea2dc3, 0x7fff10ea0670, 88, 0x8026be41) = 0
open64("./mysql-test/var/log/innodb_zip."..., 0, 02072403160) = 3
fcntl64(3, 6, 0x139f180, 1) = 0
fgetpos64(0x615000000080, 0x7fff10ea0760, 1, 0) = 0
fseeko64(0x615000000080, 0xffffffff000, 0, 5 <unfinished ...>
pthread_getspecific(0, 0x4d0eb8, 0x7fff10ea0490, 0) = 0x7f7b2806d000
<... fseeko64 resumed> ) = 0
fgetpos64(0x615000000080, 0x7fff10ea0760, 1, 1) = 0
feof(0x615000000080) = 0
feof(0x615000000080) = 1
Error: Unable to seek to necessary offset