Skip to contentSkip to conversation

close file descriptors and munmap pages.

PATCH In review Darshak Shah 3 participants 6 messages Jul 1, 2010 – Jul 5, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 close file descriptors and munmap pages.

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.

testcases/kernel/syscalls/open/open10.c +5 -0
Index: 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);
testcases/kernel/syscalls/splice/splice02.c +0 -0
Index: 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();
          }
testcases/kernel/io/direct_io/diotest2.c +0 -0
Index: 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);

  }
testcases/kernel/io/direct_io/diotest3.c +0 -0
Index: 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)

testcases/kernel/io/direct_io/diotest5.c +0 -0
Index: 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)

testcases/kernel/io/direct_io/diotest6.c +0 -0
Index: 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)

testcases/kernel/mem/mmapstress/mmapstress02.c +4 -0
Index: 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();
testcases/kernel/mem/mmapstress/mmapstress01.c +6 -1
Index: 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;
  }
testcases/kernel/mem/mmapstress/mmapstress05.c +9 -0
Index: 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"); \
          }
testcases/kernel/mem/mmapstress/mmapstress10.c +40 -20

133 lines not on this page · raw message

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()
{

testcases/kernel/syscalls/ppoll/ppoll01.c +0 -0
Index: 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);
testcases/kernel/syscalls/utimes/utimes01.c +2 -0
Index: 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#2 lore raw
In reply to Subrata Modak
Quoted 14 lines · Subrata Modak

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.

Quoted 586 lines

Regards--
Subrata
(Refer to git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev)

Quoted 580 lines · Darshak Shah

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.

Index: ltp-full-20091231/testcases/kernel/syscalls/open/open10.c
===================================================================

testcases/kernel/syscalls/open/open10.c +5 -0
@@ -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
===================================================================

testcases/kernel/syscalls/splice/splice02.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest2.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest3.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest5.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest6.c +1 -0
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress02.c +4 -0
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress01.c +6 -1
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress05.c +9 -0
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress10.c +40 -20
@@ -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

testcases/kernel/mem/mmapstress/mmapstress10.c +3 -3
-            || !(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();
           }
       }
testcases/kernel/mem/mmapstress/mmapstress10.c +45 -11
-
+    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
===================================================================

testcases/kernel/syscalls/ppoll/ppoll01.c +3 -1
@@ -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
===================================================================

testcases/kernel/syscalls/utimes/utimes01.c +2 -0
@@ -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
Quoted 10 lines
Quoted 9 lines

------------------------------------------------------------------------------
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
[email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#3 lore raw
Quoted 14 lines · Darshak Shah
Quoted 12 lines · Subrata Modak

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");

Quoted 7 lines

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.

Please attach the patch as a file as well as inline. Some MTAs and
mail clients (like gmail for me) screw up whitespace and other fuzz in patches when folks include it inline in email.
Thanks!
-Garrett

------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#4 lore raw
Quoted 24 lines · Garrett Cooper
Quoted 21 lines · Darshak Shah
Quoted 13 lines · Subrata Modak

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.

Quoted 8 lines
Quoted 2 lines

The patch seems to apply correctly.

Please attach the patch as a file as well as inline. Some MTAs and
mail clients (like gmail for me) screw up whitespace and other fuzz in patches when folks include it inline in email.
Thanks!
-Garrett

Attached.

testcases/kernel/syscalls/open/open10.c +5 -0
Index: 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);
testcases/kernel/syscalls/splice/splice02.c +1 -0
Index: 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();
 	    }
testcases/kernel/io/direct_io/diotest2.c +1 -0
Index: 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);
 
 }
 
testcases/kernel/io/direct_io/diotest3.c +1 -0
Index: 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)
testcases/kernel/io/direct_io/diotest5.c +1 -0
Index: 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)
testcases/kernel/io/direct_io/diotest6.c +1 -0
Index: 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)
testcases/kernel/mem/mmapstress/mmapstress02.c +4 -0
Index: 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();
testcases/kernel/mem/mmapstress/mmapstress01.c +6 -1
Index: 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;
 }
testcases/kernel/mem/mmapstress/mmapstress05.c +9 -0
Index: 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"); \
 		}
testcases/kernel/mem/mmapstress/mmapstress10.c +88 -34

288 lines not on this page · raw message

testcases/kernel/syscalls/ppoll/ppoll01.c +3 -1
Index: 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);
testcases/kernel/syscalls/utimes/utimes01.c +2 -0
Index: 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#5 lore raw
Quoted 27 lines · Darshak Shah
Quoted 26 lines · Garrett Cooper
Quoted 23 lines · Darshak Shah
Quoted 13 lines · Subrata Modak

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.

Quoted 7 lines
Quoted 6 lines

Please attach the patch as a file as well as inline. Some MTAs and
mail clients (like gmail for me) screw up whitespace and other fuzz in patches when folks include it inline in email.
Thanks!
-Garrett

Attached.

Thanks. Applies fine now.

Regards--
Subrata

------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#1 lore raw
In reply to Darshak Shah

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");

Regards--
Subrata
(Refer to git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev)

Quoted 581 lines · Darshak Shah

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.

Index: ltp-full-20091231/testcases/kernel/syscalls/open/open10.c
===================================================================

testcases/kernel/syscalls/open/open10.c +5 -0
@@ -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
===================================================================

testcases/kernel/syscalls/splice/splice02.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest2.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest3.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest5.c +1 -0
@@ -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
===================================================================

testcases/kernel/io/direct_io/diotest6.c +1 -0
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress02.c +4 -0
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress01.c +6 -1
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress05.c +9 -0
@@ -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
===================================================================

testcases/kernel/mem/mmapstress/mmapstress10.c +40 -20
@@ -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

testcases/kernel/mem/mmapstress/mmapstress10.c +3 -3
-            || !(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();
          }
      }
testcases/kernel/mem/mmapstress/mmapstress10.c +45 -11
-
+    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
===================================================================

testcases/kernel/syscalls/ppoll/ppoll01.c +3 -1
@@ -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
===================================================================

testcases/kernel/syscalls/utimes/utimes01.c +2 -1
@@ -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
 
 
------------------------------------------------------------------------------
Quoted 7 lines

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
[email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list