Revert "Implement VFS read clustering for MSDOSFS"
authorsf <sf@openbsd.org>
Tue, 30 Aug 2016 19:47:23 +0000 (19:47 +0000)
committersf <sf@openbsd.org>
Tue, 30 Aug 2016 19:47:23 +0000 (19:47 +0000)
commita7510cbce6cfc4f5599c2fe7d80eec19277ff1a2
treef8d46bb43b4fcd15ee6b9b1252064b0d7385d773
parent6f9b594291a08bb8ef9193202bf248be575aca61
Revert "Implement VFS read clustering for MSDOSFS"

This caused garbage to be written instead of blocks of 0-bytes if a
file is extended by seeking past the end. This happens for example
when extracting files containing lots of 0-bytes with tar.

ok mpi@

Details of original commit:

  msdosfs_vnops.c revision 1.105
  denode.h revision 1.28
  date: 2016/01/13 10:00:55;  author: mpi;  commitid: ru9jHQwQX09BC5Bw;

  Implement VFS read clustering for MSDOSFS.

  The logic used in msdosfs_bmap() to loop calling pcbmap() comes from
  FreeBSD and is not really efficient but it is good enough since it is
  only called when generating I/O.

  With this diff I get a 100% improvement when reading big files from a
  crappy USB stick.

  With this and bread_cluster(9) modified to not re-fetch B_CACHED buffers,
  reading large contiguous files with chunk sizes of MAXPHYS is almost as
  fast as physio(9) on the same device.

  For a 'real world' example, when copying music files from a USB stick I
  see a speed jump from 15MB/s on -current to 24Mb/s with this diff.

  While here rename some 'lbn' variables into 'cn' to better reflect what
  we're dealing with.

  Tested by Mathieu, with support from deraadt@
sys/msdosfs/denode.h
sys/msdosfs/msdosfs_vnops.c