• Jeff Layton's avatar
    cifs: add routines to build sessions and tcons on the fly · 9d002df4
    Jeff Layton authored
    This patch is rather large, but it's a bit difficult to do piecemeal...
    
    For non-multiuser mounts, everything will basically work as it does
    today. A call to cifs_sb_tlink will return the "master" tcon link.
    
    Turn the tcon pointer in the cifs_sb into a radix tree that uses the
    fsuid of the process as a key. The value is a new "tcon_link" struct
    that contains info about a tcon that's under construction.
    
    When a new process needs a tcon, it'll call cifs_sb_tcon. That will
    then look up the tcon_link in the radix tree. If it exists and is
    valid, it's returned.
    
    If it doesn't exist, then we stuff a new tcon_link into the tree and
    mark it as pending and then go and try to build the session/tcon.
    If that works, the tcon pointer in the tcon_link is updated and the
    pending flag is cleared.
    
    If the construction fails, then we set the tcon pointer to an ERR_PTR
    and clear the pending flag.
    
    If the radix tree is searched and the tcon_link is marked pending
    then we go to sleep and wait for the pending flag to be cleared.
    Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
    9d002df4
cifsglob.h 25.3 KB