• Louis Rilling's avatar
    configfs: Introduce configfs_dirent_lock · 6f610764
    Louis Rilling authored
    This patch introduces configfs_dirent_lock spinlock to protect configfs_dirent
    traversals against linkage mutations (add/del/move). This will allow
    configfs_detach_prep() to avoid locking i_mutexes.
    
    Locking rules for configfs_dirent linkage mutations are the same plus the
    requirement of taking configfs_dirent_lock. For configfs_dirent walking, one can
    either take appropriate i_mutex as before, or take configfs_dirent_lock.
    
    The spinlock could actually be a mutex, but the critical sections are either
    O(1) or should not be too long (default groups walking in last patch).
    
    ChangeLog:
      - Clarify the comment on configfs_dirent_lock usage
      - Move sd->s_element init before linking the new dirent
      - In lseek(), do not release configfs_dirent_lock before the dirent is
        relinked.
    Signed-off-by: default avatarLouis Rilling <Louis.Rilling@kerlabs.com>
    Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
    6f610764
dir.c 36.4 KB