]> err.no Git - util-linux/commit
mount: fix mtab_lock
authorKarel Zak <kzak@redhat.com>
Fri, 30 Mar 2007 11:10:59 +0000 (13:10 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 30 Mar 2007 11:10:59 +0000 (13:10 +0200)
commitdc8fdc57cd3ba0658cf4ab05031695c2d2965f93
tree4d7e113dac6f95bed306907c1c4e7a1b488351cc
parent2cd72ac0e054bb070cad880d0cc9366ebf08b3eb
mount: fix mtab_lock

* the lock function uses F_SETLK / F_SETLKW as a conditional wait.
  It's more reliable and better for performance to close the
  MOUNTED_LOCK file in unlock_mtab(), otherwise concurrent process will
  be wait by while () { link() } loop instead on fcntl(F_SETLKW).

  Thanks to Jeff Moyer <moyer@redhat.com> who found the problem two
  year ago.

* when open(MOUNTED_LOCK) failed, we need to try everything again, but
  the original code didn't zeroize "we_created_lockfile" and the old
  version in particular case left lock_mtab() without locked /etc/mtab.
  This is nasty bug.

* the original locking code had bad performance due too long sleep
  (1s),  between attempts. Now we're more aggressive and we use
  5000ms. The result is that more processes is able to lock mtab in
  short time slice.

  Thanks to Peter Rockai <prockai@redhat.com> who found the problem
  and suggest a first version of the code with usleep.

* now we don't count number of attempts anymore, but we count sum of
  time which we spend in the mtab_lock(). The number of attempts is
  not important (and it also depends on CPU performance, load,
  scheduler, ...), the important thing is how long we spend with
  locking. Now time  limit is 30s.

Signed-off-by: Karel Zak <kzak@redhat.com>
mount/fstab.c
tests/expected/ts-mount-mtablock
tests/ts-mount-mtablock