Hi.
I'm pondering this piece of mappedwrite():
if (pp = page_lookup(vp, start, SE_SHARED)) {
caddr_t va;
rw_exit(&zp->z_map_lock);
va = ppmapin(pp, PROT_READ | PROT_WRITE, (caddr_t)-1L);
error = uiomove(va+off, bytes, UIO_WRITE, uio);
if (error == 0) {
dmu_write(zfsvfs->z_os, zp->z_id,
woff, bytes, va+off, tx);
}
ppmapout(va);
page_unlock(pp);
[...]
In FreeBSD I call dmu_write() unconditionally, because if uiomove()
partially succeeds, we will lose the change. If uiomove() fails
entirely, well, we just write what we got before one more time.
Is it also the case for OpenSolaris?
--
Pawel Jakub Dawidek http://www.wheel.pl
pjd at FreeBSD.org http://www.FreeBSD.org
FreeBSD committer Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL:
<http://mail.opensolaris.org/pipermail/zfs-code/attachments/20070501/2db196a4/attachment.bin>