Hi, Sorry for be late, I have written v2 version according to all your suggestions, thanks.
Regards, Xiaoguang Wang On 05/12/2015 07:37 PM, Cyril Hrubis wrote: > Hi! >> --- a/runtest/kernel_misc >> +++ b/runtest/kernel_misc >> @@ -11,3 +11,4 @@ rcu_torture rcu_torture.sh >> lock_torture lock_torture.sh >> zram01 zram01.sh >> zram02 zram02.sh >> +zram03 zram03 >> diff --git a/testcases/kernel/device-drivers/zram/.gitignore >> b/testcases/kernel/device-drivers/zram/.gitignore >> new file mode 100644 >> index 0000000..7d54f60 >> --- /dev/null >> +++ b/testcases/kernel/device-drivers/zram/.gitignore >> @@ -0,0 +1 @@ >> +/zram03 >> diff --git a/testcases/kernel/device-drivers/zram/Makefile >> b/testcases/kernel/device-drivers/zram/Makefile >> index 0d73f66..5077cf4 100644 >> --- a/testcases/kernel/device-drivers/zram/Makefile >> +++ b/testcases/kernel/device-drivers/zram/Makefile >> @@ -17,6 +17,6 @@ >> top_srcdir ?= ../../../.. >> include $(top_srcdir)/include/mk/testcases.mk >> >> -INSTALL_TARGETS := *.sh >> +INSTALL_TARGETS := *.sh zram03 > > Hmm, shouldn't these two changes be rather part of the previous patch? > >> include $(top_srcdir)/include/mk/generic_leaf_target.mk >> diff --git a/testcases/kernel/device-drivers/zram/zram03.c >> b/testcases/kernel/device-drivers/zram/zram03.c >> index a5abb38..8448234 100644 >> --- a/testcases/kernel/device-drivers/zram/zram03.c >> +++ b/testcases/kernel/device-drivers/zram/zram03.c >> @@ -23,6 +23,7 @@ >> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA >> * 02110-1301, USA. >> */ >> + >> #include <sys/types.h> >> #include <sys/stat.h> >> #include <sys/mman.h> >> @@ -31,7 +32,9 @@ >> #include <stdio.h> >> #include <string.h> >> #include <unistd.h> >> + >> #include "test.h" >> +#include "safe_macros.h" >> >> char *TCID = "zram01"; >> int TST_TOTAL = 1; >> @@ -81,15 +84,10 @@ static void set_disksize(void) >> char size[BUFSIZ]; >> >> tst_resm(TINFO, "create a zram device with %ld bytes in size.", SIZE); >> - fd = open(PATH_ZRAM "/disksize", O_WRONLY); >> - if (fd == -1) >> - tst_brkm(TBROK | TERRNO, cleanup, "open %s", >> - PATH_ZRAM "/disksize"); >> + fd = SAFE_OPEN(cleanup, PATH_ZRAM "/disksize", O_WRONLY); >> sprintf(size, "%ld", SIZE); >> - if (write(fd, size, strlen(size)) != strlen(size)) >> - tst_brkm(TBROK | TERRNO, cleanup, "write %s to %s", size, >> - PATH_ZRAM "/disksize"); >> - close(fd); >> + SAFE_WRITE(cleanup, 1, fd, size, strlen(size)); >> + SAFE_CLOSE(cleanup, fd); > > What about: > > SAFE_FILE_PRINTF(cleanup, PATH_ZRAM "/disksize", "%ld", SIZE); >> } >> >> static void write_device(void) >> @@ -97,56 +95,48 @@ static void write_device(void) >> int fd; >> char *s; >> >> - tst_resm(TINFO, "map it into memory."); >> - fd = open(DEVICE, O_RDWR); >> - if (fd == -1) >> - tst_brkm(TBROK | TERRNO, cleanup, "open %s", DEVICE); >> - s = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); >> - if (s == MAP_FAILED) >> - tst_brkm(TBROK | TERRNO, cleanup, "mmap"); >> + tst_resm(TINFO, "map this zram device into memory."); >> + fd = SAFE_OPEN(cleanup, DEVICE, O_RDWR); >> + s = SAFE_MMAP(cleanup, NULL, SIZE, PROT_READ | PROT_WRITE, >> + MAP_SHARED, fd, 0); >> >> tst_resm(TINFO, "write all the memory."); >> memset(s, 'a', SIZE - 1); >> s[SIZE - 1] = '\0'; >> >> - if (munmap(s, SIZE) == -1) >> - tst_brkm(TBROK | TERRNO, cleanup, "munmap"); >> - >> - close(fd); >> + SAFE_MUNMAP(cleanup, s, SIZE); >> + SAFE_CLOSE(cleanup, fd); >> } >> >> static void verify_device(void) >> { >> int fd; >> - long i, fail; >> + long i = 0, fail = 0; >> char *s; >> >> tst_resm(TINFO, "verify contents from device."); >> - fd = open(DEVICE, O_RDONLY); >> - if (fd == -1) >> - tst_brkm(TBROK | TERRNO, cleanup, "open %s", DEVICE); >> - s = mmap(NULL, SIZE, PROT_READ, MAP_PRIVATE, fd, 0); >> - if (s == MAP_FAILED) >> - tst_brkm(TBROK | TERRNO, cleanup, "2nd mmap"); >> - >> - i = 0; >> - fail = 0; >> + fd = SAFE_OPEN(cleanup, DEVICE, O_RDONLY); >> + s = SAFE_MMAP(cleanup, NULL, SIZE, PROT_READ, MAP_PRIVATE, fd, 0); >> + >> while (s[i] && i < SIZE - 1) { >> if (s[i] != 'a') >> fail++; >> i++; >> } >> - if (i != SIZE - 1) >> + if (i != SIZE - 1) { >> tst_resm(TFAIL, "expect size: %ld, actual size: %ld.", >> SIZE - 1, i); >> - else if (s[i] != '\0') >> + } else if (s[i] != '\0') { >> tst_resm(TFAIL, "zram device seems not null terminated"); >> - if (fail) >> + } else if (fail) { >> tst_resm(TFAIL, "%ld failed bytes found.", fail); >> - if (munmap(s, SIZE) == -1) >> - tst_brkm(TBROK | TERRNO, cleanup, "2nd munmap"); >> + } else { >> + tst_resm(TPASS, "data read from zram device is consistent " >> + "with those are written"); >> + } >> >> - close(fd); >> + SAFE_MUNMAP(cleanup, s, SIZE); >> + SAFE_CLOSE(cleanup, fd); >> } >> >> static void reset(void) >> @@ -154,14 +144,9 @@ static void reset(void) >> int fd; >> >> tst_resm(TINFO, "reset it."); >> - fd = open(PATH_ZRAM "/reset", O_WRONLY); >> - if (fd == -1) >> - tst_brkm(TBROK | TERRNO, cleanup, "open %s", >> - PATH_ZRAM "/reset"); >> - if (write(fd, "1", 1) != 1) >> - tst_brkm(TBROK | TERRNO, cleanup, "write 1 to %s", >> - PATH_ZRAM "/reset"); >> - close(fd); >> + fd = SAFE_OPEN(cleanup, PATH_ZRAM "/reset", O_WRONLY); >> + SAFE_WRITE(cleanup, 1, fd, "1", 1); >> + SAFE_CLOSE(cleanup, fd); > > > SAFE_FILE_PRINTF() here as well. > >> static void setup(void) >> @@ -171,12 +156,16 @@ static void setup(void) >> tst_require_root(NULL); >> >> retry: >> - if (access(PATH_ZRAM, R_OK | W_OK | X_OK) == -1) { >> + if (access(PATH_ZRAM, F_OK) == -1) { >> if (errno == ENOENT) { >> - if (retried) >> + if (retried) { >> tst_brkm(TCONF, NULL, >> "system has no zram device."); >> - system("modprobe zram"); >> + } >> + if (system("modprobe zram") == -1) { >> + tst_brkm(TBROK | TERRNO, cleanup, >> + "system(modprobe zram) failed"); >> + } >> modprobe = 1; >> retried = 1; >> goto retry; >> @@ -190,26 +179,17 @@ retry: >> >> static void cleanup(void) >> { >> - if (modprobe == 1) >> - system("rmmod zram"); >> + if (modprobe == 1 && system("rmmod zram") == -1) >> + tst_resm(TWARN | TERRNO, "system(rmmod zram) failed"); >> } >> >> static void print(char *string) >> { >> - FILE *fp; >> - char buf[BUFSIZ], value[BUFSIZ]; >> - >> - sprintf(buf, "%s/%s", PATH_ZRAM, string); >> - fp = fopen(buf, "r"); >> - if (fp == NULL) >> - tst_brkm(TBROK | TERRNO, cleanup, "fopen %s", buf); >> - >> - if (fgets(value, BUFSIZ, fp) == NULL) >> - tst_brkm(TBROK | TERRNO, cleanup, "fgets %s", buf); >> - value[strlen(value) - 1] = '\0'; >> - fclose(fp); >> + char filename[BUFSIZ], value[BUFSIZ]; >> >> - tst_resm(TINFO, "%s is %s", buf, value); >> + sprintf(filename, "%s/%s", PATH_ZRAM, string); >> + SAFE_FILE_SCANF(cleanup, filename, "%s", value); >> + tst_resm(TINFO, "%s is %s", filename, value); >> } > ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list