|
@@ -833,3 +833,21 @@ int dump_align(struct coredump_params *cprm, int align)
|
|
|
return mod ? dump_skip(cprm, align - mod) : 1;
|
|
|
}
|
|
|
EXPORT_SYMBOL(dump_align);
|
|
|
+
|
|
|
+/*
|
|
|
+ * Ensures that file size is big enough to contain the current file
|
|
|
+ * postion. This prevents gdb from complaining about a truncated file
|
|
|
+ * if the last "write" to the file was dump_skip.
|
|
|
+ */
|
|
|
+void dump_truncate(struct coredump_params *cprm)
|
|
|
+{
|
|
|
+ struct file *file = cprm->file;
|
|
|
+ loff_t offset;
|
|
|
+
|
|
|
+ if (file->f_op->llseek && file->f_op->llseek != no_llseek) {
|
|
|
+ offset = file->f_op->llseek(file, 0, SEEK_CUR);
|
|
|
+ if (i_size_read(file->f_mapping->host) < offset)
|
|
|
+ do_truncate(file->f_path.dentry, offset, 0, file);
|
|
|
+ }
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(dump_truncate);
|