diff options
author | rmacklem <rmacklem@FreeBSD.org> | 2013-07-04 00:54:23 +0000 |
---|---|---|
committer | rmacklem <rmacklem@FreeBSD.org> | 2013-07-04 00:54:23 +0000 |
commit | 13e7ae9b12eff65ad795b3c0be804352d6411e89 (patch) | |
tree | cf165a87e1ea5d2bc9cf778e830eb0f7efd46cde /share/misc/committers-src.dot | |
parent | 4a1b5780c0e7276bbd15a6222f0453ac75a6e7d5 (diff) | |
download | FreeBSD-src-13e7ae9b12eff65ad795b3c0be804352d6411e89.zip FreeBSD-src-13e7ae9b12eff65ad795b3c0be804352d6411e89.tar.gz |
A problem with the old NFS client where large writes to large files
would sometimes result in a corrupted file was reported via email.
This problem appears to have been caused by r251719 (reverting
r251719 fixed the problem). Although I have not been able to
reproduce this problem, I suspect it is caused by another thread
increasing np->n_size after the mtx_unlock(&np->n_mtx) but before
the vnode_pager_setsize() call. Since the np->n_mtx mutex serializes
updates to np->n_size, doing the vnode_pager_setsize() with the
mutex locked appears to avoid the problem.
Unfortunately, vnode_pager_setsize() where the new size is smaller,
cannot be called with a mutex held.
This patch returns the semantics to be close to pre-r251719 such that the
call to the vnode_pager_setsize() is only delayed until after the mutex is
unlocked when np->n_size is shrinking. Since the file is growing
when being written, I believe this will fix the corruption.
Reported by: David G. Lawrence (dg@dglawrence.com)
Tested by: David G. Lawrence (pending, to happen soon)
Reviewed by: kib
MFC after: 1 week
Diffstat (limited to 'share/misc/committers-src.dot')
0 files changed, 0 insertions, 0 deletions