• Andrew Morton's avatar
    [PATCH] add file_operations.fcntl · cea39746
    Andrew Morton authored
    From: Chuck Lever <cel@citi.umich.edu>
    
    O_DIRECT|O_APPEND cannot possibly work on NFS, so NFS needs some way of
    preventing the user from setting this combination.  We felt that the best
    way of implementing this restriction is to allow the filesytem to implement
    its own fcntl() handler.
    
    This patch does, that, and provide the appropriate handler for NFS.
    
    Additional details from Chuck:
    
    Forgetting O_DIRECT for a moment, O_APPEND writes on NFS don't work in any
    case when multiple clients are writing to a file, since an NFS client can
    never guarantee it knows where the true end of file is 100% of the time.
    it works as expected iff only one client writes to an O_APPEND file at a
    time.
    
    Multi-client O_APPEND writing doesn't seem to be a problem for any
    application I'm aware of.  Since it can be made to behave in the
    multi-client case with careful application logic or by using file locking,
    I don't think we should disallow it.
    
    I want to drop the inode semaphore when doing NFS direct I/O because it is
    synchronous; holding the i_sem means we reduce direct I/O concurrency to
    one I/O per file at a time.  the important thing sct was worried about was
    the case where a single client is writing with O_APPEND and O_DIRECT, and
    we don't hold the i_sem during the write.
    
    We must at least hold the i_sem when determining where the end of file is
    to do the O_APPEND write.  In 2.6, I believe that is handled correctly in
    the VFS layer, so this is not an issue for 2.6, right?
    cea39746
file.c 9.39 KB