[CRIU] [PATCH 6/6] test/zdtm/static: split ofd_file_locks.h to .c/.h

Kir Kolyshkin kir at openvz.org
Tue May 2 16:51:47 PDT 2017


Having a "header library" is nice if it's small and clean, but
 - we compile its code a few times;
 - there is no distinction between internal and external functions.

Let's separate functions out of header and into a .c file.

Signed-off-by: Kir Kolyshkin <kir at openvz.org>
---
 test/zdtm/static/Makefile         |   3 +-
 test/zdtm/static/ofd_file_locks.c | 138 +++++++++++++++++++++++++++++++++++++
 test/zdtm/static/ofd_file_locks.h | 139 +-------------------------------------
 3 files changed, 143 insertions(+), 137 deletions(-)
 create mode 100644 test/zdtm/static/ofd_file_locks.c

diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile
index fca179a..55e99bf 100644
--- a/test/zdtm/static/Makefile
+++ b/test/zdtm/static/Makefile
@@ -306,7 +306,7 @@ TST_STATE	=				\
 		conntracks			\
 		route_rules			\
 
-AUX_SRC	= get_smaps_bits.c
+AUX_SRC	= get_smaps_bits.c ofd_file_locks.c
 
 SRC	= $(TST:%=%.c) $(AUX_SRC)
 OBJ	= $(SRC:%.c=%.o)
@@ -392,6 +392,7 @@ $(TST):	| $(LIB)
 
 aio00:			LDLIBS += -laio
 different_creds:	LDLIBS += -lcap
+file_locks06 file_locks07 file_locks08:	ofd_file_locks.o
 futex:			CFLAGS += -pthread
 futex:			LDFLAGS += -pthread
 futex-rl:		CFLAGS += -pthread
diff --git a/test/zdtm/static/ofd_file_locks.c b/test/zdtm/static/ofd_file_locks.c
new file mode 100644
index 0000000..61495a2
--- /dev/null
+++ b/test/zdtm/static/ofd_file_locks.c
@@ -0,0 +1,138 @@
+#include <sys/file.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+
+#include "zdtmtst.h"
+#include "fs.h"
+#include "ofd_file_locks.h"
+
+static int parse_ofd_lock(char *buf, struct flock64 *lck)
+{
+	char fl_flag[10], fl_type[15], fl_option[10], fl_end[32];
+	long long start;
+	int num;
+
+	if (strncmp(buf, "lock:\t", 6) != 0)
+		return 1; /* isn't lock, skip record */
+
+	num = sscanf(buf,
+		"%*s %*d: %s %s %s %*d %*x:%*x:%*d %lld %s",
+		fl_flag, fl_type, fl_option, &start, fl_end);
+
+	if (num < 4) {
+		pr_err("Invalid lock info %s\n", buf);
+		return -1;
+	}
+	if (strcmp(fl_flag, "OFDLCK"))
+		return 1;
+
+	lck->l_start = start;
+
+	if (strcmp(fl_end, "EOF")) {
+		unsigned long end;
+
+		if (sscanf(fl_end, "%lu", &end) <= 0) {
+			pr_err("Invalid lock entry\n");
+			return -1;
+		}
+		lck->l_len = end - lck->l_start + 1;
+	} else {
+		lck->l_len = 0;
+	}
+	if (strcmp(fl_option, "WRITE") == 0)
+		lck->l_type = F_WRLCK;
+	else
+		lck->l_type = F_RDLCK;
+
+	return 0;
+}
+
+static int read_fd_ofd_lock(int pid, int fd, struct flock64 *lck)
+{
+	char path[PATH_MAX];
+	char buf[100];
+	int num;
+	FILE *proc_file = NULL;
+
+	sprintf(path, "/proc/%i/fdinfo/%i", pid, fd);
+	proc_file = fopen(path, "r");
+
+	if (!proc_file) {
+		pr_err("Can't open %s\n", path);
+		return -1;
+	}
+
+	num = -1;
+	while (fgets(buf, sizeof(buf), proc_file)) {
+		num = parse_ofd_lock(buf, lck);
+		if (num <= 0)
+			break;
+	}
+
+	if (fclose(proc_file)) {
+		pr_err("Can't close %s\n", path);
+		return -1;
+	}
+	return num;
+}
+
+int check_lock_exists(const char *filename, struct flock64 *lck)
+{
+	int ret = -1;
+	int fd;
+
+	fd = open(filename, O_RDWR, 0666);
+
+	if (lck->l_type == F_RDLCK) {
+		/* check, that there is no write lock */
+		ret = fcntl(fd, F_OFD_GETLK, lck);
+		if (ret) {
+			pr_err("fcntl failed (%i)\n", ret);
+			goto out;
+		}
+		if (lck->l_type != F_UNLCK) {
+			pr_err("OFD lock type do not match\n");
+			goto out;
+		}
+	}
+
+	/* check, that lock is set */
+	lck->l_type = F_WRLCK;
+	ret = fcntl(fd, F_OFD_GETLK, lck);
+	if (ret) {
+		pr_err("fcntl failed (%i)\n", ret);
+		goto out;
+	}
+	if (lck->l_type == F_UNLCK) {
+		pr_err("Lock not found\n");
+		goto out;
+	}
+
+	ret = 0;
+out:
+	if (close(fd))
+		return -1;
+	return ret;
+}
+
+static int check_file_locks_match(struct flock64 *orig_lck, struct flock64 *lck)
+{
+	return orig_lck->l_start == lck->l_start &&
+		orig_lck->l_len == lck->l_len &&
+		orig_lck->l_type == lck->l_type;
+}
+
+int check_file_lock_restored(int pid, int fd, struct flock64 *lck)
+{
+	struct flock64 lck_restored;
+
+	if (read_fd_ofd_lock(pid, fd, &lck_restored))
+		return -1;
+
+	if (!check_file_locks_match(lck, &lck_restored)) {
+		pr_err("Can't restore file lock (fd: %i)\n", fd);
+		return -1;
+	}
+	return 0;
+}
diff --git a/test/zdtm/static/ofd_file_locks.h b/test/zdtm/static/ofd_file_locks.h
index b2c249a..0d500e1 100644
--- a/test/zdtm/static/ofd_file_locks.h
+++ b/test/zdtm/static/ofd_file_locks.h
@@ -2,12 +2,6 @@
 #define ZDTM_OFD_FILE_LOCKS_H_
 
 #include <sys/file.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include "zdtmtst.h"
-#include "fs.h"
 
 #ifndef F_OFD_GETLK
 #define F_OFD_GETLK	36
@@ -16,138 +10,11 @@
 #endif
 
 /*
- * Header library for parsing of OFD locks
+ * Functions for parsing of OFD locks
  * from procfs and checking them after restoring.
  */
 
-static int parse_ofd_lock(char *buf, struct flock64 *lck)
-{
-	char fl_flag[10], fl_type[15], fl_option[10], fl_end[32];
-	long long start;
-	int num;
-
-	if (strncmp(buf, "lock:\t", 6) != 0)
-		return 1; /* isn't lock, skip record */
-
-	num = sscanf(buf,
-		"%*s %*d: %s %s %s %*d %*x:%*x:%*d %lld %s",
-		fl_flag, fl_type, fl_option, &start, fl_end);
-
-	if (num < 4) {
-		pr_err("Invalid lock info %s\n", buf);
-		return -1;
-	}
-	if (strcmp(fl_flag, "OFDLCK"))
-		return 1;
-
-	lck->l_start = start;
-
-	if (strcmp(fl_end, "EOF")) {
-		unsigned long end;
-
-		if (sscanf(fl_end, "%lu", &end) <= 0) {
-			pr_err("Invalid lock entry\n");
-			return -1;
-		}
-		lck->l_len = end - lck->l_start + 1;
-	} else {
-		lck->l_len = 0;
-	}
-	if (strcmp(fl_option, "WRITE") == 0)
-		lck->l_type = F_WRLCK;
-	else
-		lck->l_type = F_RDLCK;
-
-	return 0;
-}
-
-static int read_fd_ofd_lock(int pid, int fd, struct flock64 *lck)
-{
-	char path[PATH_MAX];
-	char buf[100];
-	int num;
-	FILE *proc_file = NULL;
-
-	sprintf(path, "/proc/%i/fdinfo/%i", pid, fd);
-	proc_file = fopen(path, "r");
-
-	if (!proc_file) {
-		pr_err("Can't open %s\n", path);
-		return -1;
-	}
-
-	num = -1;
-	while (fgets(buf, sizeof(buf), proc_file)) {
-		num = parse_ofd_lock(buf, lck);
-		if (num <= 0)
-			break;
-	}
-
-	if (fclose(proc_file)) {
-		pr_err("Can't close %s\n", path);
-		return -1;
-	}
-	return num;
-}
-
-static int check_lock_exists(const char *filename, struct flock64 *lck)
-{
-	int ret = -1;
-	int fd;
-
-	fd = open(filename, O_RDWR, 0666);
-
-	if (lck->l_type == F_RDLCK) {
-		/* check, that there is no write lock */
-		ret = fcntl(fd, F_OFD_GETLK, lck);
-		if (ret) {
-			pr_err("fcntl failed (%i)\n", ret);
-			goto out;
-		}
-		if (lck->l_type != F_UNLCK) {
-			pr_err("OFD lock type do not match\n");
-			goto out;
-		}
-	}
-
-	/* check, that lock is set */
-	lck->l_type = F_WRLCK;
-	ret = fcntl(fd, F_OFD_GETLK, lck);
-	if (ret) {
-		pr_err("fcntl failed (%i)\n", ret);
-		goto out;
-	}
-	if (lck->l_type == F_UNLCK) {
-		pr_err("Lock not found\n");
-		goto out;
-	}
-
-	ret = 0;
-out:
-	if (close(fd))
-		return -1;
-	return ret;
-}
-
-static int check_file_locks_match(struct flock64 *orig_lck, struct flock64 *lck)
-{
-	return orig_lck->l_start == lck->l_start &&
-		orig_lck->l_len == lck->l_len &&
-		orig_lck->l_type == lck->l_type;
-}
-
-static int check_file_lock_restored(int pid, int fd, struct flock64 *lck)
-{
-	struct flock64 lck_restored;
-
-	if (read_fd_ofd_lock(pid, fd, &lck_restored))
-		return -1;
-
-	if (!check_file_locks_match(lck, &lck_restored)) {
-		pr_err("Can't restore file lock (fd: %i)\n", fd);
-		return -1;
-	}
-	return 0;
-}
+extern int check_lock_exists(const char *filename, struct flock64 *lck);
+extern int check_file_lock_restored(int pid, int fd, struct flock64 *lck);
 
 #endif /* ZDTM_OFD_FILE_LOCKS_H_ */
-- 
2.9.3



More information about the CRIU mailing list