X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fopenunlink.c;h=4a0d8c3a67dd3fdeca7bc1f65acf16c0d070b815;hb=4a80a10a9ed8038669b524d20e20fd2a87448b82;hp=edb1ff98faa861547a12371835797a08e79d650d;hpb=41ce6a5b2a9b06894efb3b0b46eb92405eb5d428;p=fs%2Flustre-release.git diff --git a/lustre/tests/openunlink.c b/lustre/tests/openunlink.c index edb1ff9..4a0d8c3 100644 --- a/lustre/tests/openunlink.c +++ b/lustre/tests/openunlink.c @@ -1,28 +1,38 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + */ #include #include #include #include #include +#include #include #include -#define T1 "write before unlink\n" -#define T2 "write after unlink\n" +#define T1 "write data before unlink\n" +#define T2 "write data after unlink\n" char buf[128]; int main(int argc, char **argv) { + char *fname, *fname2; + struct stat st; int fd, rc; - if (argc != 2) { - fprintf(stderr, "usage: %s filename\n", argv[0]); + if (argc < 2 || argc > 3) { + fprintf(stderr, "usage: %s filename [filename2]\n", argv[0]); exit(1); - } else { - fprintf(stderr, "congratulations - program starting\n"); } + fname = argv[1]; + if (argc == 3) + fname2 = argv[2]; + else + fname2 = argv[1]; + fprintf(stderr, "opening\n"); - fd = open(argv[1], O_RDWR | O_TRUNC | O_CREAT, 0644); + fd = open(fname, O_RDWR | O_TRUNC | O_CREAT, 0644); if (fd == -1) { fprintf(stderr, "open (normal) %s\n", strerror(errno)); exit(1); @@ -31,35 +41,53 @@ int main(int argc, char **argv) fprintf(stderr, "writing\n"); rc = write(fd, T1, strlen(T1) + 1); if (rc != strlen(T1) + 1) { - fprintf(stderr, "write (normal) %s\n", strerror(errno)); + fprintf(stderr, "write (normal) %s (rc %d)\n", + strerror(errno), rc); exit(1); } - fprintf(stderr, "closing\n"); - rc = close(fd); + if (argc == 3) { + fprintf (stderr, "unlinking %s\n", fname2); + rc = unlink(fname2); + if (rc) { + fprintf(stderr, "unlink %s\n", strerror(errno)); + exit(1); + } + } else { + printf("unlink %s and press enter\n", fname); + getc(stdin); + } + + if (access(fname, F_OK) == 0) { + fprintf(stderr, "%s still exists\n", fname2); + exit(1); + } + + fprintf(stderr, "resetting fd offset\n"); + rc = lseek(fd, 0, SEEK_SET); if (rc) { - fprintf(stderr, "close (normal) %s\n", strerror(errno)); + fprintf(stderr, "seek %s\n", strerror(errno)); exit(1); } - fprintf(stderr, "opening again\n"); - fd = open(argv[1], O_RDWR); - if (fd == -1) { - fprintf(stderr, "open (unlink) %s\n", strerror(errno)); + if (access(fname, F_OK) == 0) { + fprintf(stderr, "%s still exists\n", fname); exit(1); } - fprintf(stderr, "unlinking\n"); - rc = unlink(argv[1]); + fprintf(stderr, "fstat...\n"); + rc = fstat(fd, &st); if (rc) { - fprintf(stderr, "unlink %s\n", strerror(errno)); + fprintf(stderr, "fstat (unlink) %s\n", strerror(errno)); exit(1); } + if (st.st_nlink != 0) + fprintf(stderr, "st_nlink = %d\n", (int)st.st_nlink); fprintf(stderr, "reading\n"); rc = read(fd, buf, strlen(T1) + 1); if (rc != strlen(T1) + 1) { - fprintf(stderr, "read (unlink) %s rc %d\n", + fprintf(stderr, "read (unlink) %s (rc %d)\n", strerror(errno), rc); exit(1); } @@ -72,7 +100,7 @@ int main(int argc, char **argv) fprintf(stderr, "truncating\n"); rc = ftruncate(fd, 0); - if (rc ) { + if (rc) { fprintf(stderr, "truncate (unlink) %s\n", strerror(errno)); exit(1); } @@ -104,8 +132,8 @@ int main(int argc, char **argv) fprintf(stderr, "reading again\n"); rc = read(fd, buf, strlen(T2) + 1); if (rc != strlen(T2) + 1) { - fprintf(stderr, "read (after unlink rewrite) %s\n", - strerror(errno)); + fprintf(stderr, "read (after unlink rewrite) %s (rc %d)\n", + strerror(errno), rc); exit(1); } @@ -115,7 +143,7 @@ int main(int argc, char **argv) exit(1); } - fprintf(stderr, "closing again\n"); + fprintf(stderr, "closing\n"); rc = close(fd); if (rc) { fprintf(stderr, "close (unlink) %s\n", strerror(errno));