And this is exactly what makes it re-startable.
A faulting write will fill some subsequent memory area with zeroes, but a
subsequent write can complete the original one.
It has to _commit_ the whole area, because it uses the pre-fault size
information to optimize away reads etc, ie if you do a
write(fd, buf, 4096);
at a page-aligned offset, the write code knows that it shouldn't read the
old contents because they get overwritten.
Which is why we need to commit the whole 4096 bytes, even if we only
actually were able to get a single byte from user space.
But by then telling user space that we couldn't actually write more than 1
byte, we give user space the _ability_ to re-start the write with the
missing 4095 bytes.
> generic_file_read() on the other hand seems to be ok.
That one doesn't have any of the same issues.
Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/