[PATCH] makedumpfile: Check dump file early
Michael Holzheu
holzheu at linux.vnet.ibm.com
Mon Apr 22 05:11:17 EDT 2013
On Mon, 22 Apr 2013 09:01:23 +0900
HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote:
> > + if (info->flag_force) {
> > + if (access(path, W_OK) == 0)
> > + return TRUE; /* We have write permission */
> > + err_str = strerror(errno);
> > + } else {
> > + err_str = "File exists";
>
> How about strerror(EEXIST)? It's better to avoid hard code to use the
> same string as what libc returns.
Yes, this solution is better.
Here the updated patch:
---
makedumpfile.c | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -730,6 +730,24 @@ open_dump_file(void)
}
int
+check_dump_file(const char *path)
+{
+ char *err_str;
+
+ if (access(path, F_OK) != 0)
+ return TRUE; /* File does not exist */
+ if (info->flag_force) {
+ if (access(path, W_OK) == 0)
+ return TRUE; /* We have write permission */
+ err_str = strerror(errno);
+ } else {
+ err_str = strerror(EEXIST);
+ }
+ ERRMSG("Can't open the dump file (%s). %s\n", path, err_str);
+ return FALSE;
+}
+
+int
open_dump_bitmap(void)
{
int i, fd;
@@ -8609,6 +8627,9 @@ main(int argc, char *argv[])
MSG("Try `makedumpfile --help' for more information.\n");
goto out;
}
+ if (!check_dump_file(info->name_dumpfile))
+ goto out;
+
if (!open_files_for_rearranging_dumpdata())
goto out;
@@ -8626,9 +8647,11 @@ main(int argc, char *argv[])
MSG("Try `makedumpfile --help' for more information.\n");
goto out;
}
- if (!reassemble_dumpfile())
+ if (!check_dump_file(info->name_dumpfile))
goto out;
+ if (!reassemble_dumpfile())
+ goto out;
MSG("\n");
MSG("The dumpfile is saved to %s.\n", info->name_dumpfile);
} else if (info->flag_dmesg) {
@@ -8637,6 +8660,8 @@ main(int argc, char *argv[])
MSG("Try `makedumpfile --help' for more information.\n");
goto out;
}
+ if (!check_dump_file(info->name_dumpfile))
+ goto out;
if (!dump_dmesg())
goto out;
@@ -8648,6 +8673,16 @@ main(int argc, char *argv[])
MSG("Try `makedumpfile --help' for more information.\n");
goto out;
}
+ if (info->flag_split) {
+ for (i = 0; i < info->num_dumpfile; i++) {
+ if (!check_dump_file(SPLITTING_DUMPFILE(i)))
+ goto out;
+ }
+ } else {
+ if (!check_dump_file(info->name_dumpfile))
+ goto out;
+ }
+
if (!create_dumpfile())
goto out;
More information about the kexec
mailing list