• Shirish Pargaonkar's avatar
    cifs: Invoke id mapping functions (try #17 repost) · 9409ae58
    Shirish Pargaonkar authored
    rb tree search and insertion routines.
    
    A SID which needs to be mapped, is looked up in one of the rb trees
    depending on whether SID is either owner or group SID.
    If found in the tree, a (mapped) id from that node is assigned to
    uid or gid as appropriate.  If unmapped, an upcall is attempted to
    map the SID to an id.  If upcall is successful, node is marked as
    mapped.  If upcall fails, node stays marked as unmapped and a mapping
    is attempted again only after an arbitrary time period has passed.
    
    To map a SID, which can be either a Owner SID or a Group SID, key
    description starts with the string "os" or "gs" followed by SID converted
    to a string. Without "os" or "gs", cifs.upcall does not know whether
    SID needs to be mapped to either an uid or a gid.
    
    Nodes in rb tree have fields to prevent multiple upcalls for
    a SID.  Searching, adding, and removing nodes is done within global locks.
    Whenever a node is either found or inserted in a tree, a reference
    is taken on that node.
    Shrinker routine prunes a node if it has expired but does not prune
    an expired node if its refcount is not zero (i.e. sid/id of that node
    is_being/will_be accessed).
    Thus a node, if its SID needs to be mapped by making an upcall,
    can safely stay and its fields accessed without shrinker pruning it.
    A reference (refcount) is put on the node without holding the spinlock
    but a reference is get on the node by holding the spinlock.
    
    Every time an existing mapped node is accessed or mapping is attempted,
    its timestamp is updated to prevent it from getting erased or a
    to prevent multiple unnecessary repeat mapping retries respectively.
    
    For now, cifs.upcall is only used to map a SID to an id (uid or gid) but
    it would be used to obtain an SID for an id.
    Signed-off-by: default avatarShirish Pargaonkar <shirishpargaonkar@gmail.com>
    Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
    Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
    9409ae58
cifsacl.c 31.7 KB