13e7ae9b12
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 |
||
---|---|---|
.. | ||
nfs_bio.c | ||
nfs_kdtrace.c | ||
nfs_krpc.c | ||
nfs_nfsiod.c | ||
nfs_node.c | ||
nfs_subs.c | ||
nfs_vfsops.c | ||
nfs_vnops.c | ||
nfs.h | ||
nfsargs.h | ||
nfsm_subs.h | ||
nfsmount.h | ||
nfsnode.h | ||
nfsstats.h | ||
nlminfo.h |