tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: struct file reference at VFS level



> On 28 Apr 2016, at 10:19, Emmanuel Dreyfus <manu%netbsd.org@localhost> wrote:
> 
>> Wouldn't it be better to put the mandatory locking at the file->vnode
>> level, operations vn_read() and vn_write()?
> 
> Do you mean that instead of providing support so that filesystems 
> can implement mandatory locks, we should just implement it above VFS
> for all filesystems? That would work for local filesystems, but I 
> understand it cannot be done for distributed filesystems, as the 
> local kernel knows nothing about locks set by other machines: you 
> need to let the filesystem handle it.

Advertised locks are already implemented inside the file systems and
we have VOP_ADVLOCK() with “op == F_GETLK”. What else is needed to
make the decision here?

>> Could you explain the proposed semantics in detail?
> 
> We have this:
> https://www.kernel.org/doc/Documentation/filesystems/mandatory-locking.txt

I strongly object against an implementation whose specification starts:

  0. Why you should avoid mandatory locking
  -----------------------------------------

  The Linux implementation is prey to a number of difficult-to-fix race
  conditions which in practice make it not dependable:

  - The write system call checks for a mandatory lock only once
    at its start.  It is therefore possible for a lock request to
    be granted after this check but before the data is modified.
    A process may then see file data change even while a mandatory
    lock was held.
  - Similarly, an exclusive lock may be granted on a file after
    the kernel has decided to proceed with a read, but before the
    read has actually completed, and the reading process may see
    the file data in a state which should not have been visible
    to it.
  - Similar races make the claimed mutual exclusion between lock
    and mmap similarly unreliable.

--
J. Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig (Germany)



Home | Main Index | Thread Index | Old Index