Dave Hansen [dave@xxxxxxxxxxxxxxxxxx] wrote: | | This pair of functions will check to see whether a given | 'struct file' can be checkpointed. If it can't be, the | "explain" function can also give a description why. | | Signed-off-by: Dave Hansen <dave@xxxxxxxxxxxxxxxxxx> | --- | | linux-2.6.git-dave/checkpoint/ckpt_file.c | 46 ++++++++++++++++++++++++++ | linux-2.6.git-dave/include/linux/checkpoint.h | 18 ++++++++++ | 2 files changed, 64 insertions(+) | | diff -puN checkpoint/ckpt_file.c~cr-explain-unckpt-file checkpoint/ckpt_file.c | --- linux-2.6.git/checkpoint/ckpt_file.c~cr-explain-unckpt-file 2009-02-27 12:07:38.000000000 -0800 | +++ linux-2.6.git-dave/checkpoint/ckpt_file.c 2009-02-27 12:07:38.000000000 -0800 | @@ -72,6 +72,52 @@ int cr_scan_fds(struct files_struct *fil | return n; | } | | +int fs_is_cr_able(struct file_system_type *fs_type) Too many variations in naming ? "*cr_able(), *supported(), *checkpointable()' all for a boolean result. How about calling this cr_fs_checkpointable() ? | +{ | + if (fs_type->fs_flags & FS_CHECKPOINTABLE) | + return 1; | + /* | + * We assume that all block-based filesystems that | + * need devices work. This covers all of the | + * "important" fs's by default like ext*. If this | + * assumption becomes untrue, we may need a | + * NOT_CHECKPOINTABLE flag in the future | + */ | + if (fs_type->fs_flags & FS_REQUIRES_DEV) | + return 1; | + return 0; | +} | + | +int cr_explain_file(struct file *file, char *explain, int left) | +{ | + struct inode *inode = file->f_dentry->d_inode; | + struct file_system_type *fs_type = inode->i_sb->s_type; | + | + if (!fs_is_cr_able(fs_type)) | + return snprintf(explain, left, | + " (%s does not support checkpoint)", | + fs_type->name); | + | + if (special_file(inode->i_mode)) | + return snprintf(explain, left, " (special file)"); | + | + return 0; | +} | + | +int cr_file_supported(struct file *file) and this cr_file_checkpointable() ? Sukadev _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers