afs: Overhaul cell database management
authorDavid Howells <dhowells@redhat.com>
Thu, 2 Nov 2017 15:27:50 +0000 (15:27 +0000)
committerDavid Howells <dhowells@redhat.com>
Mon, 13 Nov 2017 15:38:18 +0000 (15:38 +0000)
commit989782dcdc91a5e6d5999c7a52a84a60a0811e56
tree138ed46554536280e0d4d1834a16c28740e8cdae
parentbe080a6f43c40976afc950ee55e9b7f8e2b53525
afs: Overhaul cell database management

Overhaul the way that the in-kernel AFS client keeps track of cells in the
following manner:

 (1) Cells are now held in an rbtree to make walking them quicker and RCU
     managed (though this is probably overkill).

 (2) Cells now have a manager work item that:

     (A) Looks after fetching and refreshing the VL server list.

     (B) Manages cell record lifetime, including initialising and
       destruction.

     (B) Manages cell record caching whereby threads are kept around for a
       certain time after last use and then destroyed.

     (C) Manages the FS-Cache index cookie for a cell.  It is not permitted
       for a cookie to be in use twice, so we have to be careful to not
       allow a new cell record to exist at the same time as an old record
       of the same name.

 (3) Each AFS network namespace is given a manager work item that manages
     the cells within it, maintaining a single timer to prod cells into
     updating their DNS records.

     This uses the reduce_timer() facility to make the timer expire at the
     soonest timed event that needs happening.

 (4) When a module is being unloaded, cells and cell managers are now
     counted out using dec_after_work() to make sure the module text is
     pinned until after the data structures have been cleaned up.

 (5) Each cell's VL server list is now protected by a seqlock rather than a
     semaphore.

Signed-off-by: David Howells <dhowells@redhat.com>
fs/afs/cell.c
fs/afs/internal.h
fs/afs/main.c
fs/afs/proc.c
fs/afs/super.c
fs/afs/xattr.c