I observed something in tlibio.h.
LIO_IO_TYPES and LIO_WAIT_TYPES are not defined for uClinux.
They are defined for other linux varieties like regular linux, cray, hp etc.
but not uClinux.
and that is why io_type gets a wrong value in fs/doio/growfile.c(though
LIO_RANDOM bit inside is correct)
which eventually fails at line 996 in tlibio.c(shown below) as no random
method could be obtained as LIO_IO_TYPES and LIO_WAIT_TYPES are undefined
for uClinux
case 'I':
#if NEWIO
if((io_type=lio_parse_io_arg1(optarg)) == -1 ) {
else {
996 printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__, __LINE__ );
Cai Qian-6 wrote:
>
> Hi,
>
> This patch fixes gf07 and other gf* test failures reported earlier,
>
> gf01 FAIL 1
> gf02 FAIL 1
> gf03 PASS 0
> gf04 PASS 0
> gf05 FAIL 1
> gf06 PASS 0
> gf07 FAIL 1
> gf08 PASS 0
> gf09 FAIL 1
> gf10 FAIL 1
> gf11 FAIL 1
> gf12 PASS 0
> gf13 FAIL 1
> gf14 PASS 0
> gf15 FAIL 1
> gf16 PASS 0
> gf17 PASS 0
> gf18 FAIL 1
> gf19 FAIL 1
>
> The first problem is that the lastest patch against lib/Makefile always
> exported some unnecessary symbols,
>
> CFLAGS+= -D_USC_LIB_ -D__UCLIBC__
>
> which broke the tlibio.c functionalities. For example,
>
> ...
> #if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
> else if ( method & LIO_IO_SYNCP ) {
> io_type="pread(2)";
> ...
>
> All of those code above will never get executed for Linux PCs, even if
> it has nothing to do with UCLIBC. As the results, tests failed due to
> falling back to no suitable IO methods found,
>
> else {
> printf("DEBUG %s/%d: No I/O method chosen\n", __FILE__, __LINE__ );
> return -1;
>
> The second problem is that gf07 test case failed with the following
> (with debug flags enabled for both tlibio.c and growfiles.c),
>
> # growfiles -W gf07 -b -e 1 -r 1-5000 -R 0--2 -i 0 -L 30 -C 1 -I p
> g_rand13 g_rand13.2 -D 9
>
> ...
> growfiles: 12182 DEBUG3 growfiles.c/2038: lseeked to random offset 2052
> (fsz:0)
> growfiles: 12182 DEBUG3 growfiles.c/2080: attempting to write 4250 bytes
> ...
> growfiles: 12182 DEBUG5 growfiles.c/2173: about to chop Woffset.
> tmp=2052, grow_incr=4250, Woffset was 2052
> growfiles: 12182 DEBUG2 growfiles.c/2197: 1 wrote 4250 bytes(off:0),
> grew file by 4250 bytes
> growfiles: 12182 DEBUG3 growfiles.c/2418: about to do write validation,
> offset = 0, size = 4250
> growfiles: 12182 DEBUG4 growfiles.c/2428: lseeked to offset:0
> DEBUG tlibio.c/1337: aio_read(fildes=3, buf, nbytes=4250, signo=10)
> ...
> growfiles(gf07): 12182 growfiles.c/2513: 1 CW data mismatch at offset 0,
> exp:0101, act:0 in file g_rand13
> ...
>
> This is due to when doing write validation, it started from an incorrect
> offset -- 0! The file was originally written from a random offset
> 2052. However, it looks like a known issue for async IO highlighted in
> growfiles.c, which has already been manually worked around for SGI
> platform.
>
> #if NEWIO
> #ifdef sgi
> /* If this is POSIX I/O and it is via aio_{read,write}
> * or lio_listio then after completion of the I/O the
> * value of the file offset for the file is
> * unspecified--which means we cannot trust what
> * tell() told us. Fudge it here.
> */
>
> So, we probably need to do the same for __linux__.
>
> Signed-off-by: CAI Qian <[email protected]>
>
> --- ltp-full-20090228/lib/Makefile.orig 2009-04-02 15:33:19.000000000
> +0800
> +++ ltp-full-20090228/lib/Makefile 2009-04-02 15:39:21.000000000 +0800
> @@ -2,12 +2,13 @@
> PREFIX=/opt/ltp
>
> CFLAGS+= -Wall
> -CFLAGS+= -D_USC_LIB_ -D__UCLIBC__
> CPPFLAGS+= -I../include
> ifeq ($(shell uname -s),HP-UX)
> CFLAGS+=-Ae -D_LARGEFILE64_SOURCE +DA1.1
> endif
> -CFLAGS+=$(if $(UCLINUX),-DUCLINUX)
> +ifeq ($(UCLINUX),1)
> +CFLAGS+= -D_USC_LIB_ -D__UCLIBC__ -DUCLINUX
> +endif
> LDFLAGS+=
> TARGET=libltp.a
> SRCS=$(wildcard *.c)
> --- ltp-full-20090228/testcases/kernel/fs/doio/growfiles.c.orig
> 2009-04-02
> 15:31:39.000000000 +0800
> +++ ltp-full-20090228/testcases/kernel/fs/doio/growfiles.c 2009-04-02
> 15:32:53.000000000 +0800
> @@ -2115,7 +2115,7 @@
> return -1;
> }
> #if NEWIO
> -#ifdef sgi
> +#if defined(sgi) || defined(__linux__)
> /* If this is POSIX I/O and it is via aio_{read,write}
> * or lio_listio then after completion of the I/O the
> * value of the file offset for the file is
> @@ -2131,7 +2131,7 @@
> tmp = Woffset + grow_incr;
> }
> }
> -#endif
> +#endif /* sgi __linux__ */
> #endif
> }
> *curr_size_ptr=tmp; /* BUG:14136 */
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
>
--
View this message in context:
http://www.nabble.com/-PATCH--Growfiles%3A-Fix-Test-Failures-tp22844092p22996795.html
Sent from the ltp-list mailing list archive at Nabble.com.
------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list