Commit 5a31e1d0 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(write_segment): Write valid data in units of 1<<13,

but write zeros only a page at a time.
parent a96621c6
......@@ -1014,15 +1014,18 @@ write_segment (new, ptr, end)
register int i, nwrite, ret;
char buf[80];
extern int errno;
/* This is the normal amount to write at once.
It is the size of block that NFS uses. */
int writesize = 1 << 13;
int pagesize = getpagesize ();
char *zeros = (char *) alloca (pagesize);
char zeros[1 << 13];
bzero (zeros, pagesize);
bzero (zeros, sizeof (zeros));
for (i = 0; ptr < end;)
{
/* distance to next multiple of pagesize. */
nwrite = (((int) ptr + pagesize) & -pagesize) - (int) ptr;
/* Distance to next multiple of writesize. */
nwrite = (((int) ptr + writesize) & -writesize) - (int) ptr;
/* But not beyond specified end. */
if (nwrite > end - ptr) nwrite = end - ptr;
ret = write (new, ptr, nwrite);
......@@ -1035,7 +1038,16 @@ write_segment (new, ptr, end)
&& errno == EFAULT
#endif
)
write (new, zeros, nwrite);
{
/* Write only a page of zeros at once,
so that we we don't overshoot the start
of the valid memory in the old data segment. */
if (nwrite > pagesize)
nwrite = pagesize;
write (new, zeros, nwrite);
}
#if 0 /* Now that we have can ask `write' to write more than a page,
it is legit for write do less than the whole amount specified. */
else if (nwrite != ret)
{
sprintf (buf,
......@@ -1043,6 +1055,7 @@ write_segment (new, ptr, end)
ptr, new, nwrite, ret, errno);
PERROR (buf);
}
#endif
i += nwrite;
ptr += nwrite;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment