This series aims at making the nocow path code more understanble. This done by doing the following things:
1. Re-arranging and renaming some variables so that they have more expressive names, as well as reducing their scope. Patch 1 does this. 2. Since run_delalloc_nocow open-codes traversal of the btree it contains a lot of checks which do not pertain to the nocow logic per-se, but are there to ensure the code has found the correct EXTENT_ITEM. The nocow logic itself contains some subtle checks which are non-obvious at first. Patch 2 rectifies this by adding appropriate comments. 3. Patch 3 duplicates the call to btrfs_add_ordered_extent into each branch for REGULAR or PREALLOC extents. Despite this duplication I think the code flow becomes more streamlined and easier to understand. It also does away with one of the local variables. 4. Patch 4 moves extent checking code into the branch it pertains to. 5. Patch 5 simplifies the conditions of the main 'if' in that function 6. Finally, patch 6 removes the BUG_ON that will be triggered in case btrfs_add_ordered_extent returned ENOMEM. Now it's replaced with proper graceful error handling. This patchset has been tested with a full xfstest run with -onodatacow option mount options set. Nikolay Borisov (6): btrfs: Refactor run_delalloc_nocow btrfs: Improve comments around nocow path btrfs: Simplify run_delalloc_nocow btrfs: Streamline code in run_delalloc_nocow in case of inline extents btrfs: Simplify extent type check btrfs: Remove BUG_ON from run_delalloc_nocow fs/btrfs/extent-tree.c | 3 + fs/btrfs/inode.c | 156 ++++++++++++++++++++++++++--------------- 2 files changed, 102 insertions(+), 57 deletions(-) -- 2.17.1