Patch for rc.d/devd on FreeBSD 9-current

Dag-Erling Smørgrav des at des.no
Mon Jun 28 08:40:42 UTC 2010


Dag-Erling Smørgrav <des at des.no> writes:

> "M. Warner Losh" <imp at bsdimp.com> writes:
>> Maybe the real problem is that devd locks the file, then dies.  The
>> file remains locked, so the flopen is failing with EWOULDBLOCK.
>
> The lock is released when the process that holds it terminates.
>
>> But I suspect the real real problem is the implicit assumption that
>> flock will release the lock when a process terminates...  That isn't
>> the case in BSD
> Yes it is.

Additional details:

 - Under POSIX semantics (fcntl(2) locks), the lock is released when
   *any* file descriptor the process holds for that file is closed.
   This is handled in fdfree().

 - Under flock semantics (flock(2) locks), the lock is released when
   *all* file descriptors the process holds for that file is closed.
   This is handled in vn_closefile().

 - In both cases, all locks a process holds are released when the
   process terminates.

Gotta love the following excerpt from VOP_OPEN(9), btw:

  The VOP_OPEN() entry point is called before a file is accessed by a
  process and the VOP_CLOSE() entry point is called after a file is fin‐
  ished with by the process.

:)

DES
-- 
Dag-Erling Smørgrav - des at des.no


More information about the freebsd-current mailing list