• Linus Torvalds's avatar
    Merge tag 'afs-fixes-20201016' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs · fad70111
    Linus Torvalds authored
    Pull afs updates from David Howells:
     "A collection of fixes to fix afs_cell struct refcounting, thereby
      fixing a slew of related syzbot bugs:
    
       - Fix the cell tree in the netns to use an rwsem rather than RCU.
    
         There seem to be some problems deriving from the use of RCU and a
         seqlock to walk the rbtree, but it's not entirely clear what since
         there are several different failures being seen.
    
         Changing things to use an rwsem instead makes it more robust. The
         extra performance derived from using RCU isn't necessary in this
         case since the only time we're looking up a cell is during mount or
         when cells are being manually added.
    
       - Fix the refcounting by splitting the usage counter into a memory
         refcount and an active users counter. The usage counter was doing
         double duty, keeping track of whether a cell is still in use and
         keeping track of when it needs to be destroyed - but this makes the
         clean up tricky. Separating these out simplifies the logic.
    
       - Fix purging a cell that has an alias. A cell alias pins the cell
         it's an alias of, but the alias is always later in the list. Trying
         to purge in a single pass causes rmmod to hang in such a case.
    
       - Fix cell removal. If a cell's manager is requeued whilst it's
         removing itself, the manager will run again and re-remove itself,
         causing problems in various places. Follow Hillf Danton's
         suggestion to insert a more terminal state that causes the manager
         to do nothing post-removal.
    
      In additional to the above, two other changes:
    
       - Add a tracepoint for the cell refcount and active users count. This
         helped with debugging the above and may be useful again in future.
    
       - Downgrade an assertion to a print when a still-active server is
         seen during purging. This was happening as a consequence of
         incomplete cell removal before the servers were cleaned up"
    
    * tag 'afs-fixes-20201016' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs:
      afs: Don't assert on unpurgeable server records
      afs: Add tracing for cell refcount and active user count
      afs: Fix cell removal
      afs: Fix cell purging with aliases
      afs: Fix cell refcounting by splitting the usage counter
      afs: Fix rapid cell addition/removal by not using RCU on cells tree
    fad70111
super.c 17.6 KB