[Devel] [PATCH] c/r: fix false negative of test for unlinked files at checkpoint

Oren Laadan orenl at cs.columbia.edu
Wed Feb 10 17:39:43 PST 2010


Checkpoint will abort when it detects non-checkpoint-able state. This
patch fixes a false positive of testing for unlinked files.

The test for an unlinked file (or directory) is not file system
agnostic. Commit a3a065e3f13da8a3470ed09c7f38aad256083726 made it
visible when it changed the behavior of dentry for pipe, sockets and
anon_inodes (eventfd, timerfd, epoll, signalfd and perf...) to set
their DCACHE_UNHASHED.

This is fixed by moving the actual test whether the file is unlinked
or not to the per filesystem .checkpoint() method, (including the
default generic_file_checkpoint).

Signed-off-by: Oren Laadan <orenl at cs.columbia.edu>
---
 checkpoint/files.c |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/checkpoint/files.c b/checkpoint/files.c
index d1242f2..267d361 100644
--- a/checkpoint/files.c
+++ b/checkpoint/files.c
@@ -197,14 +197,20 @@ int generic_file_checkpoint(struct ckpt_ctx *ctx, struct file *file)
 	struct ckpt_hdr_file_generic *h;
 	int ret;
 
-	h = ckpt_hdr_get_type(ctx, sizeof(*h), CKPT_HDR_FILE);
-	if (!h)
-		return -ENOMEM;
-
 	/*
 	 * FIXME: when we'll add support for unlinked files/dirs, we'll
 	 * need to distinguish between unlinked filed and unlinked dirs.
 	 */
+	if (d_unlinked(file->f_dentry)) {
+		ckpt_err(ctx, -EBADF, "%(T)%(P)Unlinked files unsupported\n",
+			 file);
+		return -EBADF;
+	}
+
+	h = ckpt_hdr_get_type(ctx, sizeof(*h), CKPT_HDR_FILE);
+	if (!h)
+		return -ENOMEM;
+
 	h->common.f_type = CKPT_FILE_GENERIC;
 
 	ret = checkpoint_file_common(ctx, file, &h->common);
@@ -231,11 +237,6 @@ int checkpoint_file(struct ckpt_ctx *ctx, void *ptr)
 			       file, file->f_op);
 		return -EBADF;
 	}
-	if (d_unlinked(file->f_dentry)) {
-		ckpt_err(ctx, -EBADF, "%(T)%(P)Unlinked files unsupported\n",
-			 file);
-		return -EBADF;
-	}
 
 	ret = file->f_op->checkpoint(ctx, file);
 	if (ret < 0)
-- 
1.6.3.3

_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list