fsx: add five-argument logging function
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 7 Dec 2018 06:23:58 +0000 (22:23 -0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 9 Dec 2018 14:55:30 +0000 (22:55 +0800)
Add a five-argument logging function to support new operations.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-By: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
ltp/fsx.c

index c3db62e4d559ec5653186c5efbe2b4e5e832266b..1907036eb394cf257f1960cbe5003e1b005ced93 100644 (file)
--- a/ltp/fsx.c
+++ b/ltp/fsx.c
@@ -51,7 +51,8 @@ enum opflags { FL_NONE = 0, FL_SKIPPED = 1, FL_CLOSE_OPEN = 2, FL_KEEP_SIZE = 4
 
 struct log_entry {
        int     operation;
-       int     args[3];
+       int     nr_args;
+       int     args[4];
        enum opflags flags;
 };
 
@@ -278,6 +279,27 @@ static int op_code(const char *name)
        return -1;
 }
 
+void
+log5(int operation, int arg0, int arg1, int arg2, enum opflags flags)
+{
+       struct log_entry *le;
+
+       le = &oplog[logptr];
+       le->operation = operation;
+       if (closeopen)
+               flags |= FL_CLOSE_OPEN;
+       le->args[0] = arg0;
+       le->args[1] = arg1;
+       le->args[2] = arg2;
+       le->args[3] = file_size;
+       le->nr_args = 4;
+       le->flags = flags;
+       logptr++;
+       logcount++;
+       if (logptr >= LOGSIZE)
+               logptr = 0;
+}
+
 void
 log4(int operation, int arg0, int arg1, enum opflags flags)
 {
@@ -290,6 +312,7 @@ log4(int operation, int arg0, int arg1, enum opflags flags)
        le->args[0] = arg0;
        le->args[1] = arg1;
        le->args[2] = file_size;
+       le->nr_args = 3;
        le->flags = flags;
        logptr++;
        logcount++;
@@ -439,11 +462,13 @@ logdump(void)
                        i = 0;
 
                if (logopsf) {
+                       int j;
+
                        if (lp->flags & FL_SKIPPED)
                                fprintf(logopsf, "skip ");
-                       fprintf(logopsf, "%s 0x%x 0x%x 0x%x",
-                               op_name(lp->operation),
-                               lp->args[0], lp->args[1], lp->args[2]);
+                       fprintf(logopsf, "%s", op_name(lp->operation));
+                       for (j = 0; j < lp->nr_args; j++)
+                               fprintf(logopsf, " 0x%x", lp->args[j]);
                        if (lp->flags & FL_KEEP_SIZE)
                                fprintf(logopsf, " keep_size");
                        if (lp->flags & FL_CLOSE_OPEN)
@@ -1432,6 +1457,15 @@ cleanup(int sig)
        exit(sig);
 }
 
+static int
+op_args_count(int operation)
+{
+       switch (operation) {
+       default:
+               return 3;
+       }
+}
+
 static int
 read_op(struct log_entry *log_entry)
 {
@@ -1464,7 +1498,8 @@ read_op(struct log_entry *log_entry)
                log_entry->operation = op_code(str);
                if (log_entry->operation == -1)
                        goto fail;
-               for (i = 0; i < 3; i++) {
+               log_entry->nr_args = op_args_count(log_entry->operation);
+               for (i = 0; i < log_entry->nr_args; i++) {
                        char *end;
 
                        str = strtok(NULL, " \t\n");