27 Aug, 2010

2 commits

  • If we already had a RW open for a file, and get a readonly open, we were
    piggybacking on the existing RW open. That's inconsistent with the
    downgrade logic which blows away the RW open assuming you'll still have
    a readonly open.

    Also, make sure there is a readonly or writeonly open available for
    locking, again to prevent bad behavior in downgrade cases when any RW
    open may be lost.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

30 Jul, 2010

1 commit

  • The vfs doesn't really allow us to "upgrade" a file descriptor from
    read-only to read-write, and our attempt to do so in nfs4_upgrade_open
    is ugly and incomplete.

    Move to a different scheme where we keep multiple opens, shared between
    open stateid's, in the nfs4_file struct. Each file will be opened at
    most 3 times (for read, write, and read-write), and those opens will be
    shared between all clients and openers. On upgrade we will do another
    open if necessary instead of attempting to upgrade an existing open.
    We keep count of the number of readers and writers so we know when to
    close the shared files.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

13 May, 2010

3 commits

  • Get a refcount on the client on SEQUENCE,
    Release the refcount and renew the client when all respective compounds completed.
    Do not expire the client by the laundromat while in use.
    If the client was expired via another path, free it when the compounds
    complete and the refcount reaches 0.

    Note that unhash_client_locked must call list_del_init on cl_lru as
    it may be called twice for the same client (once from nfs4_laundromat
    and then from expire_client)

    Signed-off-by: Benny Halevy
    Signed-off-by: J. Bruce Fields

    Benny Halevy
     
  • Mark the client as expired under the client_lock so it won't be renewed
    when an nfsv4.1 session is done, after it was explicitly expired
    during processing of the compound.

    Do not renew a client mark as expired (in particular, it is not
    on the lru list anymore)

    Signed-off-by: Benny Halevy
    Signed-off-by: J. Bruce Fields

    Benny Halevy
     
  • Currently just initialize the cl_refcount to 1
    and decrement in expire_client(), conditionally freeing the
    client when the refcount reaches 0.

    To be used later by nfsv4.1 compounds to keep the client from
    timing out while in use.

    Signed-off-by: Benny Halevy
    Signed-off-by: J. Bruce Fields

    Benny Halevy
     

22 Apr, 2010

4 commits

  • The rfc allows a client to change the callback parameters, but we didn't
    previously implement it.

    Teach the callbacks to rerun themselves (by placing themselves on a
    workqueue) when they recognize that their rpc task has been killed and
    that the callback connection has changed.

    Then we can change the callback connection by setting up a new rpc
    client, modifying the nfs4 client to point at it, waiting for any work
    in progress to complete, and then shutting down the old client.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Mainly I just want to separate the arguments used for setting up the tcp
    client from the rest.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Now that the shutdown sequence guarantees callbacks are shut down before
    the client is destroyed, we no longer have a use for cl_count.

    We'll probably reinstate a reference count on the client some day, but
    it will be held by users other than callbacks.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • The NFSv4 server's fl_break callback can sleep (dropping the BKL), in
    order to allocate a new rpc task to send a recall to the client.

    As far as I can tell this doesn't cause any races in the current code,
    but the analysis is difficult. Also, the sleep here may complicate the
    move away from the BKL.

    So, just schedule some work to do the job for us instead. The work will
    later also prove useful for restarting a call after the callback
    information is changed.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

03 Apr, 2010

1 commit

  • Instead of allocating this small structure, just include it in the
    delegation.

    The nfsd4_callback structure isn't really necessary yet, but we plan to
    add to it all the information necessary to perform a callback.

    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

16 Dec, 2009

2 commits


15 Dec, 2009

1 commit