fsstress: add the -c option
[xfstests-dev.git] / ltp / fsstress.c
index ad0c65fe1c1c8e4192cf017a5aa16ed3fb55e942..1e6c913294aed6ae50f88ca67c2127e84a6d8ed8 100644 (file)
@@ -258,6 +258,7 @@ int         procid;
 int            rtpct;
 unsigned long  seed = 0;
 ino_t          top_ino;
 int            rtpct;
 unsigned long  seed = 0;
 ino_t          top_ino;
+int            cleanup = 0;
 int            verbose = 0;
 int            verifiable_log = 0;
 sig_atomic_t   should_stop = 0;
 int            verbose = 0;
 int            verifiable_log = 0;
 sig_atomic_t   should_stop = 0;
@@ -331,7 +332,7 @@ int main(int argc, char **argv)
        xfs_error_injection_t           err_inj;
        struct sigaction action;
        int             loops = 1;
        xfs_error_injection_t           err_inj;
        struct sigaction action;
        int             loops = 1;
-       const char      *allopts = "d:e:f:i:l:m:M:n:o:p:rs:S:vVwx:X:zH";
+       const char      *allopts = "cd:e:f:i:l:m:M:n:o:p:rs:S:vVwx:X:zH";
 
        errrange = errtag = 0;
        umask(0);
 
        errrange = errtag = 0;
        umask(0);
@@ -340,6 +341,9 @@ int main(int argc, char **argv)
        myprog = argv[0];
        while ((c = getopt(argc, argv, allopts)) != -1) {
                switch (c) {
        myprog = argv[0];
        while ((c = getopt(argc, argv, allopts)) != -1) {
                switch (c) {
+               case 'c':
+                       cleanup = 1;
+                       break;
                case 'd':
                        dirname = optarg;
                        break;
                case 'd':
                        dirname = optarg;
                        break;
@@ -862,6 +866,7 @@ doproc(void)
 {
        struct stat64   statbuf;
        char            buf[10];
 {
        struct stat64   statbuf;
        char            buf[10];
+       char            cmd[64];
        int             opno;
        int             rval;
        opdesc_t        *p;
        int             opno;
        int             rval;
        opdesc_t        *p;
@@ -907,6 +912,10 @@ doproc(void)
        }
 errout:
        chdir("..");
        }
 errout:
        chdir("..");
+       if (cleanup) {
+               sprintf(cmd, "rm -rf %s", buf);
+               system(cmd);
+       }
 }
 
 /*
 }
 
 /*
@@ -1579,10 +1588,11 @@ void
 usage(void)
 {
        printf("Usage: %s -H   or\n", myprog);
 usage(void)
 {
        printf("Usage: %s -H   or\n", myprog);
-       printf("       %s [-d dir][-e errtg][-f op_name=freq][-l loops][-n nops]\n",
+       printf("       %s [-c][-d dir][-e errtg][-f op_name=freq][-l loops][-n nops]\n",
                myprog);
        printf("          [-p nproc][-r len][-s seed][-v][-w][-x cmd][-z][-S][-X ncmd]\n");
        printf("where\n");
                myprog);
        printf("          [-p nproc][-r len][-s seed][-v][-w][-x cmd][-z][-S][-X ncmd]\n");
        printf("where\n");
+       printf("   -c               clean up the test directory after each run\n");
        printf("   -d dir           specifies the base directory for operations\n");
        printf("   -e errtg         specifies error injection stuff\n");
        printf("   -f op_name=freq  changes the frequency of option name to freq\n");
        printf("   -d dir           specifies the base directory for operations\n");
        printf("   -e errtg         specifies error injection stuff\n");
        printf("   -f op_name=freq  changes the frequency of option name to freq\n");