• Amir Goldstein's avatar
    ovl: do not open/llseek lower file with upper sb_writers held · c63e56a4
    Amir Goldstein authored
    overlayfs file open (ovl_maybe_lookup_lowerdata) and overlay file llseek
    take the ovl_inode_lock, without holding upper sb_writers.
    
    In case of nested lower overlay that uses same upper fs as this overlay,
    lockdep will warn about (possibly false positive) circular lock
    dependency when doing open/llseek of lower ovl file during copy up with
    our upper sb_writers held, because the locking ordering seems reverse to
    the locking order in ovl_copy_up_start():
    
    - lower ovl_inode_lock
    - upper sb_writers
    
    Let the copy up "transaction" keeps an elevated mnt write count on upper
    mnt, but leaves taking upper sb_writers to lower level helpers only when
    they actually need it.  This allows to avoid holding upper sb_writers
    during lower file open/llseek and prevents the lockdep warning.
    
    Minimizing the scope of upper sb_writers during copy up is also needed
    for fixing another possible deadlocks by a following patch.
    Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    c63e56a4
copy_up.c 29 KB