cvs commit: src/sys/fs/msdosfs msdosfs_fat.c

Bruce Evans bde at FreeBSD.org
Sun Sep 23 07:49:33 PDT 2007


bde         2007-09-23 14:49:32 UTC

  FreeBSD src repository

  Modified files:
    sys/fs/msdosfs       msdosfs_fat.c 
  Log:
  Remove some of the pessimizations involving writing the fsi sector.
  All active fields in fsi are advisory/optional, so we shouldn't do
  extra work to make them valid at all times, but instead we write to
  the fsi too often (we still do), and we searched for a free cluster
  for fsinxtfree too often.
  
  This commit just removes the whole search and its results, so that we
  write out our in-core copy of fsinxtfree instead of writing a "fixed"
  copy and clobbering our in-core copy.  This saves fixing 3 bugs:
  - off-by-1 error for the end of the search, resulting in fsinxtfree
    not actually being adjusted iff only the last cluster is free.
  - missing adjustment when no clusters are free.
  - off-by-many error for the start of the search.  Starting the search
    at 0 instead of at (the in-core copy of) fsinxtfree did more than
    defeat the reasons for existence of fsinxtfree.  fsinxtfree exists
    mainly to avoid having to start at 0 for just the first search per
    mount, but has the side effect of reducing bias towards allocating
    near cluster 0.  The bias would normally only be generated by the
    first search per mount (if fsinxtfree is not supported), but since
    we also adjusted the in-core copy of fsinxtfree here, we were doing
    extra work to maximize the bias.
  
  Approved by:    re (kensmith)
  
  Revision  Changes    Path
  1.48      +0 -16     src/sys/fs/msdosfs/msdosfs_fat.c


More information about the cvs-src mailing list