patch-2.2.4 linux/fs/binfmt_elf.c
Next file: linux/fs/buffer.c
Previous file: linux/fs/binfmt_aout.c
Back to the patch index
Back to the overall index
- Lines: 96
- Date:
Mon Mar 22 10:04:30 1999
- Orig file:
v2.2.3/linux/fs/binfmt_elf.c
- Orig date:
Sun Nov 8 14:03:05 1998
diff -u --recursive --new-file v2.2.3/linux/fs/binfmt_elf.c linux/fs/binfmt_elf.c
@@ -1032,10 +1032,10 @@
#undef DUMP_SEEK
#define DUMP_WRITE(addr, nr) \
- if (!dump_write(&file, (addr), (nr))) \
+ if (!dump_write(file, (addr), (nr))) \
goto close_coredump;
#define DUMP_SEEK(off) \
- if (!dump_seek(&file, (off))) \
+ if (!dump_seek(file, (off))) \
goto close_coredump;
/*
* Actual dumper
@@ -1047,7 +1047,7 @@
static int elf_core_dump(long signr, struct pt_regs * regs)
{
int has_dumped = 0;
- struct file file;
+ struct file *file;
struct dentry *dentry;
struct inode *inode;
mm_segment_t fs;
@@ -1118,30 +1118,28 @@
fs = get_fs();
set_fs(KERNEL_DS);
+
memcpy(corefile,"core.",5);
#if 0
memcpy(corefile+5,current->comm,sizeof(current->comm));
#else
corefile[4] = '\0';
#endif
- dentry = open_namei(corefile, O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
- if (IS_ERR(dentry)) {
- dentry = NULL;
+ file = filp_open(corefile, O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
+ if (IS_ERR(file))
goto end_coredump;
- }
+ dentry = file->f_dentry;
inode = dentry->d_inode;
-
- if(inode->i_nlink > 1)
- goto end_coredump; /* multiple links - don't dump */
+ if (inode->i_nlink > 1)
+ goto close_coredump; /* multiple links - don't dump */
if (!S_ISREG(inode->i_mode))
- goto end_coredump;
+ goto close_coredump;
if (!inode->i_op || !inode->i_op->default_file_ops)
- goto end_coredump;
- if (init_private_file(&file, dentry, 3))
- goto end_coredump;
- if (!file.f_op->write)
goto close_coredump;
+ if (!file->f_op->write)
+ goto close_coredump;
+
has_dumped = 1;
current->flags |= PF_DUMPCORE;
@@ -1297,7 +1295,7 @@
}
for(i = 0; i < numnote; i++)
- if (!writenote(¬es[i], &file))
+ if (!writenote(¬es[i], file))
goto close_coredump;
set_fs(fs);
@@ -1319,19 +1317,17 @@
DUMP_WRITE((void *)addr, len);
}
- if ((off_t) file.f_pos != offset) {
+ if ((off_t) file->f_pos != offset) {
/* Sanity check */
- printk("elf_core_dump: file.f_pos (%ld) != offset (%ld)\n",
- (off_t) file.f_pos, offset);
+ printk("elf_core_dump: file->f_pos (%ld) != offset (%ld)\n",
+ (off_t) file->f_pos, offset);
}
close_coredump:
- if (file.f_op->release)
- file.f_op->release(inode,&file);
+ filp_close(file, NULL);
end_coredump:
set_fs(fs);
- dput(dentry);
#ifndef CONFIG_BINFMT_ELF
MOD_DEC_USE_COUNT;
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)