From: Sukadev Bhattiprolu <[email protected]>
Date: Tue, 26 Jan 2010 16:46:09 -0800
Subject: [PATCH 05/11] Move event-notifications to libcrtest/common.c

The event notification functions using eventfd can be used by other
fcntl tests (and possibly other tests). Move them out of filelock1.c
and into libcrtest/common.c

Signed-off-by: Sukadev Bhattiprolu <[email protected]>
---
 fileio/filelock1.c    |   53 -------------------------------------------
 libcrtest/common.c    |   60 +++++++++++++++++++++++++++++++++++++++++++++++++
 libcrtest/libcrtest.h |    7 +++++
 3 files changed, 67 insertions(+), 53 deletions(-)

diff --git a/fileio/filelock1.c b/fileio/filelock1.c
index 305cbeb..19f7e3b 100644
--- a/fileio/filelock1.c
+++ b/fileio/filelock1.c
@@ -9,8 +9,6 @@
 #define TEST_FILE      "data.d/data.filelock1"
 #define LOG_FILE       "logs.d/log.filelock1"
 
-typedef unsigned long long u64;
-
 extern FILE *logfp;
 int test_fd;
 int event_fd1;
@@ -31,57 +29,6 @@ int event_fd2;
  *     held by the other process.
  */
 
-setup_notification()
-{
-       int efd;
-
-       efd = eventfd(0, 0);
-       if (efd < 0) {
-               fprintf(logfp, "ERROR: eventfd(): %s\n", strerror(errno));
-               do_exit(1);
-       }
-       return efd;
-}
-
-wait_for_events(int efd, u64 total)
-{
-       int n;
-       u64 events;
-       u64 count = (u64)0;
-
-       do {
-               fprintf(logfp, "%d: wait_for_events: fd %d, reading for %llu\n",
-                               getpid(), efd, total);
-               fflush(logfp);
-
-               n = read(efd, &events, sizeof(events));
-               if (n != sizeof(events)) {
-                       fprintf(logfp, "ERROR: read(event_fd) %s\n",
-                                               strerror(errno));
-                       do_exit(1);
-               }
-               fprintf(logfp, "%d: wait_for_events: fd %d read %llu\n",
-                               getpid(), efd, events);
-
-               count += events;
-       } while (count < total);
-}
-
-notify_one_event(int efd)
-{
-       int n;
-       u64 event = (u64)1;
-
-       fprintf(logfp, "%d: Notifying one event on fd %d\n", getpid(), efd);
-       fflush(logfp);
-
-       n = write(efd, &event, sizeof(event));
-       if (n != sizeof(event)) {
-               fprintf(logfp, "ERROR: write(event_fd) %s\n", strerror(errno));
-               do_exit(1);
-       }
-}
-
 struct test_arg {
        int child_idx;
        int type;
diff --git a/libcrtest/common.c b/libcrtest/common.c
index ca3d2d8..b29042a 100644
--- a/libcrtest/common.c
+++ b/libcrtest/common.c
@@ -335,3 +335,63 @@ int move_to_cgroup(char *subsys, char *grp, int pid)
        fclose(fout);
        return 1;
 }
+
+/*
+ * Set up an eventfd for communication between parent/child processes
+ */
+int setup_notification(void)
+{
+       int efd;
+
+       efd = eventfd(0, 0);
+       if (efd < 0) {
+               fprintf(logfp, "ERROR: eventfd(): %s\n", strerror(errno));
+               do_exit(1);
+       }
+       return efd;
+}
+
+/*
+ * Wait on eventfd @efd till the total number of events equals @total.
+ */
+void wait_for_events(int efd, u64 total)
+{
+       int n;
+       u64 events;
+       u64 count = (u64)0;
+
+       do {
+               fprintf(logfp, "%d: wait_for_events: fd %d, reading for %llu\n",
+                               getpid(), efd, total);
+               fflush(logfp);
+
+               n = read(efd, &events, sizeof(events));
+               if (n != sizeof(events)) {
+                       fprintf(logfp, "ERROR: read(event_fd) %s\n",
+                                               strerror(errno));
+                       do_exit(1);
+               }
+               fprintf(logfp, "%d: wait_for_events: fd %d read %llu\n",
+                               getpid(), efd, events);
+
+               count += events;
+       } while (count < total);
+}
+
+/*
+ * Notify one event on the eventfd @efd.
+ */
+void notify_one_event(int efd)
+{
+       int n;
+       u64 event = (u64)1;
+
+       fprintf(logfp, "%d: Notifying one event on fd %d\n", getpid(), efd);
+       fflush(logfp);
+
+       n = write(efd, &event, sizeof(event));
+       if (n != sizeof(event)) {
+               fprintf(logfp, "ERROR: write(event_fd) %s\n", strerror(errno));
+               do_exit(1);
+       }
+}
diff --git a/libcrtest/libcrtest.h b/libcrtest/libcrtest.h
index a42c178..9a0a13e 100644
--- a/libcrtest/libcrtest.h
+++ b/libcrtest/libcrtest.h
@@ -12,6 +12,10 @@ struct record {
        char data[256];
 };
 
+#ifdef __i386__
+typedef unsigned long long u64;
+#endif
+
 extern void do_exit(int status);
 extern int test_done(void);
 extern int test_checkpoint_done();
@@ -23,4 +27,7 @@ extern char *freezer_mountpoint(void);
 /* right now, subsys must always be "freezer" */
 extern int move_to_cgroup(char *subsys, char *grp, int pid);
 
+extern void notify_one_event(int efd);
+extern void wait_for_events(int efd, u64 total);
+extern int setup_notification();
 #endif /* LIBCRTEST_H */
-- 
1.6.0.4

_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to