All of lore.kernel.org
 help / color / mirror / Atom feed
From: Darshak Shah <darshaks@linux.vnet.ibm.com>
To: subrata@linux.vnet.ibm.com
Cc: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH] close file descriptors and munmap pages.
Date: Fri, 02 Jul 2010 11:55:54 +0530	[thread overview]
Message-ID: <4C2D8672.8030406@linux.vnet.ibm.com> (raw)
In-Reply-To: <1278003985.21642.7.camel@subratamodak.linux.ibm.com>

On 07/01/2010 10:36 PM, Subrata Modak wrote:
> Probably, you would need to fix these:
>
> patching file testcases/kernel/syscalls/open/open10.c
> Hunk #1 FAILED at 282.
> Hunk #2 FAILED at 311.
> Hunk #3 FAILED at 359.
> Hunk #4 FAILED at 389.
> Hunk #5 FAILED at 440.
> 5 out of 5 hunks FAILED -- saving rejects to file
> testcases/kernel/syscalls/open/open10.c.rej
> patching file testcases/kernel/syscalls/splice/splice02.c
> patch: **** malformed patch at line 229: Passed");
>
>    
Dear Subrata,

I downloaded the latest ltp from 
http://ltp.git.sourceforge.net/git/gitweb.cgi?p=ltp/ltp-dev.git;a=tree
I used the "snapshot" to download the tgz and patched as following.

The patch seems to apply correctly.

[darshak@darsshah-tp ltp-dev]$ patch -p1 < 
../../ltp-full-20091231/patches/close-open-fds.diff
patching file testcases/kernel/syscalls/open/open10.c
patching file testcases/kernel/syscalls/splice/splice02.c
patching file testcases/kernel/io/direct_io/diotest2.c
patching file testcases/kernel/io/direct_io/diotest3.c
patching file testcases/kernel/io/direct_io/diotest5.c
patching file testcases/kernel/io/direct_io/diotest6.c
patching file testcases/kernel/mem/mmapstress/mmapstress02.c
patching file testcases/kernel/mem/mmapstress/mmapstress01.c
patching file testcases/kernel/mem/mmapstress/mmapstress05.c
patching file testcases/kernel/mem/mmapstress/mmapstress10.c
patching file testcases/kernel/syscalls/ppoll/ppoll01.c
patching file testcases/kernel/syscalls/utimes/utimes01.c
[darshak@darsshah-tp ltp-dev]$

If there is any other location from where I should take the ltp, please 
let me know.

Thank you.

> Regards--
> Subrata
> (Refer to git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev)
>
> On Thu, 2010-07-01 at 17:35 +0530, Darshak Shah wrote:
>    
>> Hi,
>>
>> While executing the ltp on an nfs root mounted system, I faced a problem
>> with some of the ltp test cases. These tests either did not close their
>> file descriptors or did no unmap the mmaped files. This results in a
>> failures while trying to clean up the temporary directory of the testcase.
>>
>> Here are the failures I see.
>>
>> [darshak@darsshah-tp mcp61_ppcnf-197001010022]$ grep TWARN
>> mcp61_ppcnf-197001010022.out |grep rmdir
>> open10      0  TWARN  :  rmdir(open10.testdir.A.19588) failed:
>> errno=???(39): Directory not empty
>> open10      0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/ope6m8CUb) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/ope6m8CUb/open10.testdir.B.19588/.nfs000000000011ef45000004b0)
>> failed; errno=16: Device or resource busy
>> ppoll01     0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/ppo1xLQtp) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/ppo1xLQtp/.nfs000000000011ef4a000004b7)
>> failed; errno=16: Device or resource busy
>> splice02    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/splESzJrq) failed:
>> remove(/tmp/ltp-yYmhzAq5ao/splESzJrq) failed; errno=39: Directory not empty
>> utimes01    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/utia5lQ1w) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/utia5lQ1w/.nfs0000000000122f28000004ca)
>> failed; errno=16: Device or resource busy
>> diotest02    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/dioaaIAuQ) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/dioaaIAuQ/.nfs000000000011ef57000004d3)
>> failed; errno=16: Device or resource busy
>> diotest03    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/dioqfwc9n) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/dioqfwc9n/.nfs000000000011ef58000004d4)
>> failed; errno=16: Device or resource busy
>> diotest05    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/dioYf4Dai) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/dioYf4Dai/.nfs000000000011ef59000004d5)
>> failed; errno=16: Device or resource busy
>> diotest06    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/dioBzOOyB) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/dioBzOOyB/.nfs000000000011ef5a000004d8)
>> failed; errno=16: Device or resource busy
>> mmapstress01    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/mmaR0zAez) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/mmaR0zAez/.nfs000000000011ef6e000004f9)
>> failed; errno=16: Device or resource busy
>> mmapstress02    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/mmad84xcc) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/mmad84xcc/.nfs000000000011ef6f000004fa)
>> failed; errno=16: Device or resource busy
>> mmapstress05    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/mmaOrvt5a) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/mmaOrvt5a/.nfs000000000011ef70000004fc)
>> failed; errno=16: Device or resource busy
>> mmapstress10    0  TWARN  :  tst_rmdir():
>> rmobj(/tmp/ltp-yYmhzAq5ao/mmaBRE9gi) failed:
>> unlink(/tmp/ltp-yYmhzAq5ao/mmaBRE9gi/.nfs000000000011ef71000004fe)
>> failed; errno=16: Device or resource busy
>> [darshak@darsshah-tp mcp61_ppcnf-197001010022]$
>>
>> I have fixed all of the above tests with the following patch.
>>
>> Signed-off-by: Darshak P Shah<darshaks@linux.vnet.ibm.com>
>>
>>
>> Index: ltp-full-20091231/testcases/kernel/syscalls/open/open10.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/syscalls/open/open10.c
>> +++ ltp-full-20091231/testcases/kernel/syscalls/open/open10.c
>> @@ -282,6 +282,7 @@ int main(int ac, char *av[])
>>                tst_resm(TFAIL|TERRNO, "open(%s) failed", nosetgid_A);
>>                local_flag = FAILED;
>>            }
>> +        close(ret);
>>
>>            if ((ret = stat(nosetgid_A,&buf))<  0) {
>>                tst_resm(TFAIL|TERRNO, "stat(%s) failed", nosetgid_A);
>> @@ -310,6 +311,7 @@ int main(int ac, char *av[])
>>                tst_resm(TFAIL|TERRNO, "open(%s) failed", setgid_A);
>>                local_flag = FAILED;
>>            }
>> +        close(ret);
>>
>>            if ((ret = stat(setgid_A,&buf))<  0) {
>>                tst_resm(TFAIL|TERRNO, "stat(%s) failed", setgid_A);
>> @@ -357,6 +359,7 @@ int main(int ac, char *av[])
>>                tst_resm(TFAIL|TERRNO, "open(%s) failed", nosetgid_B);
>>                local_flag = FAILED;
>>            }
>> +        close(ret);
>>
>>            if ((ret = stat(nosetgid_B,&buf))<  0) {
>>                tst_resm(TFAIL|TERRNO, "stat(%s) failed", nosetgid_B);
>> @@ -386,6 +389,7 @@ int main(int ac, char *av[])
>>                tst_resm(TFAIL|TERRNO, "open(%s) failed", setgid_B);
>>                local_flag = FAILED;
>>            }
>> +        close(ret);
>>
>>            if ((ret = stat(setgid_B,&buf))<  0) {
>>                tst_resm(TFAIL|TERRNO, "stat(%s) failed", setgid_B);
>> @@ -436,6 +440,7 @@ int main(int ac, char *av[])
>>                tst_resm(TFAIL|TERRNO, "open(%s) failed", root_setgid_B);
>>                local_flag = FAILED;
>>            }
>> +        close(ret);
>>
>>            if ((ret = stat(root_setgid_B,&buf))<  0) {
>>                tst_resm(TFAIL|TERRNO, "stat(%s) failed", root_setgid_B);
>> Index: ltp-full-20091231/testcases/kernel/syscalls/splice/splice02.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/syscalls/splice/splice02.c
>> +++ ltp-full-20091231/testcases/kernel/syscalls/splice/splice02.c
>> @@ -148,6 +148,7 @@ int main(int ac, char **av) {
>>            } else
>>                if (TEST_RETURN == 0){
>>                                tst_resm(TPASS, "splice() system call
>> Passed");
>> +        close(fd);
>>                cleanup();
>>                tst_exit();
>>            }
>> Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest2.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest2.c
>> +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest2.c
>> @@ -275,6 +275,7 @@ static void setup(void)
>>        if ((fd1 = open(filename, O_DIRECT, 0600))<  0) {
>>            tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this
>> filesystem. %s", strerror(errno));
>>        }
>> +    close(fd1);
>>
>>    }
>>
>> Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest3.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest3.c
>> +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest3.c
>> @@ -363,6 +363,7 @@ static void setup(void)
>>        if ((fd1 = open(filename, O_DIRECT, 0600))<  0) {
>>            tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this
>> filesystem. %s", strerror(errno));
>>        }
>> +    close(fd1);
>>    }
>>
>>    static void cleanup(void)
>> Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest5.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest5.c
>> +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest5.c
>> @@ -309,6 +309,7 @@ static void setup(void)
>>        if ((fd1 = open(filename, O_DIRECT, 0600))<  0) {
>>            tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this
>> filesystem. %s", strerror(errno));
>>        }
>> +    close(fd1);
>>    }
>>
>>    static void cleanup(void)
>> Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest6.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest6.c
>> +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest6.c
>> @@ -387,6 +387,7 @@ static void setup(void)
>>        if ((fd1 = open(filename, O_DIRECT, 0600))<  0) {
>>            tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this
>> filesystem. %s", strerror(errno));
>>        }
>> +    close(fd1);
>>    }
>>
>>    static void cleanup(void)
>> Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress02.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress02.c
>> +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress02.c
>> @@ -165,6 +165,10 @@ main(int argc, char *argv[]) {
>>            CLEANERROR("close failed");
>>            anyfail();
>>        }
>> +    if (munmap(mmapaddr, pagesize) == -1) {
>> +        CLEANERROR("munmap failed");
>> +        anyfail();
>> +    }
>>        if (unlink(tmpname) == -1) {
>>            ERROR("unlink failed");
>>            anyfail();
>> Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress01.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress01.c
>> +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress01.c
>> @@ -590,7 +590,11 @@ child_mapper(char *file, unsigned procno
>>                anyfail();
>>            }
>>        }
>> -
>> +    if (munmap(maddr, mapsize) == -1) {
>> +        perror("munmap failed");
>> +        local_flag = FAILED;
>> +        anyfail();
>> +    }
>>        exit(0);
>>    }
>>
>> @@ -694,6 +698,7 @@ fileokay(char *file, uchar_t *expbuf)
>>                }
>>            }
>>        }
>> +    close(fd);
>>
>>        return 1;
>>    }
>> Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress05.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress05.c
>> +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress05.c
>> @@ -61,6 +61,15 @@ void ok_exit();
>>    #define ERROR(M)    (void)fprintf(stderr, "%s:  errno = %d; " M "\n", \
>>                    progname, errno);
>>    #define CLEAN    (void)close(fd); \
>> +        if (munmap(mmapaddr+pagesize, pagesize) == -1) { \
>> +            ERROR("munmap failed"); \
>> +        } \
>> +        if (munmap(mmapaddr, pagesize) == -1) { \
>> +            ERROR("munmap failed"); \
>> +        } \
>> +        if (munmap(mmapaddr+2*pagesize, pagesize) == -1) { \
>> +            ERROR("munmap failed"); \
>> +        } \
>>            if (unlink(tmpname)) { \
>>                ERROR("couldn't clean up temp file"); \
>>            }
>> Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress10.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress10.c
>> +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress10.c
>> @@ -154,6 +154,15 @@ unsigned do_offset = 0;
>>    unsigned pattern = 0;
>>    char filename[64];
>>
>> +void clean_mapper(int sig);
>> +void clean_writer(int sig);
>> +
>> +int fd_mapper = 0;
>> +caddr_t maddr_mapper;
>> +size_t mapsize_mapper;
>> +
>> +int fd_writer = 0;
>> +
>>    int
>>    main(int argc, char *argv[])
>>    {
>> @@ -484,8 +493,8 @@ main(int argc, char *argv[])
>>
>>    cleanup:
>>        for (i = 0; i<  nprocs; i++)
>> -        (void)kill(pidarray[i], SIGKILL);
>> -    (void)kill(wr_pid, SIGKILL);
>> +        (void)kill(pidarray[i], SIGUSR1);
>> +    (void)kill(wr_pid, SIGUSR1);
>>
>>        while (wait(&wait_stat) != -1 || errno != ECHILD)
>>            continue;
>> @@ -531,9 +540,7 @@ child_mapper(char *file, unsigned procno
>>        off_t offset;
>>    #endif /* LARGE_FILE */
>>        size_t validsize;
>> -    size_t mapsize;
>> -    caddr_t maddr, paddr;
>> -    int fd;
>> +    caddr_t paddr;
>>        int pagesize = sysconf(_SC_PAGE_SIZE);
>>        unsigned randpage;
>>        unsigned int seed;
>> @@ -542,25 +549,38 @@ child_mapper(char *file, unsigned procno
>>        unsigned mappages;
>>        unsigned mapflags;
>>        unsigned i;
>> +    struct sigaction sa_mapper;
>>
>>        mapflags = MAP_SHARED;
>>
>>        seed = initrand();        /* initialize random seed */
>>
>> +    sa_mapper.sa_handler = clean_mapper;
>> +    sa_mapper.sa_flags = 0;
>> +    if (sigemptyset(&sa_mapper.sa_mask)) {
>> +        perror("sigempty error");
>> +                anyfail();
>> +    }
>> +
>> +    if (sigaction(SIGUSR1,&sa_mapper, 0) == -1) {
>> +        perror("sigaction error SIGUSR1");
>> +                anyfail();
>> +    }
>> +
>>
>>    #ifdef LARGE_FILE
>> -    if ((fd = open64(file, O_RDWR)) == -1) {
>> +    if ((fd_mapper = open64(file, O_RDWR)) == -1) {
>>    #else /* LARGE_FILE */
>> -    if ((fd = open(file, O_RDWR)) == -1) {
>> +    if ((fd_mapper = open(file, O_RDWR)) == -1) {
>>    #endif /* LARGE_FILE */
>>            perror("open error");
>>                    anyfail();
>>        }
>>
>>    #ifdef LARGE_FILE
>> -    if (fstat64(fd,&statbuf) == -1) {
>> +    if (fstat64(fd_mapper,&statbuf) == -1) {
>>    #else /* LARGE_FILE */
>> -    if (fstat(fd,&statbuf) == -1) {
>> +    if (fstat(fd_mapper,&statbuf) == -1) {
>>    #endif /* LARGE_FILE */
>>            perror("stat error");
>>                    anyfail();
>> @@ -571,29 +591,29 @@ child_mapper(char *file, unsigned procno
>>            fprintf(stderr, "size_t overflow when setting up map\n");
>>                    anyfail();
>>        }
>> -    mapsize = (size_t)(statbuf.st_size - sparseoffset);
>> -    mappages = roundup(mapsize, pagesize) / pagesize;
>> +    mapsize_mapper = (size_t)(statbuf.st_size - sparseoffset);
>> +    mappages = roundup(mapsize_mapper, pagesize) / pagesize;
>>        offset = sparseoffset;
>>        if (do_offset) {
>>            int pageoffset = lrand48() % mappages;
>>            int byteoffset = pageoffset * pagesize;
>>            offset += byteoffset;
>> -        mapsize -= byteoffset;
>> +        mapsize_mapper -= byteoffset;
>>            mappages -= pageoffset;
>>        }
>>
>>    #ifdef LARGE_FILE
>> -    if ((maddr = mmap64(0, mapsize, PROT_READ|PROT_WRITE,
>> -            mapflags, fd, offset)) == (caddr_t)-1) {
>> +    if ((maddr_mapper = mmap64(0, mapsize_mapper, PROT_READ|PROT_WRITE,
>> +            mapflags, fd_mapper, offset)) == (caddr_t)-1) {
>>    #else /* LARGE_FILE */
>> -    if ((maddr = mmap(0, mapsize, PROT_READ|PROT_WRITE,
>> -            mapflags, fd, offset)) == (caddr_t)-1) {
>> +    if ((maddr_mapper = mmap(0, mapsize_mapper, PROT_READ|PROT_WRITE,
>> +            mapflags, fd_mapper, offset)) == (caddr_t)-1) {
>>    #endif /* LARGE_FILE */
>>            perror("mmap error");
>>                    anyfail();
>>        }
>>
>> -    (void)close(fd);
>> +    (void)close(fd_mapper);
>>
>>        nloops = (randloops) ? (lrand48() % MAXLOOPS) : MAXLOOPS;
>>
>> @@ -601,12 +621,12 @@ child_mapper(char *file, unsigned procno
>>    #ifdef LARGE_FILE
>>            (void)printf("child %d (pid %ld): seed %d, fsize %Ld, "
>>                "mapsize %d, off %Ld, loop %d\n",
>> -            procno, getpid(), seed, filesize, mapsize,
>> +            procno, getpid(), seed, filesize, mapsize_mapper,
>>                offset/pagesize, nloops);
>>    #else /* LARGE_FILE */
>>            (void)printf("child %d (pid %d): seed %d, fsize %ld, "
>>                "mapsize %ld, off %ld, loop %d\n",
>> -            procno, getpid(), seed, filesize, (long)mapsize,
>> +            procno, getpid(), seed, filesize, (long)mapsize_mapper,
>>                offset/pagesize, nloops);
>>    #endif /* LARGE_FILE */
>>        }
>> @@ -616,13 +636,13 @@ child_mapper(char *file, unsigned procno
>>         */
>>        for (loopcnt = 0; loopcnt<  nloops; loopcnt++) {
>>            randpage = lrand48() % mappages;
>> -        paddr = maddr + (randpage * pagesize);     /* page address */
>> +        paddr = maddr_mapper + (randpage * pagesize);     /* page
>> address */
>>
>>            if (randpage<  mappages - 1
>> -            || !(mapsize % pagesize))
>> +            || !(mapsize_mapper % pagesize))
>>                validsize = pagesize;
>>            else
>> -            validsize = mapsize % pagesize;
>> +            validsize = mapsize_mapper % pagesize;
>>
>>            /*
>>             * Because one child is mapping file in extend mode,
>> @@ -652,14 +672,17 @@ child_mapper(char *file, unsigned procno
>>             * Exercise msync() as well!
>>             */
>>            randpage = lrand48() % mappages;
>> -        paddr = maddr + (randpage * pagesize);     /* page address */
>> +        paddr = maddr_mapper + (randpage * pagesize);     /* page
>> address */
>>            if (msync(paddr, (mappages - randpage)*pagesize,
>>                MS_SYNC) == -1) {
>>                perror("msync error");
>>                            anyfail();
>>            }
>>        }
>> -
>> +    if ( munmap(maddr_mapper,mapsize_mapper) == -1 ) {
>> +        perror("munmap failed");
>> +        anyfail();
>> +    }
>>        exit(0);
>>    }
>>
>> @@ -675,7 +698,20 @@ child_mapper(char *file, unsigned procno
>>    void
>>    child_writer(char *file, uchar_t *buf)    /* buf already set up in main */
>>    {
>> -    int fd;
>> +    struct sigaction sa_writer;
>> +
>> +    sa_writer.sa_handler = clean_writer;
>> +    sa_writer.sa_flags = 0;
>> +    if (sigemptyset(&sa_writer.sa_mask)) {
>> +        perror("sigempty error");
>> +                anyfail();
>> +    }
>> +
>> +    if (sigaction(SIGUSR1,&sa_writer, 0) == -1) {
>> +        perror("sigaction error SIGUSR1");
>> +                anyfail();
>> +    }
>> +
>>    #ifdef LARGE_FILE
>>        struct stat64 statbuf;
>>        off64_t off;
>> @@ -688,18 +724,18 @@ child_writer(char *file, uchar_t *buf)    /
>>        int cnt;
>>
>>    #ifdef LARGE_FILE
>> -    if ((fd = open64(file, O_RDWR)) == -1) {
>> +    if ((fd_writer = open64(file, O_RDWR)) == -1) {
>>    #else /* LARGE_FILE */
>> -    if ((fd = open(file, O_RDWR)) == -1) {
>> +    if ((fd_writer = open(file, O_RDWR)) == -1) {
>>    #endif /* LARGE_FILE */
>>            perror("open error");
>>                    anyfail();
>>        }
>>
>>    #ifdef LARGE_FILE
>> -    if ((off = lseek64(fd, 0, SEEK_END)) == -1) {
>> +    if ((off = lseek64(fd_writer, 0, SEEK_END)) == -1) {
>>    #else /* LARGE_FILE */
>> -    if ((off = lseek(fd, 0, SEEK_END)) == -1) {
>> +    if ((off = lseek(fd_writer, 0, SEEK_END)) == -1) {
>>    #endif /* LARGE_FILE */
>>            perror("lseek error");
>>                    anyfail();
>> @@ -708,9 +744,9 @@ child_writer(char *file, uchar_t *buf)    /
>>
>>        for (;;) {
>>    #ifdef LARGE_FILE
>> -        if (fstat64(fd,&statbuf) == -1) {
>> +        if (fstat64(fd_writer,&statbuf) == -1) {
>>    #else /* LARGE_FILE */
>> -        if (fstat(fd,&statbuf) == -1) {
>> +        if (fstat(fd_writer,&statbuf) == -1) {
>>    #endif /* LARGE_FILE */
>>                perror("fstat error");
>>                            anyfail();
>> @@ -734,7 +770,7 @@ child_writer(char *file, uchar_t *buf)    /
>>
>>            p = buf + (off % pagesize);
>>
>> -        if ((cnt = write(fd, p, growsize)) != growsize) {
>> +        if ((cnt = write(fd_writer, p, growsize)) != growsize) {
>>                if (cnt == -1)
>>                    perror("write error");
>>                else
>> @@ -747,12 +783,13 @@ child_writer(char *file, uchar_t *buf)    /
>>
>>            (void)sleep(sleeptime);
>>            if (dosync) {
>> -            if (fsync(fd) == -1) {
>> +            if (fsync(fd_writer) == -1) {
>>                    perror("fsync error");
>>                                    anyfail();
>>                }
>>            }
>>        }
>> +    close(fd_writer);
>>    }
>>
>>
>> @@ -814,6 +851,7 @@ fileokay(char *file, uchar_t *expbuf)
>>            cnt = read(fd, (char *)readbuf, pagesize);
>>            if (cnt == -1) {
>>                perror("read error");
>> +            close(fd);
>>                return 0;
>>            } else if (cnt != pagesize) {
>>                /*
>> @@ -822,6 +860,7 @@ fileokay(char *file, uchar_t *expbuf)
>>                if ((i * pagesize) + cnt != mapsize) {
>>                    (void)fprintf(stderr, "read %d of %ld bytes\n",
>>                        (i*pagesize)+cnt, (long)mapsize);
>> +                close(fd);
>>                    return 0;
>>                }
>>            }
>> @@ -841,6 +880,7 @@ fileokay(char *file, uchar_t *expbuf)
>>                    (void)fprintf(stderr, ", pg %d off %d, "
>>                        "(fsize %ld)\n", i, j, statbuf.st_size);
>>    #endif /* LARGE_FILE */
>> +                close(fd);
>>                    return 0;
>>                }
>>            }
>> @@ -866,6 +906,21 @@ clean_up_file(int sig)
>>        exit(1);
>>    }
>>
>> +void clean_mapper(int sig)
>> +{
>> +    if (fd_mapper)
>> +        close(fd_mapper);
>> +    munmap(maddr_mapper,mapsize_mapper);
>> +    exit (0);
>> +}
>> +
>> +void clean_writer(int sig)
>> +{
>> +    if (fd_writer)
>> +        close(fd_writer);
>> +    exit(0);
>> +}
>> +
>>    unsigned int
>>    initrand(void)
>>    {
>> @@ -887,7 +942,6 @@ initrand(void)
>>        return (seed);
>>    }
>>
>> -
>>    /*****  LTP Port        *****/
>>    void ok_exit()
>>    {
>> Index: ltp-full-20091231/testcases/kernel/syscalls/ppoll/ppoll01.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/syscalls/ppoll/ppoll01.c
>> +++ ltp-full-20091231/testcases/kernel/syscalls/ppoll/ppoll01.c
>> @@ -378,8 +378,10 @@ static int do_test(struct test_case *tc)
>>        }
>>        result |= (sys_errno != tc->err) || !cmp_ok;
>>        PRINT_RESULT_CMP(sys_ret>= 0, tc->ret, tc->err, sys_ret,
>> sys_errno, cmp_ok);
>> -    cleanup: if (fd>= 0)
>> +    cleanup: if (fd>= 0) {
>> +        close(fd);
>>            cleanup_file(fpath);
>> +    }
>>
>>        sigemptyset(&sigmask);
>>        sigprocmask(SIG_SETMASK,&sigmask, NULL);
>> Index: ltp-full-20091231/testcases/kernel/syscalls/utimes/utimes01.c
>> ===================================================================
>> --- ltp-full-20091231.orig/testcases/kernel/syscalls/utimes/utimes01.c
>> +++ ltp-full-20091231/testcases/kernel/syscalls/utimes/utimes01.c
>> @@ -234,6 +234,8 @@ static int do_test(struct test_case *tc)
>>            TEST(rc = setup_file(TESTDIR, "test.file", fpath));
>>            if (rc<  0)
>>                    return 1;
>> +    /* The test just needs the file, so no need to keep it open. */
>> +    close(rc);
>>
>>        /*
>>             * Change effective user id
>>
>>
>> ------------------------------------------------------------------------------
>> This SF.net email is sponsored by Sprint
>> What will you do first with EVO, the first 4G phone?
>> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
>> _______________________________________________
>> Ltp-list mailing list
>> Ltp-list@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/ltp-list
>>      
>    


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  reply	other threads:[~2010-07-02  6:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-01 12:05 [LTP] [PATCH] close file descriptors and munmap pages Darshak Shah
2010-07-01 17:06 ` Subrata Modak
2010-07-02  6:25   ` Darshak Shah [this message]
2010-07-02  6:37     ` Garrett Cooper
2010-07-02  7:18       ` Darshak Shah
2010-07-03 18:00         ` Subrata Modak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C2D8672.8030406@linux.vnet.ibm.com \
    --to=darshaks@linux.vnet.ibm.com \
    --cc=ltp-list@lists.sourceforge.net \
    --cc=subrata@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.