On Sun, 2009-04-12 at 20:56 +0800, CAI Qian wrote:
> From: "Jyothsna.ltp" <[email protected]>
> Subject: Re: [LTP] [PATCH] Growfiles: Fix Test Failures
> Date: Fri, 10 Apr 2009 17:52:58 -0700 (PDT)
> 
> > 
> > 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__ );
> >
> 
> I am not sure what kinds of IO and wait methods are available on
> uClinux, but by looking at the code in tlibio.h, the following method
> seems not supported there,
> 
>   #if defined(sgi) || (defined(__linux__) && !defined(__UCLIBC__))
>       else if ( method & LIO_IO_SYNCP ) {
> 
>      ...
>           io_type="pwrite(2)";
>       } /* LIO_IO_SYNCP */
>   #endif
> 
> So whenever LIO_IO_SYNCP was chosen as the random IO method, it will
> skip the above code and failback to "No I/O method chosen". Can you try
> the following patch to see if it fixes the problem? It drops
> LIO_IO_SYNCP as an avaliable method for uClinux, and also narrows down
> the wait methods since it does not support async IO there. I'd hope
> someone knew better than me about uClinux to review this patch.
> 
> Signed-off-by: CAI Qian <[email protected]>

Oops you already provided one.

> 
> --- include/tlibio.h.orig     2009-04-12 19:47:29.000000000 +0800
> +++ include/tlibio.h  2009-04-12 20:35:23.000000000 +0800
> @@ -41,12 +41,12 @@
>  #define LIO_IO_ATYPES           00077   /* all io types */
>  #define LIO_IO_TYPES            00061   /* all io types, non-async */
>  #endif /* sgi */
> -#if defined(__linux__)
> +#if defined(__linux__) && !defined(__UCLIBC__)
>  #define LIO_IO_TYPES            00061   /* all io types */
>  #define LIO_IO_ATYPES           00077   /* all io types */
>  #endif
> -#if defined(__sun) || defined(__hpux) || defined(_AIX)
> -#define LIO_IO_TYPES            00021   /* all io types */
> +#if defined(__sun) || defined(__hpux) || defined(_AIX) || defined(__UCLIBC__)
> +#define LIO_IO_TYPES            00021   /* all io types except pread/pwrite 
> */
>  #endif /* linux */
>  #ifdef CRAY
>  #define LIO_IO_TYPES            00017   /* all io types */
> @@ -61,13 +61,13 @@
>  #define LIO_WAIT_RECALL         00040000 /* call recall(2)/aio_suspend(3) */
>  #define LIO_WAIT_SIGPAUSE       00100000 /* call pause */
>  #define LIO_WAIT_SIGACTIVE      00200000 /* spin waiting for signal */
> -#if defined(sgi) || defined(__linux__)
> +#if defined(sgi) || defined(__linux__) || !defined(__UCLIBC__)
>  #define LIO_WAIT_CBSUSPEND      00400000 /* aio_suspend waiting for callback 
> */
>  #define LIO_WAIT_SIGSUSPEND     01000000 /* aio_suspend waiting for signal */
>  #define LIO_WAIT_ATYPES         01760000 /* all async wait types, except 
> nowait */
>  #define LIO_WAIT_TYPES          00020000 /* all sync wait types (sorta) */
>  #endif /* sgi */
> -#if defined(__sun) || defined(__hpux) || defined(_AIX)
> +#if defined(__sun) || defined(__hpux) || defined(_AIX) || defined(__UCLIBC__)
>  #define LIO_WAIT_TYPES          00300000 /* all wait types, except nowait */
>  #endif /* linux */
>  #ifdef CRAY
> 
> > 
> > 
> > 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
> 
> ------------------------------------------------------------------------------
> 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


------------------------------------------------------------------------------
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

Reply via email to