Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

btrfs: remove redundant i_size check in __extent_writepage_io()

In __extent_writepage_io(), we check whether

i_size <= page_offset(page).

Note that if i_size < page_offset(page), then
i_size >> PAGE_SHIFT < page->index.

If i_size == page_offset(page), then
i_size >> PAGE_SHIFT == page->index && offset_in_page(i_size) == 0.

__extent_writepage() already has a check for these cases that
returns without calling __extent_writepage_io():

end_index = i_size >> PAGE_SHIFT
pg_offset = offset_in_page(i_size);
if (page->index > end_index ||
(page->index == end_index && !pg_offset)) {
page->mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
unlock_page(page);
return 0;
}

Get rid of the one in __extent_writepage_io(), which was obsoleted in
211c17f51f46 ("Fix corners in writepage and btrfs_truncate_page").

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>

authored by

Omar Sandoval and committed by
David Sterba
f95d713b 169d2c87

-6
-6
fs/btrfs/extent_io.c
··· 3455 3455 update_nr_written(wbc, nr_written + 1); 3456 3456 3457 3457 end = page_end; 3458 - if (i_size <= start) { 3459 - btrfs_writepage_endio_finish_ordered(page, start, page_end, 1); 3460 - goto done; 3461 - } 3462 - 3463 3458 blocksize = inode->i_sb->s_blocksize; 3464 3459 3465 3460 while (cur <= end) { ··· 3535 3540 pg_offset += iosize; 3536 3541 nr++; 3537 3542 } 3538 - done: 3539 3543 *nr_ret = nr; 3540 3544 return ret; 3541 3545 }