Skip to content
  • Chris Mason's avatar
    Btrfs: fix acl caching · 7b1a14bb
    Chris Mason authored
    
    
    Linus noticed the btrfs code to cache acls wasn't properly caching
    a NULL acl when the inode didn't have any acls.  This meant the common
    case of no acls resulted in expensive btree searches every time the
    kernel checked permissions (which is quite often).
    
    This is a modified version of Linus' original patch:
    
    Properly set initial acl fields to BTRFS_ACL_NOT_CACHED in the inode.
    This forces an acl lookup when permission checks are done.
    
    Fix btrfs_get_acl to avoid lookups and locking when the inode acls fields
    are set to null.
    
    Fix btrfs_get_acl to use the right return value from __btrfs_getxattr
    when deciding to cache a NULL acl.  It was storing a NULL acl when
    __btrfs_getxattr return -ENOENT, but __btrfs_getxattr was actually returning
    -ENODATA for this case.
    
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    7b1a14bb