Work around a memory fault on ia64 caused by having the 1MB buffer on

the stack in DoFile(). This needs some investigation. In the mean time
we do a one time malloc() for the buffer to have it on the heap instead.
This commit is contained in:
Marcel Moolenaar 2002-05-27 07:54:43 +00:00
parent 66f9c15fcf
commit 6db5f8a79e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=97340

View file

@ -205,8 +205,8 @@ check_space(char *savedir, off_t dumpsize)
static void
DoFile(char *savedir, const char *device)
{
static char *buf = NULL;
struct kerneldumpheader kdhf, kdhl;
char buf[1024 * 1024];
off_t mediasize, dumpsize, firsthd, lasthd, dmpcnt;
FILE *info, *fp;
int fd, fdinfo, error, wl;
@ -218,6 +218,20 @@ DoFile(char *savedir, const char *device)
dmpcnt = 0;
mediasize = 0;
/*
* XXX On ia64 something breaks when the buffer is put on the
* stack. When the buffer is roughly larger than 128K the read()
* below simply fails with errno=14 (EFAULT). We work around
* this by doing a on-time allocation...
*/
if (buf == NULL) {
buf = malloc(1024 * 1024);
if (buf == NULL) {
syslog(LOG_ERR, "%m");
return;
}
}
if (verbose)
printf("checking for kernel dump on device %s\n", device);
@ -226,6 +240,7 @@ DoFile(char *savedir, const char *device)
syslog(LOG_ERR, "%s: %m", device);
return;
}
error = ioctl(fd, DIOCGMEDIASIZE, &mediasize);
if (!error)
error = ioctl(fd, DIOCGSECTORSIZE, &sectorsize);