summaryrefslogtreecommitdiffstats
path: root/lib/libgssapi
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-06-06 16:30:16 +0000
committerkib <kib@FreeBSD.org>2012-06-06 16:30:16 +0000
commit0f85e0cb46e2488b2ee87d3ca4d2976c75b7f891 (patch)
treec05139412205953febdca0f88b12e933390db9be /lib/libgssapi
parentb911315e84f1c9ad9872b5d8c9a03241bbcbcaff (diff)
downloadFreeBSD-src-0f85e0cb46e2488b2ee87d3ca4d2976c75b7f891.zip
FreeBSD-src-0f85e0cb46e2488b2ee87d3ca4d2976c75b7f891.tar.gz
Improve handling of uiomove(9) errors for the NFS client.
Do not brelse() the buffer unconditionally with BIO_ERROR set if uiomove() failed. The brelse() treats most buffers with BIO_ERROR as B_INVAL, dropping their content. Instead, if the write request covered the whole buffer, remember the cached state and brelse() with BIO_ERROR set only if the buffer was not cached previously. Update the buffer dirtyoff/dirtyend based on the progress recorded by uiomove() in passed struct uio, even in the presence of error. Otherwise, usermode could see changed data in the backed pages, but later the buffer is destroyed without write-back. If uiomove() failed for IO_UNIT request, try to truncate the vnode back to the pre-write state, and rewind the progress in passed uio accordingly, following the FFS behaviour. Reviewed by: rmacklem (some time ago) Tested by: pho MFC after: 1 month
Diffstat (limited to 'lib/libgssapi')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud