• Oleg Nesterov's avatar
    afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*() · 1702e065
    Oleg Nesterov authored
    David Howells says:
    
     (5) afs_find_server().
    
         There could be a lot of servers in the list and each server can have
         multiple addresses, so I think this would be better with an exclusive
         second pass.
    
         The server list isn't likely to change all that often, but when it does
         change, there's a good chance several servers are going to be
         added/removed one after the other.  Further, this is only going to be
         used for incoming cache management/callback requests from the server,
         which hopefully aren't going to happen too often - but it is remotely
         drivable.
    
     (6) afs_find_server_by_uuid().
    
         Similarly to (5), there could be a lot of servers to search through, but
         they are in a tree not a flat list, so it should be faster to process.
         Again, it's not likely to change that often and, again, when it does
         change it's likely to involve multiple changes.  This can be driven
         remotely by an incoming cache management request but is mostly going to
         be driven by setting up or reconfiguring a volume's server list -
         something that also isn't likely to happen often.
    
    Make the "seq" counter odd on the 2nd pass, otherwise read_seqbegin_or_lock()
    never takes the lock.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    Link: https://lore.kernel.org/r/20231130115614.GA21581@redhat.com/
    1702e065
server.c 18.3 KB