mnt_stat.f_iosize (which is used to set bo_bsize) must be set to
the largest size of buffer cache block or the mapping of the buffer is bogus. When a mount with rsize=4096,wsize=4096 was done, f_iosize would be set to 4096. This resulted in corrupted directory data, since the buffer cache block size for directories is NFS_DIRBLKSIZ (8192). This patch fixes the code so that it always sets f_iosize to at least NFS_DIRBLKSIZ. Tested by: krichy@cflinux.hu PR: 177971 MFC after: 2 weeks
This commit is contained in:
parent
aa15bac7df
commit
c1f0354622
@ -216,10 +216,12 @@ newnfs_iosize(struct nfsmount *nmp)
|
||||
* Calculate the size used for io buffers. Use the larger
|
||||
* of the two sizes to minimise nfs requests but make sure
|
||||
* that it is at least one VM page to avoid wasting buffer
|
||||
* space.
|
||||
* space. It must also be at least NFS_DIRBLKSIZ, since
|
||||
* that is the buffer size used for directories.
|
||||
*/
|
||||
iosize = imax(nmp->nm_rsize, nmp->nm_wsize);
|
||||
iosize = imax(iosize, PAGE_SIZE);
|
||||
iosize = imax(iosize, NFS_DIRBLKSIZ);
|
||||
nmp->nm_mountp->mnt_stat.f_iosize = iosize;
|
||||
return (iosize);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user