24 Jun, 2005

12 commits

  • Set the recovery directory via /proc/fs/nfsd/nfs4recoverydir.

    It may be changed any time, but is used only on startup.

    Signed-off-by: Andy Adamson
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • This patch adds the code to create and remove client subdirectories from the
    recovery directory, as described in the previous patch comment.

    Signed-off-by: Andy Adamson
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • NFSv4 clients are required to know what state they have on the server so that
    they can reclaim it on server reboot. However, it is possible for
    pathalogical combinations of server reboots and network partitions to leave a
    client in a state where it cannot know whether it has lost its state on the
    server.

    For this reason, rfc3530 requires that we store some information about clients
    to stable storage.

    So we maintain a directory /var/lib/nfs/v4recovery with a subdirectory for
    each client with active state. We leave open the possibility of including
    files underneath each such subdirectory with information about the client, but
    for now the subdirectories are empty.

    We create a client subdirectory whenever a client makes its first non-reclaim
    open_confirm.

    We remove a client subdirectory whenever either
    a) its lease expires, or
    b) the grace period ends without it reclaiming anything.
    When handling reclaims, we allow the reclaim if and only if the client doing
    the reclaim has a subdirectory.

    This patch adds just the code to scan the recovery directory on nfsd startup.

    Signed-off-by: Andy Adamson
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • The cb_parsed field is only used by probe_callback, to determine whether the
    callback information has been filled in by setclientid. But there is no way
    that probe_callback() can be called without that having already happened, so
    that check is superfluous, as is cb_parsed.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Trivial renaming patch:

    I can never remember, while looking at various lists relating the nfsd4 state
    structures, which are the "heads" and which are items on other lists, or which
    structures are actually on the various lists. The following convention helps
    me: given structures foo and bar, with foo containing the head of a list of
    bars, use "bars" for the name of the head of the list contained in the struct
    foo, and use "per_foo" for the entries in the struct bars.

    Already done for struct nfs4_file; go ahead and do it for the other nfsd4
    state structures.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • This patch contains the following possible cleanups:

    - make needlessly global code static

    Signed-off-by: Adrian Bunk
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • For the purposes of reboot recovery we keep a directory with subdirectories
    each having a name that is the ascii hex representation of the md5 sum of a
    client identifier for an active client.

    This adds the code to calculate that name. We also use it for the purposes of
    comparing clients, so if someone ever manages to find two client names that
    are md5 collisions, then we'll return clid_inuse to the second.

    Signed-off-by: Andy Adamson
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Separate out stuff that needs initialization on startup from stuff that only
    needs initialization on module init from static data.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Somewhat gratuitous rename to simplify following patch.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Allow recovery of delegations after reboot.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Add a struct kref to each nfs4_file and take a reference to it from each
    stateid and delegation that refers to it. The atomicity guarantees are
    overkill given that all this stuff is done under the single nfsd4 state lock,
    but a) we'd like finer-grained locking some day, and b) this simplifies the
    cleanup of the structures a bit, something that has previously been a bit
    complicated and bug-prone.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Trivial renaming patch:

    I can never remember, while looking at various lists relating the nfsd4 state
    structures, which are the "heads" and which are items on other lists, or which
    structures are actually on the various lists. The following convention helps
    me: given structures foo and bar, with foo containing the head of a list of
    bars, use "bars" for the name of the head of the list contained in the struct
    foo, and use "per_foo" for the entries in the struct bars.

    Go ahead and do this for struct nfs4_file.

    Signed-off-by: J. Bruce Fields
    Signed-off-by: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     

23 Jun, 2005

1 commit


17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds