• Filipe Manana's avatar
    btrfs: stop trying to log subdirectories created in past transactions · de6bc7f5
    Filipe Manana authored
    When logging a directory we are trying to log subdirectories that were
    changed in the current transaction and created in a past transaction.
    This type of behaviour was introduced by commit 2f2ff0ee ("Btrfs:
    fix metadata inconsistencies after directory fsync"), to fix some metadata
    inconsistencies that in the meanwhile no longer need this behaviour due to
    numerous other changes that happened throughout the years.
    
    This behaviour, besides not needed anymore, it's also undesirable because:
    
    1) It's not reliable because it's only triggered for the directories
       of dentries (dir items) that happen to be present on a leaf that
       was changed in the current transaction. If a dentry that points to
       a directory resides on a leaf that was not changed in the current
       transaction, then it's not logged, as at log_dir_items() and
       log_new_dir_dentries() we use btrfs_search_forward();
    
    2) It's not required by posix or any standard, it's undefined territory.
       The only way to guarantee a subdirectory is logged, it to explicitly
       fsync it;
    
    Making the behaviour guaranteed would require scanning all directory
    items, check which point to a directory, and then fsync each subdirectory
    which was modified in the current transaction. This could be very
    expensive for large directories with many subdirectories and/or large
    subdirectories.
    
    So remove that obsolete logic.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    de6bc7f5
tree-log.c 187 KB