On Wed, Aug 21, 2019 at 10:42:03AM +0300, Nikolay Borisov wrote:
> Of the 22 (!!!) local variables declared in this function only 9 have
> function-wide context.
That's the evolution of code :)
> Of the remaining 13, 12 are needed in the main
> while loop of the function and 1 is needed in a tiny if branch, only in
> case we have prealloc extent. This commit reduces the lifespan of every
> variable to its bare minimum. It also renames the 'nolock'boolean to
> freespace_inode to clearly indicate its purpose.
>
> Signed-off-by: Nikolay Borisov <nborisov@xxxxxxxx>
> ---
>
> V2:
> * Don't add comment before assignment of prev_check
>
> fs/btrfs/inode.c | 61 ++++++++++++++++++++++--------------------------
> 1 file changed, 28 insertions(+), 33 deletions(-)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index ee582a36653d..fc6a8f9abb40 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -1310,30 +1310,18 @@ static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info,
> */
> static noinline int run_delalloc_nocow(struct inode *inode,
> struct page *locked_page,
> - u64 start, u64 end, int *page_started, int force,
> - unsigned long *nr_written)
> + const u64 start, const u64 end,
> + int *page_started, int force,
> + unsigned long *nr_written)
> {
> struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
> struct btrfs_root *root = BTRFS_I(inode)->root;
> - struct extent_buffer *leaf;
> struct btrfs_path *path;
> - struct btrfs_file_extent_item *fi;
> - struct btrfs_key found_key;
> - struct extent_map *em;
> - u64 cow_start;
> - u64 cur_offset;
> - u64 extent_end;
> - u64 extent_offset;
> - u64 disk_bytenr;
> - u64 num_bytes;
> - u64 disk_num_bytes;
> - u64 ram_bytes;
> - int extent_type;
> + u64 cow_start = (u64)-1;
> + u64 cur_offset = start;
> int ret;
> - int type;
> - int nocow;
> - int check_prev = 1;
> - bool nolock;
> + bool check_prev = true;
> + bool freespace_inode = btrfs_is_free_space_inode(BTRFS_I(inode));
You add 'const' to the parameters, I added one here too.
Reviewed-by: David Sterba <dsterba@xxxxxxxx>